Todos sabemos que hay un montón de árboles de búsqueda binaria de autoequilibrado (BST), siendo el más famoso el Rojo-Negro y el AVL. También podría ser útil echar un vistazo a árboles AA y árboles de chivo expiatorio.Árbol de búsqueda binaria para la intención específica
Quiero hacer inserciones, inserciones y búsquedas, como cualquier otra BST. Sin embargo, será común eliminar todos los valores en un rango determinado o eliminar subárboles enteros. Entonces:
- Quiero insertar, buscar, eliminar valores en O (log n) (árbol balanceado).
- me gustaría borrar un sub-árbol, manteniendo todo el árbol equilibrado, en O (log n) (en el peor de los casos o amortizado)
- Podría ser útil para eliminar varios valores de una fila, antes de equilibrar el árbol
- voy a lo más a menudo inserto 2 valores a la vez, sin embargo, esto no es una regla (sólo un consejo en caso de que haya una estructura de datos de árbol que tiene esto en cuenta)
¿existe una variante de la AVL o RB eso me ayuda en esto? Los árboles de chivo expiatorio se parecen más a esto, pero también necesitarían algunos cambios, cualquiera que tenga experiencia en ellos puede compartir algunos aspectos.
Más precisamente, ¿qué procedimiento de balanceo y/o procedimiento de eliminación me ayudaría a mantener estas acciones de tiempo eficiente?
Fuera de tema: me interesan estos tipos de algoritmos, pero no sé por dónde empezar a aprender sobre ellos. ¿Algún buen recurso para principiantes al que me puedas dirigir? Algo con ejemplos visuales sería genial. –
colinodell, estoy bastante seguro de que si publica su propia pregunta, obtendrá muchas respuestas útiles. –
¿Por qué quieres la capacidad de eliminar un subárbol? El contenido de cualquier subárbol particular podría cambiar drásticamente en un árbol de autoequilibrado. – ephemient