Arboles Avl

download Arboles Avl

of 54

Transcript of Arboles Avl

  • 25/08/2014 1

    Unidad IV

    Estructuras no lineales de Datos:

    rboles AVL

    Prof. Domingo Hernndez

  • 25/08/2014 2

    Contenido.

    1.- Introduccin.

    2.- rboles AVL.

    3.- Caractersticas.

    4.- Implantacin.

    5.- Balaceo.

    6.- Algoritmos.

  • 25/08/2014 3

    Estructuras no lineales: rboles AVL

    Introduccin

    Un rbol binario de bsqueda es un rbol binario en el

    cual cada nodo cumple con que todos los nodos de su

    subrbol izquierdo son menores que la raz y todos los

    nodos del subrbol derecho son mayores que la raz.

    Recordamos tambin que el tiempo de las operaciones

    sobre un rbol binario de bsqueda son O(log n)

    promedio, pero el peor caso es O(n), donde n es el

    nmero de elementos.

  • 25/08/2014 4

    Estructuras no lineales: rboles AVL

    Introduccin

    La bsqueda de elementos en un rbol binario tiene un costo O(log n) y O(n).

    Depende de cmo fue el orden de insercin de los elementos.

    Los arboles equilibrados o balanceados surgen para mejorar el rendimiento de las operaciones que

    involucren una bsqueda.

  • 25/08/2014 5

    Estructuras no Lineales: rboles AVL

    Un ABB en el peor de los casos cualquier

    operacin requiere O(n)

    9

    5 10

    3 7

    9

    7

    10

    5

    3

    Introduccin

  • 25/08/2014 6

    Estructuras no Lineales: rboles Equilibrados

    Se desea construir rboles que garanticen un

    equilibrio. Entre estas estructuras estn:

    AVL con una garanta de tiempo de ejecucin

    (log n).

    Arboles Rojo y Negro. (log n).

    Arboles biselados autoajustables (Splay).

    Anlisis amortizado para un conjunto de m

    operaciones puede ser completada en un

    tiempo (m log n).

    Introduccin

  • 25/08/2014 7

    Estructuras no Lineales: rboles Equilibrados

    Todos los arboles de bsqueda equilibrados son casos

    especiales de los rboles binarios de bsqueda.

    Tienen la estructura de un ABB.

    Obedecen a la propiedad de los ABB. (poseen la

    misma estrategia de bsqueda.)

    Los rboles equilibrados slo utilizan restricciones

    adicionales sobre los ABB.

    Introduccin

  • 25/08/2014 8

    Estructuras no lineales: rboles AVL

    Introduccin

    Un rbol AVL es un rbol binario de bsqueda que

    cumple con la condicin de que la diferencia entre las

    alturas de los subrboles de cada uno de sus nodos es,

    como mucho 1.

    La denominacin de rbol AVL viene dada por los

    creadores de tal estructura

    (Adelson-Velskii y Landis).

  • 25/08/2014 9

    Estructuras no lineales: rboles Equilibrados AVL

    Definicin Formal de rbol AVL

    Sea T un rbol binario de bsqueda (ABB) con Ti y

    Td siendo sus sub-rboles izquierdo y derecho

    respectivamente, tenemos que:

    * Si T es vaco, es un rbol AVL

    * Si T es un ABB no vaco, es AVL si y slo si:

    o Ti y Td son AVL y

    o H(Td) H(Ti) = + 1, 0 1 (factor de equilibrio)

  • 25/08/2014 10

    Estructuras no lineales: rboles Equilibrados AVL

    Introduccin

    Los rboles AVL, no se tratan de rboles

    perfectamente equilibrados, pero s son lo

    suficientemente equilibrados como para que su

    comportamiento sea lo bastante bueno como para

    usarlos donde los ABB no garantizan tiempos de

    bsqueda ptimos.

    El algoritmo para mantener un rbol AVL

    equilibrado se basa en re-equilibrados locales, de

    modo que no es necesario explorar todo el rbol

    despus de cada insercin o borrado.

  • 25/08/2014 11

    Estructuras no lineales: rboles Equilibrados AVL

    Introduccin

    Los AVL son tambin ABB, de modo que mantienen

    todas las operaciones que poseen stos.

    Las nuevas operaciones son las de equilibrar el

    rbol, pero eso se hace como parte de las operaciones

    de insertado y borrado.

  • 25/08/2014 12

    Estructuras no lineales: rboles Equilibrados AVL

    Caractersticas de los rboles AVL

    *La diferencia entre las alturas de los subrboles

    derecho e izquierdo no debe excederse en ms de 1.

    *Cada nodo tiene asignado un peso de acuerdo a las

    alturas de sus subrboles

    *Un nodo tiene un peso de 1 si su subrbol derecho

    es ms alto, -1 si su subrbol izquierdo es ms alto

    y 0 si las alturas son las mismas.

    *La insercin y eliminacin en AVLs es la misma que

    en los ABBs slo que tenemos que adicionar el

    proceso de balanceo.

  • 25/08/2014 13

    Estructuras no lineales: rboles Equilibrados AVL

  • 25/08/2014 14

    Estructuras no lineales: rboles Equilibrados AVL

    Factor de equilibrio

    Cada nodo, adems de la informacin que se pretende

    almacenar, debe tener los dos punteros a los rboles

    derecho e izquierdo, igual que los rboles binarios de

    bsqueda (ABB), y adems el dato que controla el

    factor de equilibrio.

    El factor de equilibrio es la diferencia entre las

    alturas del rbol derecho y el izquierdo:

    FE = altura subrbol derecho - altura subrbol

    izquierdo;

  • 25/08/2014 15

    Estructuras no lineales: rboles Equilibrados AVL

  • 25/08/2014 16

    Estructuras no lineales: rboles Equilibrados AVL

    template class NodoAVL:

    privateNododArb {

    friend class arbolAVL;

    protected:

    int h; // Factor de Equilibrio del nodo

    public:

    NodoAVL();

    NodoAVL(const T& elem);

    int H(){return h};

    void H(int i);

    }

    Implantacin de la clase nodo para rboles AVL

  • 25/08/2014 17

    Estructuras no lineales: rboles Equilibrados AVL

  • 25/08/2014 18

    Estructuras no lineales: Operaciones sobre rboles Equilibrados AVL

  • 25/08/2014 19

    Estructuras no lineales: Operaciones sobre rboles Equilibrados AVL

    Rotaciones:

    Una propiedad que comparten todas las estructuras de

    datos de rboles de bsqueda equilibrados, es que con

    el fin de satisfacer sus diferentes restricciones,

    reorganizan sus subrboles utilizando rotaciones.

    Cada uno de los patrones de rotacin se construyen

    usando uno o ms de las operaciones bsicas de

    rotaciones.

  • 25/08/2014 20

    Estructuras no lineales: rboles Equilibrados AVL

    Tc

    Ta Tb

    p

    v

    Ta

    Tc Tb

    v

    p

    Rotar derecha(p)

  • 25/08/2014 21

    Estructuras no lineales: rboles Equilibrados AVL

  • 25/08/2014 22

    Estructuras no lineales: rboles Equilibrados AVL

  • 25/08/2014 23

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin simple a la Derecha

    Rotacin simple a la derecha de un rbol de raz (r) y

    de hijos izquierdo (i) y derecho (d), lo que haremos

    ser formar un nuevo rbol cuya raz sea la raz del

    hijo izquierdo, como hijo izquierdo colocamos el hijo

    izquierdo de i (nuestro i) y como hijo derecho

    construimos un nuevo rbol que tendr como raz, la

    raz del rbol (r), el hijo derecho de i (d) ser el hijo

    izquierdo y el hijo derecho ser el hijo derecho del

    rbol (d).

    Precondicin : Tiene que tener hijo izquierdo no

    vaco.

  • 25/08/2014

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin simple a la Derecha

    NodoAVL* RotaSimpleDer(NodoAVL* p) {

    Assert (p!=0);

    Assert(pHizq()!=0);

    NodoAVL * q= pHizq();

    pHizq(qHder());

    qHder(p);

    qH(0); // Actualiza FE

    pH(0); // Actualiza FE

    return q;

    }

  • 25/08/2014 25

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin simple a la Izquierda

    Tc

    Ta Tb

    p

    v

    Ta

    Tc Tb

    v

    p

    Rotar izquierda(v)

  • 25/08/2014

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin simple a la Izquierda

  • 25/08/2014

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin simple a la Izquierda

  • 25/08/2014 28

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin simple a la Izquierda

    Rotacin simple a la izquierda de un rbol de raz (r) y

    de hijos izquierdo (i) y derecho (d), consiste en formar

    un nuevo rbol cuya raz sea la raz del hijo derecho,

    como hijo derecho colocamos el hijo derecho de d

    (nuestro d) y como hijo izquierdo construimos un

    nuevo rbol que tendr como raz la raz del rbol (r),

    el hijo izquierdo de d ser el hijo derecho (i) y el hijo

    izquierdo ser el hijo izquierdo del rbol (i).

    Precondicin : Tiene que tener hijo derecho no vaco.

  • 25/08/2014

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin simple a la Izquierda

    NodoAVL* RotaSimpleIzq(NodoAVL* p) {

    Assert (p!=0);

    Assert(pHder()!=0);

    NodoAVL * q= pHder();

    pHder(qHizq());

    qHizq(p);

    qH(0); // Actualiza FE

    pH(0); // Actualiza FE

    return q;

    }

  • 25/08/2014 30

    Estructuras no lineales: rboles Equilibrados AVL

  • 25/08/2014 31

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin doble a la Derecha

    La Rotacin doble a la Derecha se utilizar cuando el

    sub-rbol izquierdo de un nodo sea 2 unidades ms

    alto que el derecho, es decir, cuando el FE= -2 y

    adems la raz del sub rbol izquierdo tenga un FE =1,

    es decir, cargado a la derecha.

    Se hace rotacin simple de Q a la izquierda y

    luego rotacin simple de P a la derecha.

  • 25/08/2014 32

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin doble a la Derecha

    La Rotacin doble a la Derecha son dos rotaciones

    simples, primero rotacin simple izquierda y luego

    rotacin simple derecha.

  • 25/08/2014 33

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin doble a la Izquierda

    La Rotacin doble a la Izquierda se utilizar cuando el

    sub-rbol Derecho de un nodo sea 2 unidades ms alto

    que el Izquierdo, es decir, cuando el FE= 2 y adems

    la raz del sub rbol derecho tenga un FE = -1, es

    decir, cargado a la Izquierda.

    Se hace rotacin simple de Q a la Derecha y

    luego rotacin simple de P a la Izquierda.

  • 25/08/2014 34

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin doble a la Izquierda

    La Rotacin doble a la Izquierda son dos rotaciones

    simples, primero rotacin simple derecha y luego

    rotacin simple izquierda.

  • 25/08/2014

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin doble a la Izquierda

    NodoAVL* RotadobleDI(NodoAVL* p) {

    Assert (p!=0);

    Assert(pHder()!=0 && pHder()Hizq()!=0);

    NodoAVL * q= pHder();

    NodoAVL * r= qHizq();

    pHder(rHizq());

    qHizq(rHder());

    rHizq(p);

    rHder(q);

    if (rH()==0){

    qH(0); pH(0); return r;

    }

    if (rH()==1){

    qH(0); pH(-1);}

    else{

    qH(1); pH(0);

    }

    rH(0);

    return r;

    }

  • 25/08/2014

    Estructuras no lineales: rboles Equilibrados AVL

    Rotacin simple a la Izquierda

  • 25/08/2014 37

    Estructuras no lineales: rboles Equilibrados AVL

    Insercin en un rbol AVL O(log n)

    1.- Buscar la posicin a insertar utilizando el

    algoritmo de ABB desde la raz hasta insertar la nueva

    hoja. O(log n)?

    2.- se regresa a la raz modificando la condicin del

    equilibrio por el camino (buscar pivote potencia nodo

    con +-1).

    3.-Si en el camino algn nodo cambia su condicin a

    +-2 entonces se rota en ese nodo pasando a tener una

    condicin de equilibrio 0 o 1.

  • 25/08/2014 38

    Estructuras no lineales: rboles Equilibrados AVL

    Insercin en un rbol AVL

    Si en el camino algn nodo cambia su condicin a +-2

    entonces se rota en ese nodo pasando a tener una

    condicin de equilibrio 0 o 1.

    Si el equilibrio del pivote es:

    +2 y el equilibrio del hijo es +1: R simple izquierda.

    +2 y el equilibrio del hijo es -1: R doble ID

    -2 y el equilibrio del hijo es -1: R simple derecha.

    -2 y el equilibrio del hijo es +1: R doble DI.

    Mtodo de insercin

  • 25/08/2014 39

    Estructuras no lineales: rboles Equilibrados AVL

  • 25/08/2014 40

    Estructuras no lineales: rboles Equilibrados AVL

  • 25/08/2014 41

    Estructuras no lineales: rboles Equilibrados AVL

    Eliminar 42

  • 25/08/2014 42

    Estructuras no lineales: rboles Equilibrados AVL

    Eliminar 42

  • 25/08/2014 43

    Estructuras no lineales: rboles Equilibrados AVL

    Eliminar 42

  • 25/08/2014 44

    Estructuras no lineales: rboles Equilibrados AVL

    Eliminar 21

  • 25/08/2014 45

    Estructuras no lineales: rboles Equilibrados AVL

    Eliminar 21

  • 25/08/2014 46

    Estructuras no lineales: rboles Equilibrados AVL

    Eliminar 21

  • 25/08/2014 47

    Estructuras no lineales: rboles Equilibrados AVL

    Eliminar en un rbol AVL

    Al eliminar un nodo y regresar por el camino de

    bsqueda el factor de equilibrio:

    Disminuye en 1 si la eliminacin se hizo por la rama derecha.

    Incrementa en 1 si la eliminacin se hizo por la rama izquierda.

  • 25/08/2014 48

    Estructuras no lineales: rboles Equilibrados AVL

  • 25/08/2014 49

    Estructuras no lineales: rboles Equilibrados AVL

  • 25/08/2014 50

    Estructuras no lineales: rboles Equilibrados AVL

    Eliminar en un rbol AVL

    Se utiliza una variable hh que indica que se ha eliminado un nodo o que el rbol ha perdido altura al reestructurar (rotar) el rbol.

    Es necesario dos rutinas de supresin

    Equilibrar1: Cuando la altura de la rama izquierda ha disminuido.

    Equilibrar2: Cuando la altura de la rama derecha ha disminuido.

  • 25/08/2014 51

    Estructuras no lineales: rboles Equilibrados AVL

    int Equilibrar1(NodoAVL * p; int hh){

    NodoAVL * q;

    NodoAVL * r;

    // Disminuye la rama izquierda

    if (p H()==-1)

    p H(0);

    else

    {if (p H()==0){

    p H(1);

    hh=0;}

    else { q=p Hder(); if (q H()>=0){ if (q H()==0) hh=0; // no disminuye de nuevo la altura r=RotaSimpleI(N);} else r=RotaDobleDI(N);} }

  • 25/08/2014 52

    Estructuras no lineales: rboles Equilibrados AVL

    int Equilibrar2(NodoAVL * p; int hh){

    NodoAVL * q;

    NodoAVL * r;

    // Disminuye la rama derecha

    if (p H()==1)

    p H(0);

    else

    {if (p H()==0){

    p H(-1);

    hh=0;}

    else { q=p Hizq(); if (q H()

  • 25/08/2014 53

    Estructuras no lineales: rboles Equilibrados AVL

    Mtodo eliminar elemento en rbol AVL

  • 25/08/2014 54

    Estructuras no lineales: rboles Equilibrados AVL

    Creacin , Recorridos , rotaciones y eliminacin de un nodo.

    http://c.conclase.net/edd/?cap=008