Was sind die offenen Fragen in rein funktionalen Datenstrukturen?


51

Diese Frage ist inspiriert von einer weiteren Frage zu den Neuerungen in PFDS seit der Veröffentlichung von Okasakis Buch im Jahr 1998 .

Ich beginne mit zwei Fragen, die ich habe:

  • Gibt es eine rein funktionale Set-Datenstruktur, die sich der Geschwindigkeit von Hash-Tabellen nähert? Versuche sind noch nicht da.
  • Gibt es rein funktionale Fingerbäume mit O (1) -Anhang? Das bisher beste ist O (lg lg n), entwickelt von Kaplan und Tarjan.

Welche anderen rein funktionalen Datenstrukturprobleme sind offen?


Ich nehme an, du meinst Versuche wie in Hash-Bäumen und nicht die allgemeineren Wörterbücher mit Schlüsseln, die Sequenzen sind? FWIW, ich denke, es ist unmöglich, hier an den guten alten Hash-Tisch heranzukommen.
Jon Harrop

Antworten:


19

Ich werde die Frage etwas großzügig interpretieren. Bei Datenstrukturen im Okasaki-Stil ist die Speicherung eine Form der impliziten Mutation, die sich nebenbei auf die Laufzeit auswirkt. Daher werde ich mich mit der Frage befassen, ob es sich um persistente Datenstrukturen im engeren Sinne handelt und nicht um Datenstrukturen mit einer rein funktionalen Implementierung, die eine Teilmenge der ersteren sind. Mit streng meine ich, dass Sie in der Lage sein sollten, auf ältere Versionen einer Datenstruktur ohne Abstriche zuzugreifen, der Versionsbaum kann beliebig verzweigen usw.

In diesem Zusammenhang betrachte ich die anhaltende UNION-FIND als ein wichtiges offenes Problem. Es gibt das Conchon-Filliâtre-Papier, das im anderen Thread erwähnt wurde. Ein Kommentator hat bereits ein Problem mit seinem sogenannten persistenten Array angesprochen: Es ist wirklich nur halbpersistent. Angenommen, Sie ersetzen es durch einen Hash-Versuch oder ein anderes wirklich beständiges Array, das sich im schlimmsten (und vermutlich durchschnittlichen) Fall besser verhält, im besten Fall jedoch schlechter. Da bleibt noch ein wichtiges Thema offen:

Das Papier gibt einen formalen Beweis für die Richtigkeit in Coq. Sie können sich jedoch weder formal noch informell mit der amortisierten Komplexität befassen. Es ist sehr viel nicht mir klar, dass die hinter den Kulissen Mutation führt zu dem erwarteten amortisierten Komplexität in allen Fällen kompliziert. Als ich das letzte Mal darüber nachdachte, war ich zuversichtlich, ein Gegenbeispiel konstruieren zu können, wenn ich mich anstrengte. Auch wenn ich in diesem letzten Teil falsch liege, ist das Fehlen einer angemessenen Analyse eine große Lücke. Es ist klar, dass Trajans klassische Amortisationsanalyse von UNION-FIND nicht direkt übertragen wird.


5
Ein Kandidat für vollständig persistente (aber nicht konfluent persistente) Arrays wird in Konfluent persistente Versuche zur effizienten Versionskontrolle vorgestellt . Die Autoren behaupten, dass O (lg lg n) langsamer ist als Dietz et al. O (lg lg m) langsamer, wobei m die Anzahl der Operationen ist, die mit dem Array ausgeführt wurden.
Jbapple

1
Ich werde auch hinzufügen, dass, obwohl Okasakis faul abgeschriebene Strukturen oft viel einfacher sind als die Alternativen, ich keine Datenstruktur kenne, die so implementiert werden kann, dass sie nicht auch implementiert werden kann (mit den gleichen Zeitgrenzen, aber schlimmstenfalls) auf wirklich rein funktionale Weise.
Jbapple

12

Welche anderen rein funktionalen Datenstrukturprobleme sind offen?

Hier ist eins:

Was ist das rein funktionale Äquivalent einer schwachen Hash-Tabelle?


15
ähm ... das OP hat nach unbeantworteten Fragen gefragt, so dass dies als mögliche Antwort auf die Frage des OP angesehen werden kann.
Jason S

6
Okay, ich werde beißen. Was ist eine schwache Hash-Tabelle?
Jeffs

4
Es handelt sich um eine Hash-Tabelle, die es ermöglicht, dass ihre Elemente überflüssig gesammelt werden, wenn nur sie (und andere schwache Karten) Verweise darauf enthalten.
Havvy

3
@ JonHarrop: Es ist leicht zu beweisen, dass eine reine Version einer schwachen Referenz unmöglich ist, da schwache Referenzen die Semantik der Sprache nicht deterministisch machen und rein funktionale Sprachen deterministisch sind. Wenn Sie im Typ zusätzlich den Nichtdeterminismus markieren, funktioniert die übliche Implementierung. Sie benötigen abhängige Typen (um zu beweisen, dass eine Implementierung unabhängig vom Inhalt der Referenz dieselben Antworten liefert), wenn Sie den Effekt sicher maskieren möchten.
Neel Krishnaswami

5
@ NeelKrishnaswami, ich glaube nicht, dass das der Fall ist. Sie können schwache Datenstrukturen erstellen, die keinen Nichtdeterminismus erzeugen, z. B. eine schwache Tabelle, die keine Aufzählung (oder Zählung) unterstützt. Ein Beispiel finden Sie unter wiki.ecmascript.org/doku.php?id=harmony:weak_maps .
Sam Tobin-Hochstadt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.