Ich habe den van Emde-Boas-Baum tatsächlich einmal selbst gemessen. Ich habe es mit einem AA-Baum, einer Hashmap und einem Bit-Array verglichen.
Die Tests führen size
Einfügungen mit Zufallszahlen im Intervall durch [0, bound]
, size
suchen dann, size
löschen und size
suchen dann erneut . Löschvorgänge werden auch für Zufallszahlen ausgeführt, sodass Sie zuerst herausfinden müssen, ob sie überhaupt in der Struktur enthalten sind.
Hier sind die Ergebnisse ( size
= 2000000, bound
= 10000000) in Sekunden:
AATreeLookup - O(n log n)
Inserting... 3.3652452
Searching... 5.2280724
Deleting... 7.3457427
Searching... 9.1462039
HashLookup - O(n) expected
Inserting... 0.3369505
Searching... 0.6223035
Deleting... 0.9062163
Searching... 1.1718223
VanEmdeBoasTree - O(n log log n)
Inserting... 0.7007531
Searching... 1.1775800
Deleting... 1.7257065
Searching... 2.2147703
ArrayLookup - O(n)
Inserting... 0.0681897
Searching... 0.1720300
Deleting... 0.2387776
Searching... 0.3413800
Wie Sie sehen können, sind van Emde-Boas-Bäume etwa doppelt so langsam wie Hash-Maps, zehnmal so langsam wie Bit-Arrays und fünfmal so schnell wie binäre Suchbäume.
Für die oben genannten Punkte ist natürlich ein Haftungsausschluss erforderlich: Die Tests sind künstlich, Sie können möglicherweise den Code verbessern oder eine andere Sprache mit einem Compiler verwenden, dessen Ausgabe schneller ist, und so weiter und so fort.
Dieser Haftungsausschluss ist der Grund für die Verwendung der asymptotischen Analyse beim Entwurf von Algorithmen: Da Sie keine Ahnung haben, wie die Konstanten lauten, und sich die Konstanten in Abhängigkeit von Umgebungsfaktoren ändern können, können wir am besten eine asymptotische Analyse durchführen.
LognLogLogn232Log232= 32Log32 = 5