Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas...

23
TAP - Técnicas Avanzadas Programación 1 Árboles Skip Una alternativa a listas Skip en entornos concurrentes

Transcript of Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas...

Page 1: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

TAP - Técnicas Avanzadas Programación 1

Árboles Skip

Una alternativa a listas Skip en entornos concurrentes

Page 2: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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.

Page 3: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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

Page 4: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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

Page 5: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

TAP - Técnicas Avanzadas Programación 5

Disección de un nodo

Page 6: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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

Page 7: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

TAP - Técnicas Avanzadas Programación 7

Operaciones sobre lista Skip

Wall (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

Page 8: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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

Page 9: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

TAP - Técnicas Avanzadas Programación 9

Operaciones sobre lista Skip

forward (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

Page 10: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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:

Page 11: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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

Page 12: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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.

Page 13: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

TAP - Técnicas Avanzadas Programación 13

Ejemplo de transformación

Page 14: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

TAP - Técnicas Avanzadas Programación 14

Ejemplo de transformación

Caso 1

Page 15: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

TAP - Técnicas Avanzadas Programación 15

Ejemplo de transformación

Caso 1 Caso 2

Page 16: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

TAP - Técnicas Avanzadas Programación 16

Ejemplo de transformación

Page 17: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

TAP - Técnicas Avanzadas Programación 17

Ejemplo de transformación

Page 18: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

TAP - Técnicas Avanzadas Programación 18

Ejemplo de transformación

Casos 3

Page 19: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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.

Page 20: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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

Page 21: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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.

Page 22: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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

Page 23: Una alternativa a listas Skip en entornos concurrentes · 2009-05-07 · TAP - Técnicas Avanzadas Programación 2 Pequeño repaso listas Skip cabecera 2 5 10 13 14 17 NIL Listas

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?