Ordenamientos ms importantes de rboles - PowerPoint PPT Presentation

1 / 60
About This Presentation
Title:

Ordenamientos ms importantes de rboles

Description:

FOR cada sub rbol c de n, excepto el de m s a la izquierda en orden de izquierda a derecha DO ... Rotaci n doble a la derecha de un ABB. Es equivalente a: RSI(A ... – PowerPoint PPT presentation

Number of Views:75
Avg rating:3.0/5.0
Slides: 61
Provided by: Norb55
Category:

less

Transcript and Presenter's Notes

Title: Ordenamientos ms importantes de rboles


1
Ordenamientos más importantes de árboles
  • PROCEDURE Ord_Pre (nÁrbol)
  • BEGIN
  • Lista n
  • FOR cada subarbol c de n, si los hay,
  • en orden de izquierda a derecha DO
  • Ord_Pre (c)
  • END
  • END Ord_Pre

2
Ordenamientos más importantes de árboles
  • PROCEDURE Ord_Pos (nÁrbol)
  • BEGIN
  • FOR cada subarbol c de n, si los hay,
  • en orden de izquierda a derecha DO
  • Ord_Pos (c)
  • END
  • Lista n
  • END Ord_Pre

3
Ordenamientos más importantes de árboles
  • PROCEDURE Ord_Sim (nÁrbol)
  • BEGIN
  • IF n es un árbol compuesto sólo de raíz THEN
  • Lista n
  • ELSE
  • Ord_Sim (hijo más a la izquierda de
    n)
  • Lista n
  • FOR cada subárbol c de n, excepto el de
    más a la izquierda en orden de izquierda a
    derecha DO
  • Ord_Sim(c)
  • END
  • END
  • END

4
TAD ÁRBOL
  • NOMBRE
  • Arbol (elemento)
  • CONJUNTOS
  • A conjunto de árboles
  • I conjunto de elementos
  • B conjunto de booleanos true, false
  • M conjunto de mensajes el árbol está
    vacío,no hijo izq,no hermano
    derecho,el elemento no tiene padre

5
TAD ÁRBOL
  • SINTAXIS
  • crear-árbol A
  • creari Ix Ai A
  • anular A A U M
  • es-vacio-árbol A B
  • etiqueta A I U M
  • padre A A U M
  • hijo-mas-izq A A U M
  • hermano-der A AUM

6
TAD ÁRBOL
  • SEMANTICA ? e ? I, ? Aj ? A
  • hijo-más-izq (crear-árbol) el árbol está
    vacio
  • hijo-más-izq (creari(e,A1,.Ai)) si i0 ? no
    hijo izq A1
  • hermano-der (crear-árbol) el árbol está
    vacío
  • hermano-der (creari (e,A1,..... Ai)) no
    hermano derecho
  • hermano-der(hijo-más-izq(creari(e,A1,....Ai)))
  • si i1 ?no hermano derecho
  • hijo-más-izq (creari-1(e,A2,.....Ai))
  • anular(crear-árbol) el árbol está vacío
  • anular (creari(e,A1,....Ai)) crear-árbol
  • es-vacío-árbol (crear-árbol) true
  • es-vacío-árbol (creari (e,A1,...Ai)) false

7
TAD ÁRBOL
  • etiqueta (crear-árbol) el árbol está vacío
  • etiqueta (creari (e,A1,...Ai)) e
  • etiqueta (hijo-más-izq(creari(e,A1,...Ai)))
    etiqueta (A1)
  • padre (crear-árbol) el árbol está vacío
  • padre (creari (e,A1,...Ai)) el elemento no
    tiene padre
  • padre (hijo-más-izq(creari (e,A1,...Ai)))
  • creari (e,A1,...Ai))
  • Aserto invariante siempre que a la entrada haya
    un mensaje , se devolverá como salida el mismo
    mensaje.

8
Operaciones básicas con árboles binarios
  • ESTRUCTURA DEL ÁRBOL
  • TYPE
  • Ptr POINTER TO nodo
  • nodo RECORD
  • etiqueta INTEGER
  • contadorCARDINAL
  • izq,der Ptr
  • END

9
Operaciones básicas con árboles binarios
  • PROCEDURE preorden (tPtr)
  • BEGIN
  • IF t ltgt NIL THEN
  • imprimir (t.etiqueta)
  • preorden (t.izq)
  • preorden (t.der)
  • END
  • END preorden

10
Operaciones básicas con árboles binarios
  • PROCEDURE inorden (tPtr)
  • BEGIN
  • IF tltgtNIL THEN
  • inorden (t.izq)
  • imprimir (t.etiqueta)
  • inorden (t.der)
  • END
  • END inorden

11
Operaciones básicas con árboles binarios
  • PROCEDURE postorden (tPtr)
  • BEGIN
  • IF t ltgt NIL THEN
  • postorden (t.izq)
  • postorden (t.der)
  • imprimir (t.etiqueta)
  • END
  • END postorden

12
Operaciones básicas con árboles binarios
  • PROCEDURE localizar (xINTEGERtPtr)Ptr
  • BEGIN
  • WHILE (t ltgt NIL) AND (t.etiqueta ltgt x) DO
  • IF t.etiqueta lt x THEN tt.der
  • ELSE tt.izq
  • END
  • END
  • RETURN(t)
  • END localizar

13
Operaciones básicas con árboles binarios
  • búsqueda con centinela
  • PROCEDURE localizar2 (xINTEGERtPtr)Ptr
  • BEGIN (utiliza centinela)
  • s.etiquetax (centinela )
  • WHILE t.etiqueta ltgt x DO
  • IF t.etiqueta lt x THEN
  • tt.der
  • ELSE
  • tt.izq
  • END
  • END
  • RETURN (t)
  • END localizar2

14
EJEMPLO DE BÚSQUEDA CON INSERCIÓN
  • PROCEDURE Busqueda (xINTEGER VAR pPtr)
  • VAR
  • qPtr
  • BEGIN
  • IF pNIL THEN (insertar)
  • NEW(q)
  • pq
  • WITH q DO
  • etiquetax
  • contador1
  • izqNIL
  • derNIL
  • END
  • ELSIF x lt p.etiqueta THEN
  • Busqueda(x,p.izq)
  • ELSIF x gt p.etiqueta THENBusqueda (x,p.der)
  • ELSE
  • p.contadorp.contador 1
  • END
  • END Busqueda

15
EJEMPLO DE BÚSQUEDA CON INSERCIÓN
  • busqueda e insercion con centinela
  • PROCEDURE Busqueda (xINTEGER VAR pPTR)
  • VAR
  • qPtr
  • BEGIN
  • IF x lt p.etiqueta THEN
  • Busqueda (x,p.izq)
  • ELSIF x gt p.etiqueta THEN
  • Busqueda (x,p.der)
  • ELSIF pltgts THEN ( s es el puntero al centinela
    )
  • p.contadorp.contador 1

16
EJEMPLO DE BÚSQUEDA CON INSERCIÓN
  • busqueda e insercion con centinela
  • ELSE
  • NEW(q)
  • pq
  • WITH q DO
  • etiquetax
  • izqs
  • ders
  • contador1
  • END
  • END
  • END Busqueda

17
ELIMINACION DE UN NODO EN UN ÁRBOL BINARIO
  • PROCEDURE Borrar (xINTEGER VAR pPtr)
  • VAR
  • qPtr
  • PROCEDURE Del (VAR rPtr)
  • BEGIN
  • IF r.der ltgt NIL THEN Del (r.der)
  • ELSE
  • q.etiquetar.etiqueta
  • q.contadorr.contador
  • qr
  • rr.izq
  • END
  • END Del

18
ELIMINACION DE UN NODO EN UN ÁRBOL BINARIO
  • BEGIN (procedimiento Borrar)
  • IF pNIL THEN
  • WriteString (El elemento no está en el
    árbol.)
  • ELSIF x lt p.etiqueta THEN
  • Borrar (x,p.izq)
  • ELSIF x gt p.etiqueta THEN
  • Borrar (x,p.der)
  • ELSE (se borra el elemento p)
  • qp
  • IF q.derNIL THEN
  • pq.izq
  • ELSIF q.izqNIL THEN
  • pq.der
  • ELSE del (q.izq)
  • END
  • DISPOSE(q)
  • END
  • END Borrar

19
Árboles binarios Hilvanados o Entrelazados
  • Recorrido en orden simétrico del árbol

20
Árboles binarios Hilvanados o Entrelazados
  • IBIT IZQ ET DER DBIT

21
Árboles binarios Hilvanados o EntrelazadosRecorr
ido en Orden Simétrico
  • ESTRUCTURA DEL ÁRBOL
  • TYPE
  • Ptr POINTER TO nodo
  • nodo RECORD
  • etiqueta INTEGER
  • izq,der Ptr
  • ibit,dbit0..1
  • END

22
Árboles binarios Hilvanados o EntrelazadosRecorr
ido en Orden Simétrico
  • PROCEDURE Ord_Sim (pPtr)
  • VAR
  • cabezaPtr
  • PROCEDURE Sucesor (xPtr)Ptr
  • VAR
  • sPtr
  • BEGIN
  • sx.der
  • IF x.dbit1 THEN
  • WHILE s.ibit 1 DO
  • ss.izq
  • END
  • END
  • END Sucesor
  • BEGIN (Ord_Sim)
  • cabezap
  • LOOP
  • pSucesor(p)

23
Árboles binarios Hilvanados o EntrelazadosRecorr
ido en Orden Simétrico
  • PROCEDURE Busqueda (xINTEGER VAR pPtr)
  • VAR
  • qPtr
  • BEGIN
  • IF xltp.etiqueta THEN
  • IF p.ibit1 THEN
  • Busqueda(x,p.izq)
  • ELSE (inserión a la izquierda)
  • p.ibit1
  • NEW(q)
  • q.ibit0
  • q.dbit0
  • q.izqp.izq
  • q.derp
  • p.izqq
  • END
  • ELSIF xgtp.etiqueta THEN
  • IF p.dbit1 THEN

24
Árboles de búsqueda balanceados
  • Árboles binarios de búsqueda (ABB).
  • Cada nodo tiene cero, uno o dos hijos,
    denominados hijo izquierdo e hijo derecho.
  • Los hijos de un nodo x con valores menores que x
    se encuentran en el subárbol izquierdo y los
    mayores en el derecho.

25
Árboles de búsqueda balanceados
  • Son útiles para realizar búsqueda e inserción en
    O(log n) y recorrido ordenado en O(n).
  • Inconveniente En el peor caso los árboles son
    cadenas y la búsqueda necesita O(n).

26
Árboles de búsqueda balanceados
  • Conclusión Es necesario garantizar que el árbol
    está balanceado o equilibrado.
  • Condición de balanceo basada en número de nodos
    o en altura de subárboles.

27
Árboles de búsqueda balanceados
  • Árbol de búsqueda perfectamente balanceado
  • Definición Un AB perfectamente balanceado es un
    ABB en el que, para todo nodo, la cantidad de
    nodos de su subárbol izquierdo difiere como
    máximo en 1 de la cantidad de nodos del subárbol
    derecho.

28
Árboles de búsqueda balanceados
3 3
2 3
1 1
2 0
1 1
0 1
0 1
  • Resultado
  • La búsqueda es O(log n) en el peor caso.
  • Pero mantener la condición de balanceo es muy
    costoso. La inserción puede ser O(n).

29
Árboles de búsqueda balanceados
  • Moraleja definir una condición de balanceo, pero
    menos exigente.
  • Definición de árbol balanceado o AVL
    (Adelson-Velskii y Landis) un AVL es un ABB em
    el que, para todo nodo, la altura de sus
    subárboles difiere como máximo en 1.

1 1
1 0
-1 0
0 -1
0 0
30
Árboles de búsqueda balanceados
  • Operaciones sobre un AVL
  • La búsqueda en un AVL es exactamente igual que
    sobre un ABB.
  • La inserción y eliminación son también como en un
    ABB, pero después de insertar o eliminar hay que
    comprobar la condición de balanceo.
  • Almacenar la altura de cada subárbol.
  • Inserción o eliminación normal (procedimiento
    recursivo).
  • Al volver de la recursividad, en los nodos por
    los que pasa, comprobar la condición de balanceo.
  • Si no se cumple, rebalancear el árbol.

31
Árboles de búsqueda balanceados
  • Definición del tipo de datos
  • tipo
  • ArbolAVLT PunteroNodoAVLT
  • NodoAVLT registro
  • clave T
  • altura entero
  • izq, der ArbolAVLT
  • finregistro
  • operación Altura (A ArbolAVLT) entero
  • si A NULO entonces devolver -1
  • sino devolver A?altura
  • Uso de memoria un puntero más que con una
    lista...

32
Peor caso de AVL
  • Cuánto será el tiempo de ejecución de la
    búsqueda en un AVL en el peor caso, para n nodos?
  • El tiempo será proporcional a la altura del
    árbol.
  • Cuestión Cuál es la máxima altura del árbol
    para n nodos?
  • Le damos la vuelta a la pregunta Cuál es el
    mínimo número de nodos para una altura h?

33
Peor caso de AVL
  • N(h) Menor número de nodos para altura h.

34
Peor caso de AVL
  • Caso general.

h-2
h-1
  • N(h) N(h-1) N(h-2) 1
  • Sucesión parecida a la de Fibonacci.
  • Solución N(h) C1,62h ...

35
Peor caso de AVL
  • Mínimo número de nodos para altura h N(h)
    C1,62h ...
  • Máxima altura para n nodosh(N) D log1,62 n
    ...
  • Conclusión
  • En el peor caso, la altura del árbol es O(log n).
  • Por lo tanto, la búsqueda es O(log n).
  • Inserción y eliminación serán de O(log n) si el
    rebalanceo se puede hacer en O(1).

36
Rotaciones en un AVL
  • Los rebalanceos en un AVL hacen uso de
    operaciones conocidas como rotaciones en ABB.
  • Rotación cambiando algunos punteros, obtener
    otro árbol que siga siendo un ABB.
  • RSD(A). Rotación simple a la derecha de un ABB

B
A
A
B
37
Rotaciones en un AVL
  • RSI(A). Rotación simple a la izquierda de un ABB

B
A
A
B
  • Programar las operaciones de rotación simple.

38
Rotaciones en un AVL
operación RSI (var A ArbolAVLT) B
A?izq A?izq B?der A?der B A?altura
1max(Altura(A?izq), Altura(A?der)) B?altura
1max(Altura(B?izq), A?altura) A B Cuál es
el tiempo de ejecución de una rotación simple?
39
Rotaciones en un AVL
  • RDD(A). Rotación doble a la derecha de un ABB
  • Es equivalente a RSI(A?der) RSD(A)

A
C
B
A
B
C
40
Rotaciones en un AVL
  • RDI(A). Rotación doble a la izquierda de un ABB
  • Es equivalente a RSD(A?izq) RSI(A)
  • Todas las rotaciones mantienen la estructura de
    ABB y son O(1).

41
Operación de inserción en un AVL
  • Inserción normal como en un ABB.
  • En cada nodo A (a la vuelta de la recursividad),
    si la altura del árbol no se modifica, acabar.
  • Si la altura se incrementa en 1 entonces
  • Si Altura(A?izq) Altura(A?der)gt1 entonces
    rebalancear.
  • Ejemplo.Insertar(1)

8
2 0
RSI(13)
13
3
1 0
23
9
0 -1
42
Operación de inserción en un AVL
  • Qué rotación aplicar en cada caso de
    desbalanceo?
  • Se pueden predefinir 4 situaciones diferentes,
    cada una asociada con un tipo de rotación.

Caso 1. II(C)
Caso 2. ID(C)
x
x
43
Operación de inserción en un AVL
  • Qué rotación aplicar en cada caso de
    desbalanceo?
  • Se pueden predefinir 4 situaciones diferentes,
    cada una asociada con un tipo de rotación.

Caso 3. DI(C)
Caso 4. DD(C)
x
x
44
Operación de inserción en un AVL
Caso 1. II (C)
Solución. RSI (C)
C
A
h
A
C
h-2
h
h-2
h-1
h-2
h-2
h-2
h-2
h-1
x
x
  • El árbol resultante está balanceado.
  • Adicionalmente, la altura del árbol no cambia.

45
Operación de inserción en un AVL
Caso 2. ID (C)
Solución. RDI (C)
C
B
h
A
C
A
h-2
h
h-2
h-3
B
h-1
h-2
h-2
h-2
h-3
h-1
x
x
x
x
  • La altura final del árbol tampoco cambia.

46
Operación de inserción en un AVL
operación Inserta (var A ArbolAVLT x
T) si A NULO entonces A NUEVO
NodoAVLT A?clave x A?der A?izq
NULO A?altura 0 sino // Subárbol
izquierdo si x lt A?clave entonces ... sino
// Subárbol derecho si x gt A?clave
entonces ... finsi
Inserta (A?izq, x) si Altura(A?izq)
Altura(A?der)gt1 entonces si x lt A?izq?clave
entonces RSI (A) // Caso II(A) sino
RDI (A) // Caso ID(A) finsi sino
A?altura 1max( Altura(A?izq),
Altura(A?der)) finsi
47
Operación de inserción en un AVL
  • El procedimiento sigue recursivamente hasta la
    raíz.
  • Pero cuando se haga el primer balanceo no será
    necesario hacer otros balanceos. Por qué?
  • Ejemplo Dado un árbol nuevo insertar 4, 5, 7, 2,
    1, 3, 6.
  • Cuál es el orden de complejidad del algoritmo de
    Inserta?

48
Operación de inserción en un AVL
  • TYPE
  • Balanceo-1..1
  • PtrPOINTER TO nodo
  • nodoRECORD
  • etiquetaINTEGER
  • contadorINTEGER
  • izq,der Ptr
  • END
  • PROCEDURE Busqueda (xINTEGER VAR pPtr
    hBOOLEAN)
  • ( h indica si ha aumentado la altura del
    árbol )
  • VAR
  • q,p1,p2Ptr
  • BEGINIF pNIL THEN NEW(q)
  • pq
  • hTRUE
  • WITH pDO
  • etiquetax
  • contador1

49
Operación de inserción en un AVL
  • ELSIF p.etiqueta gt x THEN
  • Busqueda (x,p.izq,h)
  • IF h THEN CASE p.bal OF
  • 1 p.bal0
  • hFALSE
  • 0 p.bal-1
  • -1 (rebalanceo)
  • p1p.izq
  • IF p1.bal-1 THEN (rotac. LL)
  • p.izqp1.der
  • p1.derp
  • p.bal0
  • ELSE (rotación doble LR )
  • p2p1.der
  • p1.derp2.izq
  • p2.izqp1
  • p.izqp2.der
  • p2.derp
  • IF p2.bal-1 THEN

50
Operación de inserción en un AVL
  • ELSIF p.etiqueta lt x THEN
  • Busqueda(x,p.der,h)
  • IF h THEN (la rama derecha creció)
  • CASE p.bal OF
  • -1 p.bal0
  • hFALSE
  • 0 p.bal1
  • 1 (rebalanceo)
  • p1p1.der
  • IF p1.bal1 THEN (rotación
    RR) p.derp1.izq
  • p1.izqp
  • p.bal0
  • pp1
  • ELSE (rotación doble RL)
  • p2p1.izq
  • p1.izqp2.der
  • p2.derp1
  • p.derp2.izq
  • p2.izqp

51
Operación de eliminación en un AVL
  • La eliminación de un nodo es algo más compleja.
    Hay más casos y puede ser necesario balancear a
    varios niveles.
  • Algoritmo de eliminación Eliminación normal en
    ABB comprobación de la condición.
  • Eliminación normal en un ABB. Buscar el elemento
    a eliminar en el árbol.
  • Si es un nodo hoja se elimina directamente.
  • Si el nodo eliminado tiene un solo hijo, conectar
    el padre del nodo eliminado con ese hijo.
  • Si el nodo eliminado tiene dos subárboles,
    escoger el nodo más a la derecha del subárbol
    izquierdo (o el más a la izquierda del subárbol
    derecho).

52
Operación de eliminación en un AVL
  • Eliminar 20.
  • Eliminar 4.
  • Eliminar 10.

53
Operación de eliminación en un AVL
  • Después de eliminar un nodo, volver a los nodos
    antecesores (recursivamente).
  • Comprobar si cumple la condición de balanceo.
  • En caso negativo rebalancear.
  • Se pueden predefinir 3 casos de eliminación en
    subárbol izquierdo, y los simétricos en subárbol
    derecho.

A
Ojo Los casos de desbalanceo en
subárbol izquierdo de A dependen de las alturas
h1 y h2 en el subárbol derecho.
C
h2
h1
54
Operación de eliminación en un AVL
Caso 1. h1h2
Solución. RSD (A)
C
A
h
A
C
h
h-3
h-2
h-1
h-2
h-2
h-1
h-3
h-2
  • El árbol resultante está balanceado.
  • La altura del árbol no cambia.

55
Operación de eliminación en un AVL
Caso 2. h1lth2
Solución. RSD (A)
A
C
h
C
A
h-2
h-1
h-3
h-2
h-3
h-2
h-1
h-3
h-3
  • En este caso, la altura del árbol disminuye en 1.

56
Operación de eliminación en un AVL
Caso 3. h1gth2
Solución. RDD (A)
A
B
C
C
A
B
h-2
  • Comprobar (mediante el cálculo de las alturas)
    que el árbol resultante está balanceado.
  • La altura final del árbol disminuye en 1.

57
Operación de eliminación en un AVL
  • Ejercicio implementar la operación de
    eliminación en un AVL.
  • Cuál es el orden de complejidad?
  • Ejemplo Dado el siguiente AVL, eliminar las
    claves 4, 15, 32, 45.

58
Operación de eliminación en un AVL
  • Procedure BalanceI(VAR pPtr VAR hBOOLEAN)
  • VAR
  • p1,p2Ptr
  • b1,b2Balanceo
  • BEGIN (la rama izquierda ha crecido)
  • CASE p.bal OF
  • -1 p.bal0
  • 0 p.bal1 hFALSE
  • 1 p1p.der b1p1.bal
  • IF b1 gt0 THEN (rotación
    simple RR)
  • p.derp1.izq p1.izqp
  • IF b10 THEN
  • p.bal1p1.bal-1 hFALSE
  • ELSE
  • p.bal0 p1.bal0
  • END
  • pp1
  • ELSE (rotación doble RL)
  • p2p1.izq b2p2.bal

59
Operación de eliminación en un AVL
  • PROCEDURE BalanceD (VAR pPtr VAR hBOOLEAN)
  • VAR
  • p1,p2Ptr b1,b2Balanceo
  • BEGIN (la rama derecha ha encogido)
  • CASE p.bal OF
  • 1 p.bal0
  • 0 p.bal-1 hFALSE
  • -1 (rebalanceo)
  • p1p.izq b1p1.bal
  • IF b1lt0 THEN (rotación simple LL)
  • p.izqp1.der p1.derp
  • IF b10 THEN
  • p.bal-1 p1.bal1 hFALSE
  • ELSE
  • p.bal0 p1.bal0
  • END
  • pp1
  • ELSE (rotación doble LR )
  • p2p1.der b2p2.bal

60
Operación de eliminación en un AVL
  • PROCEDURE Borrar (xINTEGER VAR pPtr VAR
    hBOOLEAN)
  • VAR
  • qPtr
  • PROCEDURE del(VAR rPtr VAR hBOOLEAN)
  • BEGIN
  • IF r.der ltgt NIL THEN
  • del(r.der,h)
  • IF h THEN BalanceD(r,h) END
  • ELSE
  • q.etiquetar.etiqueta
  • q.contadorr.contador
  • qr rr.izq hTRUE
  • END
  • END del
  • BEGIN (Borrar)
  • IF pNIL THEN
  • WriteString(El elemento no está en el
    árbol.)
  • ELSIF p.etiqueta gt x THEN
  • Borrar(x,p.izq,h)

61
Árboles de búsqueda balanceados
  • Conclusiones
  • La idea de los árboles binarios de búsqueda está
    muy bien.
  • Pero para que funcionen en todos los casos es
    necesario introducir condiciones de balanceo.
  • ABB sin balanceo mal eficiencia en peor caso.
  • Balanceo perfecto costoso mantenerlo.
  • AVL Todos los casos están en O(log n) y el
    balanceo es poco costoso.
Write a Comment
User Comments (0)
About PowerShow.com