fbpx
Wikipedia

Árbol biselado

Un Árbol biselado o Árbol Splay es un Árbol binario de búsqueda auto-balanceable, con la propiedad adicional de que a los elementos accedidos recientemente se accederá más rápidamente en accesos posteriores. Realiza operaciones básicas como pueden ser la inserción, la búsqueda y el borrado en un tiempo del orden de O(log n). Para muchas secuencias no uniformes de operaciones, el árbol biselado se comporta mejor que otros árboles de búsqueda, incluso cuando el patrón específico de la secuencia es desconocido. Esta estructura de datos fue inventada por Robert Tarjan y Daniel Sleator.

Las rotaciones internas en árboles binarios son operaciones internas comunes muy utilizadas en árboles autobalanceables.

Todas las operaciones normales de un árbol binario de búsqueda son combinadas con una operación básica, llamada biselación. Esta operación consiste en reorganizar el árbol para un cierto elemento, colocando éste en la raíz. Una manera de hacerlo es realizando primero una búsqueda binaria en el árbol para encontrar el elemento en cuestión y, a continuación, usar rotaciones de árboles de una manera específica para traer el elemento a la cima. Alternativamente, un algoritmo "de arriba abajo" puede combinar la búsqueda y la reorganización del árbol en una sola fase.

Ventajas e inconvenientes Editar

El buen rendimiento de un árbol biselado depende del hecho de que es auto-balanceado, y además se optimiza automáticamente. Los nodos accedidos con más frecuencia se moverán cerca de la raíz donde podrán ser accedidos más rápidamente. Esto es una ventaja para casi todas las aplicaciones, y es particularmente útil para implementar cachés y algoritmos de recolección de basura; sin embargo, es importante apuntar que para un acceso uniforme, el rendimiento de un árbol biselado será considerablemente peor que un árbol de búsqueda binaria balanceado simple.

Los árboles biselados también tienen la ventaja de ser consideradamente más simples de implementar que otros árboles binarios de búsqueda auto-balanceados, como pueden ser los árboles Rojo-Negro o los árboles AVL, mientras que su rendimiento en el caso promedio es igual de eficiente. Además, los árboles biselados no necesitan almacenar ninguna otra información adicional aparte de los propios datos, minimizando de este modo los requerimientos de memoria. Sin embargo, estas estructuras de datos adicionales proporcionan garantías para el peor caso, y pueden ser más eficientes en la práctica para el acceso uniforme.

Uno de los peores casos para el algoritmo básico del árbol biselado es el acceso secuencial a todos los elementos del árbol de forma ordenada. Esto deja el árbol completamente des balanceado (son necesarios n accesos, cada uno de los cuales del orden de O(log n) operaciones). Volviendo a acceder al primer elemento se dispara una operación que toma del orden de O(n) operaciones para volver a balancear el árbol antes de devolver este primer elemento. Esto es un retraso significativo para esa operación final, aunque el rendimiento se amortiza si tenemos en cuenta la secuencia completa, que es del orden de O(log n). Sin embargo, investigaciones recientes muestran que si aleatoriamente volvemos a balancear el árbol podemos evitar este efecto de desbalance y dar un rendimiento similar a otros algoritmos de auto-balanceo.

Al contrario que otros tipos de árboles auto balanceados, los árboles biselados trabajan bien con nodos que contienen claves idénticas. Incluso con claves idénticas, el rendimiento permanece amortizado del orden de O(log n). Todas las operaciones del árbol preservan el orden de los nodos idénticos dentro del árbol, lo cual es una propiedad similar a la estabilidad de los algoritmos de ordenación. Un operación de búsqueda cuidadosamente diseñada puede devolver el nodo más a la izquierda o más a la derecha de una clave dada.

Operaciones Editar

Búsqueda Editar

La búsqueda de un valor de clave en un árbol biselado tiene la característica particular de que modifica la estructura del árbol. El descenso se efectúa de la misma manera que un árbol binario de búsqueda, pero si se encuentra un nodo cuyo valor de clave coincide con el buscado, se realiza una biselación de ese nodo. Si no se encuentra, el nodo biselado será aquel que visitamos por último antes de descartar la búsqueda. Así, la raíz contendrá un sucesor o predecesor del nodo buscado.

Inserción Editar

Es igual que en el árbol binario de búsqueda con la salvedad de que se realiza una biselación sobre el nodo insertado. Además, si el valor de clave a insertar ya existe en el árbol, se bisela el nodo que lo contiene.

Extracción Editar

Esta operación requiere dos biselaciones. Primero se busca el nodo que contiene el valor de clave que se debe extraer. Si no se encuentra, el árbol es biselado en el último nodo examinado y no se realiza ninguna acción adicional. Si se encuentra, el nodo se bisela y se elimina. Con esto el árbol se queda separado en dos mitades, por lo que hay que seleccionar un nodo que haga las veces de raíz. Al ser un árbol binario de búsqueda y estar todos los valores de clave ordenados, podemos elegir como raíz el mayor valor del subárbol izquierdo o el menor valor de clave del derecho.

Operación de Biselación Editar

Esta operación traslada un nodo x, que es el nodo al que se accede, a la raíz . Para realizar esta operación debemos rotar el árbol de forma que en cada rotación el nodo x está más cerca de la raíz. Cada biselación realizada sobre el nodo de interés mantiene el árbol parcialmente equilibrado y además los nodos recientemente accedidos se encuentran en las inmediaciones de la raíz. De esta forma amortizamos el tiempo empleado para realizar la biselación.

Podríamos distinguir 3 casos generales:

  • Caso 1: x es hijo izquierdo o derecho de la raíz, p.
  • Caso 2: x es hijo izquierdo de p y este a su vez hijo izquierdo de q o bien ambos son hijos derechos.
  • Caso 3: x es hijo izquierdo de p y este a su vez hijo derecho de q o viceversa.
CASO 1:

Si x es hijo izquierdo de p entonces realizaremos una rotación simple derecha. En caso de que x sea el derecho la rotación que deberemos realizar es simple izquierda.

 
 
CASO 2:

Si x es hijo y nieto izquierdo de p y q, respectivamente. Entonces debemos realizar rotación doble a la derecha, en caso de que x sea hijo y nieto derecho de p y q la rotación será doble izquierda.

 
 
CASO 3:

En caso de que x sea hijo izquierdo de p y nieto derecho de q realizaremos una rotación simple derecha en el borde entre x y p y otra simple izquierda entre x y q. En caso contrario, x sea hijo derecho y nieto izquierdo de q, la rotaciones simples será izquierda y después derecha.

 
 

Teoremas de rendimiento Editar

Hay muchos teoremas y conjeturas con respecto al peor caso en tiempo de ejecución para realizar una secuencia S de m accesos en un árbol biselado con n elementos.

Teorema del balance Editar

El coste de realizar la secuencia de accesos S es del orden de  . En otras palabras, los árboles biselados se comportan tan bien como los árboles de búsqueda binaria con balanceo estático en secuencias de al menos n accesos.

Teorema de optimalidad estática Editar

Sea   el número de veces que se accede al elemento i en S. El coste de realizar la secuencia de accesos S es del orden de  . En otras palabras, los árboles biselados se comportan tan bien como los árboles binarios de búsqueda estáticos óptimos en las secuencias de al menos n accesos.

Teorema "Static Finger" Editar

Sea   el elemento visitado en el j-ésimo acceso de S, y sea f un elemento fijo ("finger"). El coste de realizar la secuencia de accesos S es del orden de  

Teorema "Working Set" Editar

Sea   el número de elementos distintos accedidos desde la última vez que se accedió a j antes del instante i. El coste de realizar la secuencia de accesos S es del orden de  .

Teorema "Dynamic Finger" Editar

El coste de realizar la secuencia de accesos S es del orden de  .

Teorema "Scanning" Editar

También conocido como Teorema de Acceso Secuencial. El acceso a los n elementos de un árbol biselado en orden simétrico es de orden exacto  , independientemente de la estructura inicial del árbol. El límite superior más ajustado demostrado hasta ahora es  

Conjetura de optimalidad dinámica Editar

Además de las garantías probadas del rendimiento de los árboles biselados, en el documento original de Sleator y Tarjan hay una conjetura no probada de gran interés. Esta conjetura se conoce como la conjetura de optimalidad dinámica, y básicamente sostiene que los árboles biselados se comportan tan bien como cualquier otro algoritmo de búsqueda en árboles binarios hasta un factor constante.

Conjetura de optimalidad dinámica: Sea A cualquier algoritmo de búsqueda binaria en árboles que accede a un elemento x atravesando el camino desde la raíz hasta x, a un coste de d(x) + 1, y que entre los accesos puede hacer cualquier rotación en el árbol a un coste de 1 por rotación. Sea A(S) el coste para que A realice la secuencia S de accesos. Entonces el coste de realizar los mismos accesos para un árbol biselado es del orden O(n + A (S)).

Existen varios corolarios de la conjetura de optimalidad dinámica que permanecen sin probar:

Conjetura Transversal: Sean   y   dos árboles biselados que contienen los mismos elementos. Sea S la secuencia obtenida tras visitar los elementos de   en preorden. El coste total para realizar la secuencia S de accesos en   es del orden de O(n).
Conjetura Deque: Sea S una secuencia de m operaciones de cola doblemente terminada (push, pop, inject, eject). Entonces el coste para la realización de esta secuencia de operaciones S en un árbol biselado es del orden de  .
Conjetura Split: Sea S cualquier permutación de los elementos del árbol biselado. Entonces el coste de la eliminación de los elementos en el orden S es del orden de O(n).

Véase también Editar

Enlaces externos Editar

Algoritmo Editar

  • "Self-adjusting Binary Search Trees", Sleator and Tarjan (la publicación original en INGLÉS)

Implementaciones Editar

  • Implementaciones en C y Java por Sleator (uno de los inventores originales)
  • Fichero de cabecera (.h) de implementación sencilla para FreeBSD
  •   Datos: Q80729

Árbol, biselado, Árbol, splay, Árbol, binario, búsqueda, auto, balanceable, propiedad, adicional, elementos, accedidos, recientemente, accederá, más, rápidamente, accesos, posteriores, realiza, operaciones, básicas, como, pueden, inserción, búsqueda, borrado, . Un Arbol biselado o Arbol Splay es un Arbol binario de busqueda auto balanceable con la propiedad adicional de que a los elementos accedidos recientemente se accedera mas rapidamente en accesos posteriores Realiza operaciones basicas como pueden ser la insercion la busqueda y el borrado en un tiempo del orden de O log n Para muchas secuencias no uniformes de operaciones el arbol biselado se comporta mejor que otros arboles de busqueda incluso cuando el patron especifico de la secuencia es desconocido Esta estructura de datos fue inventada por Robert Tarjan y Daniel Sleator Las rotaciones internas en arboles binarios son operaciones internas comunes muy utilizadas en arboles autobalanceables Todas las operaciones normales de un arbol binario de busqueda son combinadas con una operacion basica llamada biselacion Esta operacion consiste en reorganizar el arbol para un cierto elemento colocando este en la raiz Una manera de hacerlo es realizando primero una busqueda binaria en el arbol para encontrar el elemento en cuestion y a continuacion usar rotaciones de arboles de una manera especifica para traer el elemento a la cima Alternativamente un algoritmo de arriba abajo puede combinar la busqueda y la reorganizacion del arbol en una sola fase Indice 1 Ventajas e inconvenientes 2 Operaciones 2 1 Busqueda 2 2 Insercion 2 3 Extraccion 3 Operacion de Biselacion 4 Teoremas de rendimiento 4 1 Teorema del balance 4 2 Teorema de optimalidad estatica 4 3 Teorema Static Finger 4 4 Teorema Working Set 4 5 Teorema Dynamic Finger 4 6 Teorema Scanning 5 Conjetura de optimalidad dinamica 6 Vease tambien 7 Enlaces externos 7 1 Algoritmo 7 2 ImplementacionesVentajas e inconvenientes EditarEl buen rendimiento de un arbol biselado depende del hecho de que es auto balanceado y ademas se optimiza automaticamente Los nodos accedidos con mas frecuencia se moveran cerca de la raiz donde podran ser accedidos mas rapidamente Esto es una ventaja para casi todas las aplicaciones y es particularmente util para implementar caches y algoritmos de recoleccion de basura sin embargo es importante apuntar que para un acceso uniforme el rendimiento de un arbol biselado sera considerablemente peor que un arbol de busqueda binaria balanceado simple Los arboles biselados tambien tienen la ventaja de ser consideradamente mas simples de implementar que otros arboles binarios de busqueda auto balanceados como pueden ser los arboles Rojo Negro o los arboles AVL mientras que su rendimiento en el caso promedio es igual de eficiente Ademas los arboles biselados no necesitan almacenar ninguna otra informacion adicional aparte de los propios datos minimizando de este modo los requerimientos de memoria Sin embargo estas estructuras de datos adicionales proporcionan garantias para el peor caso y pueden ser mas eficientes en la practica para el acceso uniforme Uno de los peores casos para el algoritmo basico del arbol biselado es el acceso secuencial a todos los elementos del arbol de forma ordenada Esto deja el arbol completamente des balanceado son necesarios n accesos cada uno de los cuales del orden de O log n operaciones Volviendo a acceder al primer elemento se dispara una operacion que toma del orden de O n operaciones para volver a balancear el arbol antes de devolver este primer elemento Esto es un retraso significativo para esa operacion final aunque el rendimiento se amortiza si tenemos en cuenta la secuencia completa que es del orden de O log n Sin embargo investigaciones recientes muestran que si aleatoriamente volvemos a balancear el arbol podemos evitar este efecto de desbalance y dar un rendimiento similar a otros algoritmos de auto balanceo Al contrario que otros tipos de arboles auto balanceados los arboles biselados trabajan bien con nodos que contienen claves identicas Incluso con claves identicas el rendimiento permanece amortizado del orden de O log n Todas las operaciones del arbol preservan el orden de los nodos identicos dentro del arbol lo cual es una propiedad similar a la estabilidad de los algoritmos de ordenacion Un operacion de busqueda cuidadosamente disenada puede devolver el nodo mas a la izquierda o mas a la derecha de una clave dada Operaciones EditarBusqueda Editar La busqueda de un valor de clave en un arbol biselado tiene la caracteristica particular de que modifica la estructura del arbol El descenso se efectua de la misma manera que un arbol binario de busqueda pero si se encuentra un nodo cuyo valor de clave coincide con el buscado se realiza una biselacion de ese nodo Si no se encuentra el nodo biselado sera aquel que visitamos por ultimo antes de descartar la busqueda Asi la raiz contendra un sucesor o predecesor del nodo buscado Insercion Editar Es igual que en el arbol binario de busqueda con la salvedad de que se realiza una biselacion sobre el nodo insertado Ademas si el valor de clave a insertar ya existe en el arbol se bisela el nodo que lo contiene Extraccion Editar Esta operacion requiere dos biselaciones Primero se busca el nodo que contiene el valor de clave que se debe extraer Si no se encuentra el arbol es biselado en el ultimo nodo examinado y no se realiza ninguna accion adicional Si se encuentra el nodo se bisela y se elimina Con esto el arbol se queda separado en dos mitades por lo que hay que seleccionar un nodo que haga las veces de raiz Al ser un arbol binario de busqueda y estar todos los valores de clave ordenados podemos elegir como raiz el mayor valor del subarbol izquierdo o el menor valor de clave del derecho Operacion de Biselacion EditarEsta operacion traslada un nodo x que es el nodo al que se accede a la raiz Para realizar esta operacion debemos rotar el arbol de forma que en cada rotacion el nodo x esta mas cerca de la raiz Cada biselacion realizada sobre el nodo de interes mantiene el arbol parcialmente equilibrado y ademas los nodos recientemente accedidos se encuentran en las inmediaciones de la raiz De esta forma amortizamos el tiempo empleado para realizar la biselacion Podriamos distinguir 3 casos generales Caso 1 x es hijo izquierdo o derecho de la raiz p Caso 2 x es hijo izquierdo de p y este a su vez hijo izquierdo de q o bien ambos son hijos derechos Caso 3 x es hijo izquierdo de p y este a su vez hijo derecho de q o viceversa dd CASO 1 Si x es hijo izquierdo de p entonces realizaremos una rotacion simple derecha En caso de que x sea el derecho la rotacion que deberemos realizar es simple izquierda nbsp nbsp CASO 2 Si x es hijo y nieto izquierdo de p y q respectivamente Entonces debemos realizar rotacion doble a la derecha en caso de que x sea hijo y nieto derecho de p y q la rotacion sera doble izquierda nbsp nbsp CASO 3 En caso de que x sea hijo izquierdo de p y nieto derecho de q realizaremos una rotacion simple derecha en el borde entre x y p y otra simple izquierda entre x y q En caso contrario x sea hijo derecho y nieto izquierdo de q la rotaciones simples sera izquierda y despues derecha nbsp nbsp Teoremas de rendimiento EditarHay muchos teoremas y conjeturas con respecto al peor caso en tiempo de ejecucion para realizar una secuencia S de m accesos en un arbol biselado con n elementos Teorema del balance Editar El coste de realizar la secuencia de accesos S es del orden de O m l o g n 1 n l o g n displaystyle O m logn 1 nlogn nbsp En otras palabras los arboles biselados se comportan tan bien como los arboles de busqueda binaria con balanceo estatico en secuencias de al menos n accesos Teorema de optimalidad estatica Editar Sea q i displaystyle q i nbsp el numero de veces que se accede al elemento i en S El coste de realizar la secuencia de accesos S es del orden de O m i 1 n q i log m q i displaystyle O left m sum i 1 n q i log frac m q i right nbsp En otras palabras los arboles biselados se comportan tan bien como los arboles binarios de busqueda estaticos optimos en las secuencias de al menos n accesos Teorema Static Finger Editar Sea i j displaystyle i j nbsp el elemento visitado en el j esimo acceso de S y sea f un elemento fijo finger El coste de realizar la secuencia de accesos S es del orden de O m n log n j 1 m log i j f 1 displaystyle O Bigl m n log n sum j 1 m log i j f 1 Bigr nbsp Teorema Working Set Editar Sea t j displaystyle t j nbsp el numero de elementos distintos accedidos desde la ultima vez que se accedio a j antes del instante i El coste de realizar la secuencia de accesos S es del orden de O m n log n j 1 m log t j 1 displaystyle O Bigl m n log n sum j 1 m log t j 1 Bigr nbsp Teorema Dynamic Finger Editar El coste de realizar la secuencia de accesos S es del orden de O m n j 1 m log i j 1 i j 1 displaystyle O Bigl m n sum j 1 m log i j 1 i j 1 Bigr nbsp Teorema Scanning Editar Tambien conocido como Teorema de Acceso Secuencial El acceso a los n elementos de un arbol biselado en orden simetrico es de orden exacto 8 n displaystyle Theta n nbsp independientemente de la estructura inicial del arbol El limite superior mas ajustado demostrado hasta ahora es 4 5 n displaystyle 4 5n nbsp Conjetura de optimalidad dinamica EditarAdemas de las garantias probadas del rendimiento de los arboles biselados en el documento original de Sleator y Tarjan hay una conjetura no probada de gran interes Esta conjetura se conoce como la conjetura de optimalidad dinamica y basicamente sostiene que los arboles biselados se comportan tan bien como cualquier otro algoritmo de busqueda en arboles binarios hasta un factor constante Conjetura de optimalidad dinamica Sea A cualquier algoritmo de busqueda binaria en arboles que accede a un elemento x atravesando el camino desde la raiz hasta x a un coste de d x 1 y que entre los accesos puede hacer cualquier rotacion en el arbol a un coste de 1 por rotacion Sea A S el coste para que A realice la secuencia S de accesos Entonces el coste de realizar los mismos accesos para un arbol biselado es del orden O n A S Existen varios corolarios de la conjetura de optimalidad dinamica que permanecen sin probar Conjetura Transversal Sean T 1 displaystyle T 1 nbsp y T 2 displaystyle T 2 nbsp dos arboles biselados que contienen los mismos elementos Sea S la secuencia obtenida tras visitar los elementos de T 2 displaystyle T 2 nbsp en preorden El coste total para realizar la secuencia S de accesos en T 1 displaystyle T 1 nbsp es del orden de O n Conjetura Deque Sea S una secuencia de m operaciones de cola doblemente terminada push pop inject eject Entonces el coste para la realizacion de esta secuencia de operaciones S en un arbol biselado es del orden de O m n displaystyle O m n nbsp Conjetura Split Sea S cualquier permutacion de los elementos del arbol biselado Entonces el coste de la eliminacion de los elementos en el orden S es del orden de O n Vease tambien EditarArbol estructura de datos Arbol binario Arbol binario de busqueda Arbol AVL Arbol rojo negro Arbol multirramaEnlaces externos EditarAlgoritmo Editar Self adjusting Binary Search Trees Sleator and Tarjan la publicacion original en INGLES Implementaciones Editar Implementaciones en C y Java por Sleator uno de los inventores originales Fichero de cabecera h de implementacion sencilla para FreeBSD nbsp Datos Q80729 Obtenido de https es wikipedia org w index php title Arbol biselado amp oldid 131823958, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos