De hecho, he comparado el árbol de van Emde-Boas una vez. Lo comparé con un árbol AA, un hashmap y una matriz de bits.
Las pruebas realizan size
inserciones con números aleatorios en el intervalo [0, bound]
, luego size
buscan, luego size
eliminan y luego vuelven a size
buscar. Las eliminaciones también se realizan en números aleatorios, por lo que primero debe averiguar si están en la estructura.
Aquí están los resultados ( size
= 2000000, bound
= 10000000) en 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 puede ver, los árboles de van Emde-Boas son aproximadamente dos veces más lentos que los mapas hash, diez veces más lentos que las matrices de bits y 5 veces más rápidos que los árboles de búsqueda binarios.
Por supuesto, lo anterior necesita un descargo de responsabilidad: las pruebas son artificiales, posiblemente puede mejorar el código o usar un lenguaje diferente con un compilador cuya salida es más rápida, y así sucesivamente.
Este descargo de responsabilidad es la razón principal por la que usamos el análisis asintótico en el diseño de algoritmos: como no tiene idea de cuáles son las constantes y las constantes pueden cambiar según los factores ambientales, lo mejor que podemos hacer es un análisis asintótico.
Ahora, en el caso de versus : en el ejemplo anterior, mi árbol van Emde-Boas puede contener elementos. y , que es una mejora del factor 6, que es bastante en la práctica. Además, los árboles van Emde-Boas tienen buenos factores constantes (se trata de factores constantes en la práctica para diferencias tan pequeñas) ya que no necesitan equilibrarse.log log nlognloglogn log 2 32 = 32 log 32 = 5232log232=32log32=5