На самом деле я сам когда-то тестировал дерево Ван Эмде-Боаса. Я сравнил его с АА-деревом, хэш-картой и битовым массивом.
Тесты выполняют size
вставки со случайными числами в интервале [0, bound]
, затем выполняют size
поиск, затем size
удаляют и затем снова выполняют size
поиск. Удаление также выполняется по случайным числам, поэтому сначала нужно выяснить, находятся ли они в структуре вообще.
Вот результаты ( size
= 2000000, bound
= 10000000) в секундах:
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
Как видите, деревья Ван-Эмде-Боаса примерно в два раза медленнее хеш-карт, в десять раз медленнее битовых массивов и в 5 раз быстрее бинарных поисковых деревьев.
Конечно, для вышеизложенного необходим отказ от ответственности: тесты являются искусственными, вы можете улучшить код или использовать другой язык с компилятором, чей вывод будет быстрее, и так далее, и так далее.
Этот отказ от ответственности лежит в основе причины, по которой мы используем асимптотический анализ при разработке алгоритмов: поскольку вы понятия не имеете, что такое константы и как константы могут изменяться в зависимости от факторов среды, лучшее, что мы можем сделать, - это асимптотический анализ.
журналNжурналжурналN232журнал232= 32журнал32 = 5