2010-10-14 18 views
5

Estaba leyendo el árbol de búsqueda binaria y estaba pensando que ¿por qué necesitamos BST en absoluto? Todas las cosas, hasta donde yo sé, también se pueden lograr usando arreglos ordenados simples. Por ej. - Para construir un BST que tenga n elementos, se requiere n*O(log n), es decir, O(nlog n) y el tiempo de búsqueda es O(log n). Pero esto también se puede lograr usando una matriz. Podemos tener una matriz ordenada (requiere O(nlog n) vez), y el tiempo de búsqueda también es O(log n), es decir, algo de búsqueda binaria. Entonces, ¿por qué necesitamos otra estructura de datos? ¿Hay algún otro uso/aplicación de BST que los haga tan especiales?¿Por qué los árboles de búsqueda binaria?

--Ravi

+2

¿Cuál es la eficacia de inserción/eliminación de la versión de matriz? Si se trata de cambiar todos los demás elementos de la matriz, puede ser costoso. –

+1

ok ...encontrar la posición correcta del elemento nuevo/existente seguiría siendo O (log n), pero sí el cambio será un problema ... pero solo este ... según los textos que he leído, parece que ellos (BST)) son muy especiales? Quiero saber más sobre cosas que los hacen tan especiales. –

+0

posible duplicado de [búsqueda binaria vs árbol de búsqueda binario] (http://stackoverflow.com/questions/5968937/binary-search-vs-binary-search-tree) – nawfal

Respuesta

8

Las matrices son geniales si se trata de escribir una sola vez, leer muchas veces el tipo de interacciones. Es cuando se llega a insertar, intercambiar y eliminar, en el que BST realmente comienza a brillar en comparación con una matriz. Dado que se basan en nodos, en lugar de basarse en un fragmento contiguo de memoria, el costo de mover un elemento a la colección o fuera de la colección es rápido, manteniendo la naturaleza ordenada de la colección.

Piense en ello como lo haría con la diferencia entre las listas vinculadas y las matrices. Esta es una simplificación excesiva, pero resalta un aspecto de la ventaja que he señalado anteriormente.

4

¿Qué hay de tiempo de inserción ordenada?

+0

ok ... encontrar la posición correcta del nuevo elemento todavía sería O (log n), pero sí cambiar será un problema ... pero solo este ... según los textos que he leído, parece que ellos (BST) son muy especiales? Quiero saber más sobre cosas que los hacen tan especiales. –

+1

Creo que las otras respuestas pueden ser útiles. Otra cosa para recordar es que los BST no son la estructura de datos definitiva, sino que forman los cimientos básicos para estructuras más complicadas y eficientes, lo que explica su popularidad. Por ejemplo, puede tener en cuenta que buscar un BST es lineal en el peor de los casos; la respuesta a ese problema son los árboles AVL. También tiene árboles rojo-negro, 2-3-4-árboles, árboles de sufijo/prefijo y DAWG, etc., que generalizan las BST de una manera diferente y producen algoritmos eficientes que estarían fuera de nuestro alcance con las matrices. –

1

En la programación de gráficos si tiene objetos extendidos (es decir, que representan un intervalo en cada dimensión y no solo un punto) puede agregarlos al nivel más pequeño de un árbol binario (normalmente un octárbol) donde encajen por completo.

Y si no calcula previamente el árbol/la lista ordenada, el tiempo de inserción aleatorio O (n) en una lista puede ser prohibitivo. Por otro lado, el tiempo de inserción en un árbol es solo O (log (n)).

7

Imagine que tiene una matriz con un millón de elementos.

desea insertar un elemento en la posición 5.

Así se inserta al final de la matriz y luego especie.

Digamos que la matriz está llena; eso es O (nlog n), que es 1,000,000 * 6 = 6,000,000 operaciones.

Imagine que tiene un árbol equilibrado.

Eso es O (log n), más un bit para equilibrar = 6 + un poco, llámelo 10 operaciones.

Así que, acaba de gastar 6,000,000 ops en ordenar su matriz. Luego desea encontrar ese elemento. ¿Qué haces? búsqueda binaria - O (log n) - que es exactamente ¡lo mismo que lo que vas a hacer cuando buscas en el árbol!

Ahora imagine que desea asignar otro elemento.

¡Su matriz está llena! ¿qué haces? reasignar la matriz con n elementos adicionales y memcpy el lote? ¿De verdad quieres memcpy 4mbytes?

En un árbol, solo agrega otro elemento ...

Cuestiones relacionadas