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

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

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