793 Stimmen

Was sind die weniger bekannten, aber nützlichen Datenstrukturen?

Es gibt einige Datenstrukturen, die wirklich nützlich sind, aber den meisten Programmierern unbekannt sind. Welche sind das?

Jeder kennt verknüpfte Listen, binäre Bäume und Hashes, aber was ist mit Listen überspringen y Bloom-Filter zum Beispiel. Ich würde gerne mehr Datenstrukturen kennenlernen, die nicht so häufig vorkommen, aber wissenswert sind, weil sie auf großartigen Ideen beruhen und den Werkzeugkasten eines Programmierers bereichern.

PS: Ich interessiere mich auch für Techniken wie Tanzende Links die sich die Eigenschaften einer gemeinsamen Datenstruktur zunutze machen.

EDIT : Bitte versuchen Sie Links einbeziehen zu Seiten, die die Datenstrukturen genauer beschreiben. Versuchen Sie auch, ein paar Worte zu folgenden Themen hinzuzufügen warum eine Datenstruktur ist cool (als Jonas Kölker bereits hervorgehoben). Versuchen Sie außerdem, Folgendes bereitzustellen eine Datenstruktur pro Antwort . Dadurch können sich die besseren Datenstrukturen allein aufgrund ihrer Stimmen an die Spitze setzen.

32voto

Jonas Kölker Punkte 7382

<zvrba> Van-Emde-Boas-Bäume

Ich denke, es wäre nützlich zu wissen warum sie sind cool. Im Allgemeinen ist die Frage nach dem "Warum" die wichtigste Frage ;)

Meine Antwort ist, dass man damit O(log log n)-Wörterbücher mit {1..n} Schlüsseln erhält, unabhängig davon, wie viele der Schlüssel gerade verwendet werden. Genauso wie man durch wiederholtes Halbieren O(log n) erhält, erhält man durch wiederholtes Quadrieren O(log log n), was auch im vEB-Baum geschieht.

0 Stimmen

Vom theoretischen Standpunkt aus sind sie schön. In der Praxis ist es jedoch ziemlich schwierig, eine wettbewerbsfähige Leistung aus ihnen herauszuholen. In dem Papier, das ich kenne, haben sie bis zu 32-Bit-Schlüsseln gut funktioniert ( citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.2.7403 ), aber der Ansatz lässt sich nicht auf mehr als 34-35 Bit oder so skalieren, und es gibt keine Implementierung dafür.

0 Stimmen

Ein weiterer Grund, warum sie cool sind, ist, dass sie ein wichtiger Baustein für eine Reihe von cache-oblivious Algorithmen sind.

31voto

starblue Punkte 53167

Wie wäre es mit Bäume spreizen ?

Außerdem ist Chris Okasakis rein funktionale Datenstrukturen kommen mir in den Sinn.

29voto

A. Levy Punkte 26674

Eine interessante Variante der Hashtabelle ist die Cuckoo Hashing . Es verwendet mehrere Hash-Funktionen anstelle von nur einer, um Hash-Kollisionen zu vermeiden. Kollisionen werden aufgelöst, indem das alte Objekt von dem durch die primäre Hashfunktion angegebenen Ort entfernt und an einen durch eine alternative Hashfunktion angegebenen Ort verschoben wird. Cuckoo Hashing ermöglicht eine effizientere Nutzung des Speicherplatzes, da der Auslastungsfaktor mit nur 3 Hash-Funktionen auf bis zu 91 % erhöht werden kann und trotzdem eine gute Zugriffszeit gewährleistet ist.

5 Stimmen

Das Hopscotch-Hashing ist angeblich schneller.

27voto

moinudin Punkte 125641

A Min-Max-Haufen ist eine Variante einer Haufen die eine doppelendige Prioritätswarteschlange implementiert. Erreicht wird dies durch eine einfache Änderung der Heap-Eigenschaft: Ein Baum gilt als min-max geordnet, wenn jedes Element auf geraden (ungeraden) Ebenen kleiner (größer) ist als alle Unter- und Großkinder. Die Ebenen sind von 1 an nummeriert.

http://internet512.chonbuk.ac.kr/datastructure/heap/img/heap8.jpg

0 Stimmen

Schwierig zu implementieren. Auch die besten Programmierer kann es falsch sein.

26voto

btilly Punkte 37295

Ich mag Cache Oblivious Datastructures . Die Grundidee besteht darin, einen Baum in rekursiv kleineren Blöcken anzulegen, so dass Caches vieler verschiedener Größen die Vorteile von Blöcken nutzen können, die in sie passen. Dies führt zu einer effizienten Nutzung der Zwischenspeicherung auf allen Ebenen, vom L1-Cache im Arbeitsspeicher bis hin zu großen Datenpaketen, die von der Festplatte gelesen werden, ohne dass die Größe einer dieser Zwischenspeicherschichten bekannt sein muss.

0 Stimmen

Interessante Transkription aus diesem Link: "Der Schlüssel ist das van Emde Boas-Layout, benannt nach der van Emde Boas-Baumstruktur, die 1977 von Peter van Emde Boas entwickelt wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X