Na verdade, eu já comparei a árvore da van Emde-Boas uma vez. Comparei com uma árvore AA, um mapa de hash e uma matriz de bits.
Os testes executam size
inserções com números aleatórios no intervalo [0, bound]
, depois size
pesquisam, size
excluem e depois size
pesquisam novamente . As exclusões também são feitas em números aleatórios, portanto, primeiro você precisa descobrir se elas estão na estrutura.
Aqui estão os resultados ( size
= 2000000, bound
= 10000000) em segundos:
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
Como você pode ver, as árvores van Emde-Boas são duas vezes mais lentas que os mapas de hash, dez vezes mais lentas que as matrizes de bits e 5 vezes mais rápidas que as árvores de pesquisa binária.
É claro que o que precede precisa de um aviso: os testes são artificiais, é possível melhorar o código ou usar um idioma diferente com um compilador cuja saída é mais rápida e assim por diante.
Essa isenção de responsabilidade está no centro do motivo pelo qual usamos a análise assintótica no design de algoritmos: como você não tem idéia do que são as constantes e como as constantes podem mudar dependendo dos fatores ambientais, o melhor que podemos fazer é uma análise assintótica.
registronregistroregistron232.registro232.= 32registro32 = 5