Crear un árbol binario de búsqueda equilibrado de una corriente de números enteros

votos
10

Acabo de terminar una entrevista de trabajo y yo estaba luchando con esta cuestión, que me parece como una pregunta muy difícil de dar en una entrevista de 15 minutos.

La pregunta era: Escribir una función, lo que da una corriente de números enteros (sin ordenar), construye un árbol de búsqueda equilibrado. Ahora, no se puede esperar a que la entrada a extremo (que es una corriente), por lo que necesita para equilibrar el árbol sobre la marcha.

Mi primera respuesta fue utilizar un árbol Rojo-Negro, que por supuesto hace el trabajo, pero tengo que asumir que no esperaban que yo implementar un árbol rojo-negro en 15 minutos.

Así que, ¿hay alguna solución sencilla para este problema que no soy consciente de?

Gracias,

David

Publicado el 29/08/2011 a las 22:25
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
3

Los árboles de AA son un poco más simple que los árboles rojo-Negro, pero no pude poner en práctica uno de la parte superior de la cabeza.

Respondida el 29/08/2011 a las 22:28
fuente por usuario

votos
9

Personalmente, creo que la mejor manera de hacer esto sería ir a un árbol de búsqueda binario aleatorio como un Treap . Esto no garantiza absolutamente que el árbol será equilibrado, pero con alta probabilidad de que el árbol tendrá un buen factor de equilibrio. Un Treap funciona mediante el aumento de cada elemento del árbol con un número uniformemente aleatorio, a continuación, asegurar que el árbol es un árbol binario de búsqueda con respecto a las claves y un montón con respecto a los valores aleatorios uniformes. La inserción en un Treap es muy fácil:

  1. Elegir un número aleatorio para asignar al elemento recién añadido.
  2. Insertar el elemento en el BST usando inserción BST estándar.
  3. Mientras que la clave del elemento recién insertado es mayor que la clave de su matriz, realice una rotación del árbol de traer el nuevo elemento por encima de su padre.

Ese último paso es el único realmente duro, pero si tuviera algo de tiempo para trabajar hacia fuera en una pizarra Estoy bastante seguro de que se puede aplicar esto en la marcha en una entrevista.

Otra opción que podría funcionar sería el uso de un árbol biselado . Es otro tipo de BST rápido que se pueden implementar suponiendo que tiene una función de inserción estándar BST y la capacidad de hacer rotación de árboles. Es importante destacar que, árbol biselado son extremadamente rápido en la práctica, y se sabe que son (dentro de un factor constante) al menos tan bueno como cualquier otro árbol de búsqueda binaria estática.

Dependiendo de lo que se entiende por "árbol de búsqueda," también se podría considerar el almacenamiento de los números enteros en una estructura optimizada para la búsqueda de los números enteros. Por ejemplo, se puede utilizar un trie bit a bit para almacenar los números enteros, que apoya las operaciones de búsqueda en un tiempo proporcional al número de bits por palabra máquina. Esto se puede implementar bastante bien utilizando una función recursiva para mirar por encima de los bits, y no requiere de ningún tipo de rotaciones. Si usted necesita para arruinar a cabo una implementación en un cuarto de hora, y si el entrevistador le permite desviarse de los árboles binarios de búsqueda estándar, entonces esto podría ser una gran solución.

¡Espero que esto ayude!

Respondida el 29/08/2011 a las 22:33
fuente por usuario

votos
1

Uno de árbol binario de búsqueda equilibrado sencillo es BB (α) -tree. Usted escoge el α constante, lo que dice la cantidad desequilibrada puede conseguir el árbol. En todo momento, #descendants(child) <= (1-α) × #descendants(node)debe ser titular. Lo tratan como árbol binario de búsqueda normal, pero cuando la fórmula no se aplica a algún nodo más, que acaba de reconstruir esa parte del árbol a partir de cero, por lo que es perfectamente equilibrado.

La complejidad de tiempo amortizado para la inserción o deleción es todavía O (log N), al igual que con otros árboles binarios equilibrados.

Respondida el 29/08/2011 a las 22:49
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more