AVL Trees y el mundo REAL

14

en la escuela nos enseñan cómo podemos equilibrar un árbol AVL luego de una inserción o eliminación.

¿Cómo será realmente útil este tipo de conocimiento en el mundo real? ¿Alguien puede dar un ejemplo de cuándo este tipo de conocimiento sería realmente útil?

Por lo que he visto, en el lugar de trabajo tales detalles casi nunca surgen ...

Puedo ver cómo el conocimiento detallado sobre algoritmos y algunas estructuras de datos puede ser importante, pero no detalles como rotaciones de árbol AVL (y conceptos detallados similares).

¡Gracias!

rrazd
fuente
77
Es útil en las entrevistas, si eso cuenta como el mundo real.
Kevin
Este es el mismo argumento que algunas personas hacen sobre el aprendizaje de la trigonometría en la escuela "¡Sheesh! ¿Cuándo voy a usar eso en la vida real?", Y la respuesta es "pensé cómo analizar y resolver una clase completa de problemas" . Eso y algún día quieres cortar un árbol y tu pareja pregunta "¿Estás seguro de que eso no va a golpear la casa?" ¡Trig al rescate!
Binario Worrier

Respuestas:

13

El estudio de los árboles AVL puede ser útil por las siguientes razones:

  • Es una buena práctica para razonar sobre datos abstractos. No tiene que pensar en un árbol en particular, debe considerar todas las posibilidades. Practicar con este tipo de razonamiento también puede ayudar con casos más simples.

  • Es una buena práctica para comprender predicados y contratos. Asegurarse de que un árbol esté equilibrado y que las herramientas que utiliza para demostrar que cada operación conserve el equilibrio se puedan aplicar, por ejemplo, a problemas de seguridad y a código paralelo.

  • Le permite escribir sus propias variantes o incluso crear tipos de estructuras de datos completamente nuevos.

  • Es posible que deba implementar un árbol AVL para una nueva biblioteca o plataforma.

Puede debatir los méritos particulares de aprender cada tipo de algoritmo de clasificación o cada tipo de árbol equilibrado. Realmente no importa cuáles termines aprendiendo, pero debes asegurarte de obtener una cobertura completa de los temas más importantes.

Si desea ver cuán importante es conocer los algoritmos en el mundo real, lea " Cómo matar una gran idea ", un artículo en Inc sobre la caída de Friendster, y cómo la más mínima aplicación de principios fundamentales para mejorar la eficiencia podría haberles ayudado.

Macneil
fuente
Artículo interesante, pero no veo cómo los árboles AVL habrían ayudado a Friendster.
Eratóstenes
Me hubiera gustado ver un ejemplo, como B + -Trees se utilizan para la indexación de la base de datos.
Luca Fülbier
5

Además de los puntos de Macneils ...

Los árboles rojo-negros son quizás más útiles directamente porque existen operaciones útiles y eficientes que no son ampliamente compatibles con implementaciones de bibliotecas estándar como C ++ std::map(al menos AFAIK). Los árboles rojo-negros pueden soportar "dividir" (cortar un árbol en dos, uno que contenga claves menores que una clave especificada y otro que contenga claves mayores) y "unir" (al revés, combinar un árbol de claves grandes con un árbol de pequeñas teclas) se pueden hacer ambas en tiempo O (log n), pero si se admiten en bibliotecas de contenedores estándar, parece ser algo bien oculto.

Sin embargo, "aumentar" las estructuras de datos es común. Un ejemplo simple es agregar información del tamaño del subárbol a los nodos en casi cualquier estructura de datos de árbol para admitir la suscripción de O (log n). Ejemplos más sofisticados incluyen árboles de intervalos.

Una vez que tenga la idea de aumentar las estructuras de datos, hay muchas variaciones que pueden ser útiles para aplicaciones particulares, y muy pocas están disponibles preempaquetadas como una biblioteca. Las estructuras de datos de la biblioteca estándar existentes (p. Ej., Por ejemplo std::map) no se pueden aumentar antes de copiar el código fuente y modificarlo directamente; no puede aumentarlas utilizando parámetros de plantilla.

Por supuesto, para desarrollar una estructura de datos aumentada, debe comprender la estructura de datos no aumentada subyacente.

Los árboles AVL pueden ser más rápidos que los árboles rojo-negros si realiza muchas más búsquedas que inserciones / eliminaciones (y siempre que no necesite esas operaciones de división / unión), por lo que, según la aplicación, pueden ser una base muy buena para aumentando.

Steve314
fuente
1
+1 para aumentar la estructura de datos, aunque es bastante raro. La mayoría de los programadores no tienen que luchar por el rendimiento (de lo contrario, todos estaríamos usando C ++ / C / Fortran / Assembly).
Matthieu M.
@ Mathieu - Creo que es común, pero solo en ciertos tipos de entornos de desarrollo. Eso no es una contradicción, honesto, porque ... errm, bueno ...
Steve314 03 de
¡Yo estoy totalmente de acuerdo! : D
Matthieu M.
5

No

Realmente no es útil en el mundo real ...

Excepto para hacerte pensar .

El mundo real tiene problemas mucho más difíciles , muchos de los cuales aún no tienen soluciones bien conocidas.

Steven A. Lowe
fuente