Los árboles binarios son la forma más simple de árboles multidireccionales por lo que son más fáciles de estudiar en ese sentido.
vías múltiples árboles tienen nodos que consisten en N
llaves y N+1
punteros, a lo largo de las líneas de:
|
+-----+-----+-----+-----+
| k00 | k01 | k02 | k03 |
+-----+-----+-----+-----+
/ | | | \
p00 p01 p02 p03 p04
Para averiguar qué puntero a seguir en una búsqueda, se compara la clave que está buscando por contra las claves en el nodo. Ese ejemplo anterior es un árbol multidireccional de orden 2 (estoy definiendo el orden n
como tener claves 2n
y 2n+1
punteros).
Cuando "degenerado" a esta estructura tiene el nodo más pequeño posible, que terminan con una llave y dos punteros, el clásico árbol binario:
|
+-----+
| k00 |
+-----+
/ \
p00 p01
Cuando fui a la universidad (y voy a admitir libremente que fue hace un tiempo), estudiamos árboles binarios primero, simplemente porque los algoritmos eran elegantes. La búsqueda fue un nodo de comparación simple y selecciona uno de dos subárboles. La inserción y la eliminación también fueron relativamente fáciles.
A continuación, pasó a árboles binarios equilibrados, donde la búsqueda es exactamente el mismo, pero la inserción y deleción eran un poco más complicado, que implica 'rotación' de sub-árboles a través de la raíz sub-árbol donde sea necesario para mantenerla equilibrado.
Esto fue seguido por árboles multidireccionales no balanceados para obtener el concepto de búsqueda dentro de un nodo una vez que se ha encontrado el nodo correcto, finalmente árboles equilibrados de múltiples vías que eran básicamente los mismos que los árboles binarios pero con la misma complejidad añadida de una búsqueda secuencial, así como la inserción o eliminación dentro del nodo y la combinación y escupido de nodos.
En cada uno de esos pasos simplemente agregaste un poco más de complejidad a los algoritmos. No recuerdo que muchas personas tengan problemas con esa progresión, así que tal vez todos los libros de texto que mencionas están en el nivel inicial.
Nunca he encontrado realmente que los árboles de varias vías sean más útiles que los árboles binarios, excepto en una situación muy específica. Es cuando estás leyendo nodos del árbol desde un disco lento como el disco y has optimizado para tamaños de sector/clúster/bloque.
Desarrollamos una implementación de árbol multidireccional bajo OS/2 (que muestra mi edad aquí) que gritaba, asegurando que los nodos fueran idénticos en tamaño a los bloques de disco subyacentes. A pesar de que esto podría dar como resultado un espacio desperdiciado, las mejoras de velocidad valieron la pena.
Para las cosas en la memoria, los árboles binarios tienen todas las ventajas de varias vías sin ninguna complicación adicional (tener que combinar la búsqueda secuencial de un nodo con la selección de subárbol).
Los árboles binarios se reducen a "¿Deberíamos movernos hacia la izquierda o hacia la derecha?", Las formas múltiples son "¿Dónde está la clave en este nodo para que podamos elegir el subárbol?".
A B-Tree es una especie de árbol en forma de m. Supongo que querías decir árbol binario, ¿verdad? – Thomas
@Thomas: ouch, siempre pensé que "B-tree" era un atajo para "Binary-tree" ;; una vez más, aprendí algo respondiendo una pregunta en SO ;; Gracias ! –