Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas...
Embed Size (px)
Transcript of Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas...
-
TAP - Técnicas Avanzadas Programación 1
Árboles Skip
Una alternativa a listas Skip en entornos concurrentes
-
TAP - Técnicas Avanzadas Programación 2
Pequeño repaso listas Skip
cabecera NIL2 5 10 13 14 17
● Listas enlazadas en diferente nivel
● Estructura probabilista. La altura de cada nodo depende de una distribución geométrica ( caso particular binomial negativa)
● Coste logarítmico promedio en inserción, borrado y búsqueda.
-
TAP - Técnicas Avanzadas Programación 3
Dos tipos de árboles● Sin rotaciones:
● Árboles B● Árboles 2-3● Árboles skip
● Basados en rotaciones:● Árboles AVL● Árboles rojinegros
Muy utilizados en bases de datos y sistemas de ficheros
-
TAP - Técnicas Avanzadas Programación 4
¿Por qué un árbol skip?
● Tener una equivalencia uno a uno (biyección) entre el árbol y la lista.
● Poder paginar mejor listas muy grandes.● Se asemejan a un árbol B con número
variable de nodos hijos siguiendo una distribución binomial negativa.
Ejemplo árbol B
-
TAP - Técnicas Avanzadas Programación 5
Disección de un nodo
-
TAP - Técnicas Avanzadas Programación 6
Operaciones
Nodo raíz
No es nodo
raíz
join(split (T,a), a) = split (join (T,a),a) = T
-
TAP - Técnicas Avanzadas Programación 7
Operaciones sobre lista SkipWall (x,l)
Devuelve el siguiente nodo a x cuyo nivel es estrictamente mayor que l
12 2337
47
Nivel 1
Nivel 2 Wall(23,1) = 37
-
TAP - Técnicas Avanzadas Programación 8
Operaciones sobre lista Skip
subskiplist (x,l)
Define una sublista Skip de altura l donde:
➔ x es el nodo inicial
➔ wall(x,l) = Nil, teniendo en cuenta que el primer nodo encontrado de altura > l, se considera nil S
x,l,l
-
TAP - Técnicas Avanzadas Programación 9
Operaciones sobre lista Skipforward (x,l)
Devuelve el nodo apuntado por el puntero de nivel l del x
12 2337
47
Nivel 1
Nivel 2 forward(12,2) = 37
-
TAP - Técnicas Avanzadas Programación 10
Transformación descendente
Caso 1: forward(x,l) /= wall(x,l)
Si hay f-1 nodos intermedios, se añaden a la vez al mismo nodo del árbol:
-
TAP - Técnicas Avanzadas Programación 11
Transformación descendente
Caso 2: forward(x,l) = wall(x,l)
Es necesario para distinguir listas que difieren sólo en la altura de algunos nodos
header nil header nil
Ejemplos
-
TAP - Técnicas Avanzadas Programación 12
Transformación descendente
Caso 3:
El nodo 'a' tiene altura 1 en la lista. Se convierte directamente en una hoja.
-
TAP - Técnicas Avanzadas Programación 13
Ejemplo de transformación
-
TAP - Técnicas Avanzadas Programación 14
Ejemplo de transformación
Caso 1
-
TAP - Técnicas Avanzadas Programación 15
Ejemplo de transformación
Caso 1 Caso 2
-
TAP - Técnicas Avanzadas Programación 16
Ejemplo de transformación
-
TAP - Técnicas Avanzadas Programación 17
Ejemplo de transformación
-
TAP - Técnicas Avanzadas Programación 18
Ejemplo de transformación
Casos 3
-
TAP - Técnicas Avanzadas Programación 19
Algoritmos
No se puede evitar bloquear grupos nodos
Debido a la localidad de las reglas, sólo se bloquean un pequeño número y por poco tiempo
A cada nodo del árbol añadiremos una bolsa de espera, un almacén de claves.
Utilizaremos un algoritmo de filtración que añadirá en los casos correspondientes la clave del elemento a los hijos adecuados.
-
TAP - Técnicas Avanzadas Programación 20
Búsqueda
Se añade a la bolsa de la raíz la clave a buscar:
● Si el nodo está vacío, la clave se añade al hijo.● Si el nodo la clave pertenece al nodo,
encontrada y fin.● Si el nodo es una hoja y su clave es distinta,
no encontrada y fin.● Si hay varias claves en un nodo, se añade a la
bolsa del hijo correspondiente al rango correcto
-
TAP - Técnicas Avanzadas Programación 21
Inserción
1. Primero se busca el elemento. Si existe, se elimina de las bolsas de espera y fin.
2. Al llegar al nivel 0, se añade una hoja, y se coloca apropiadamente la clave en el nivel 1, llenando un nodo vacío o añadiéndose a las otras claves del nodo.
3. Se calcula una altura aleatoriamente de forma que se siga una distribución binomial negativa. Se realizan splits a la clave hasta alcanzar la altura calculada.
Con esto nos aseguramos de tener en promedio un árbol equilibrado.
-
TAP - Técnicas Avanzadas Programación 22
Borrado
1. Primero se busca la clave.
2. Se mueve la clave realizando joins sucesivos hasta alcanzar una hoja.
3. Se elimina la hoja
-
TAP - Técnicas Avanzadas Programación 23
Bibliografía● Skip trees, an alternative data structure to Skip
lists in a concurrent approach. (Xavier Messeguer)
● Apuntes de la asignatura Técnicas Avanzadas de Programación
● Wikipedia
¿Preguntas?
Página 1Página 2Página 3Página 4Página 5Página 6Página 7Página 8Página 9Página 10Página 11Página 12Página 13Página 14Página 15Página 16Página 17Página 18Página 19Página 20Página 21Página 22Página 23