Dynamische Bäume spielen eine wichtige Rolle bei der Lösung von Problemen wie Netzwerkflüssen, dynamischen Graphen, kombinatorischen Problemen ("Dynamic Trees in Practice" von Tarjan und Werneck) und kürzlich zusammengeführten Wörterbüchern ("A Simple Mergeable Dictionary" von Adam Karczmarz).
Unter dynamischen Bäumen verweise ich auf die Definition in Sleator & Tarjans Aufsatz "Eine Datenstruktur für dynamische Bäume" aus dem Jahr 1983. Seitdem wurden im Forschungsbereich der funktionalen Programmierung nur wenige Anstrengungen unternommen.
- Edward Kmett hat eine Version der ST-Bäume hauptsächlich als Übersetzung des C ++ - Gegenstücks implementiert (siehe Link-cut trees) .
- Chris Okasaki hat eine eingeschränkte Implementierung der Splay-Bäume in seinem bekannten Buch "Rein funktionale Datenstrukturen" geschrieben.
- Ralf Hinze und Ross Paterson führten eine funktionale Datenstruktur mit der Bezeichnung 2-3 Finger-Bäume ein, die jedoch ein etwas anderes Ziel verfolgt als die ursprüngliche Definition dynamischer Bäume.
Die Implementierung (und möglicherweise die Leistung) dynamischer Bäume wird in drei Ansätze unterteilt:
- Linearisierung, bei der ET-Bäume (Euler-Tour) eine große Rolle spielen. Keine rein funktionale Studie gefunden.
- Die Pfadzerlegung, bei der ST-Bäume das Flaggschiff sind, hat gerade die Kmett-Version gefunden.
- Baumkontraktion, bei der Top-Bäume, Topologie-Bäume und RC-Bäume die Spieler sind. Keine rein funktionale Studie gefunden.
Eine rein funktionale Analyse und Implementierung findet sich in Splay, AVL, Rot-Schwarz-Baum, aber das sind KEINE dynamischen Bäume. Die ersteren werden als die Schatten- (auch virtuelle oder Hilfs-) Datenstruktur der letzteren betrachtet.
Meine Frage lautet also:
Was sind die Gründe (Nachteile, Schwächen) für die Forschungsgemeinschaft der funktionalen Programmierung, nicht an der dynamischen Baumdatenstruktur teilzunehmen?