Lider zambrano 4to s

66

description

Este es un conjunto de diapositivas resueltas con temas de la materia de estructuras de datos..Espero que pueda ayudar a algunos..Saludos..

Transcript of Lider zambrano 4to s

Page 1: Lider zambrano 4to s
Page 2: Lider zambrano 4to s

Especificación informal del Árbol BinarioEspecificación informal del Árbol Binario  

ArbolBinario tiene las siguientes operaciones crea, vacio, raiz, padre, hijoIzquierdo, hijoDerecho, info, insertaIzquierdo, insertaDerecho, suprimeIzquierdo, suprimeDerecho, modifica, nodoNulo. 

DescripcionDescripcion:

Los objetos de la clase CArbolB son arboles binarios donde cada nodo  contiene un dato  del tipo Cobjeto. Las los nodos en el árbol son del tipo CnodoArb. Los árboles son mutables: insertaIzquierdo, insertaDerecho, suprimeIzqquierdo, suprimeDerecho y modifica añaden, eliminan y modifican respectivamente elementos de un árbol.

 

Page 3: Lider zambrano 4to s

OPERACIONESOPERACIONES: crea() devuelve (A:CArbolB)

efecto: Devuelve el árbol vacío A.

vacio(A: CArbolB) devuelve (booleano) efecto: Devuelve cierto si A es el árbol vacío, y falso en

caso contrario.

raiz(A: CArbolB) devuelve (CnodoArb) efecto: Devuelve la referencia del nodo raíz en el árbol A.

Si el árbol A está vacío, devuelve nulo  

padre(A: CArbolB; P: CnodoArb) devuelve (CnodoArb) requerimientos: El árbol A es no vacío. El nodo P es no

nulo. efecto: Devuelve la referencia del nodo padre del nodo P

en el árbol A. Si P es la raiz, devuelve nulo.

hijoIzquierdo(A: CArbolB; P: CnodoArb) devuelve (CnodoArb)} requerimientos: El árbol A es no vacío. El nodo P es no

nulo. efecto: Devuelve la referencia del nodo hijo izquierdo del

nodo P en el árbol A. Si el nodo P no tiene hijo izquierdo, devuelve nulo.

Page 4: Lider zambrano 4to s

OPERACIONESOPERACIONES:

hijoDerecho(A: CArbolB; P: CnodoArb) devuelve (CnodoArb) requerimientos: El árbol A es no vacío. El nodo P es no

nulo. efecto: Devuelve la referencia del nodo hijo derecho

del nodo P en el árbol A. Si el nodo P no tiene hijo derecho, devuelve nulo

info(A: CArbolB; P: CnodoArb) devuelve (E: Cobjeto) requerimientos: El árbol A es no vacío. El nodo P es no

nulo. efecto: Devuelve en E el contenido del nodo P en el

árbol A.

insertaIzquierdo(A: CArbolB; P: CnodoArb; E: Cobjeto) requerimientos: Si el árbol A es no vacío, entonces el

nodo P es no nulo y el nodo hijo izquierdo de P es nulo modifica: A. efecto: Añade un nodo, con contenido E, como hijo

izquierdo del nodo P en el árbol A. Si el árbol A es vacío, entonces añade un nodo con contenido E como raíz del árbol A.

Page 5: Lider zambrano 4to s

OPERACIONESOPERACIONES insertaDerecho(A: CArbolB; P: CnodoArb; E:

Cobjeto) requerimientos: El árbol A es no vacío. El nodo P

es no nulo. El nodo hijo derecho de P es nulo modifica: A. efecto: Añade un nodo, con contenido E, como

hijo derecho del nodo P en el árbol A.

suprimeIzquierdo(A: CArbolB; P: CnodoArb) requerimientos: El árbol A es no vacío. El nodo P

es no nulo. modifica: A. efecto: Suprime el hijo izquierdo del nodo P en el

árbol A y todos sus descendientes.

suprimeDerecho(A: CArbolB; P: CnodoArb) requerimientos: El árbol A es no vacío. El nodo P

es no nulo. modifica: A. efecto: Suprime el hijo derecho del nodo P en el

árbol A y todos sus descendientes.

Page 6: Lider zambrano 4to s

OPERACIONESOPERACIONES

modifica(A: CArbolB; P: CnodoArb; E: Cobjeto) requerimientos: El árbol A es no vacío. El nodo P es no

nulo. modifica: A. efecto: Modifica el contenido del nodo P en el árbol A,

cambiándolo por el nuevo contenido E.   nodoNulo(P: CnodoArb) devuelve (booleano)

efecto: Devuelve cierto si P es nulo, y falso en caso contrario.

Page 7: Lider zambrano 4to s

Como ejemplos de uso de árboles binarios veremos los esquemas de recorrido para estos. Para árboles binarios, se definen los recorridos en preorden, inorden y postorden de la siguiente forma:

Preorden:Preorden:

Si el árbol binario es vacío, entonces la lista vacía es el listado de los nodos del árbol binario en preorden.

Si el árbol binario no es vacío, el listado en preorden de sus nodos está formado, primero, por la raíz del árbol, seguido por los nodos del subárbol izquierdo en preorden, y finalmente, por los nodos del subárbol derecho en preorden.

Page 8: Lider zambrano 4to s

InordenInorden::

Si el árbol binario es vacío, entonces la lista vacía es el listado de los nodos del árbol binario en inorden.

Si el árbol binario no es vacío, el listado en inorden de sus nodos está formado, primero, por los nodos del subárbol izquierdo en inorden, seguido por la raíz del árbol, y finalmente, por los nodos del subárbol derecho en inorden.

PostordenPostorden::

Si el árbol binario es vacío, entonces la lista vacía es el listado de los nodos del árbol binario en postorden.

Si el árbol binario no es vacío, el listado en postorden de sus nodos está formado, primero, por los nodos del subárbol izquierdo en postorden, luego por los nodos del subárbol derecho en postorden, y finalmente, por la raíz del árbol.

Page 9: Lider zambrano 4to s

Un Un árbol binario de búsquedaárbol binario de búsqueda es un árbol binario es un árbol binario formado por elementos en los cuales se asume un formado por elementos en los cuales se asume un orden lineal, y éstos se organizan en el árbol de la orden lineal, y éstos se organizan en el árbol de la forma: forma: todos los elementos almacenados en el subárbol todos los elementos almacenados en el subárbol

izquierdo de cualquier nodo sonizquierdo de cualquier nodo son menores que el menores que el elemento almacenado en dicho nodoelemento almacenado en dicho nodo

todos los elementos almacenados en el subárbol todos los elementos almacenados en el subárbol derecho de cualquier nodo son mayores que el derecho de cualquier nodo son mayores que el elemento almacenado en ese nodo elemento almacenado en ese nodo

Los árboles binarios de búsqueda se utilizan Los árboles binarios de búsqueda se utilizan típicamente como estructura de datos para la típicamente como estructura de datos para la representación de conjuntos con operacionesrepresentación de conjuntos con operaciones:: iinsertanserta,, para insertar un elemento dado en un conjuntopara insertar un elemento dado en un conjunto ssuprimeuprime,, para suprimir un elemento determinado de un para suprimir un elemento determinado de un

conjuntoconjunto mmiembroiembro,, para saber si un elemento dado pertenece o para saber si un elemento dado pertenece o

no a un conjunto.no a un conjunto.

Page 10: Lider zambrano 4to s

Todas estas operaciones pueden realizarse en un Todas estas operaciones pueden realizarse en un tiempo de ejecución promedio tiempo de ejecución promedio O(O(loglogn)n) para un para un conjunto conjunto de de nn elementos. elementos.

Otras posibles operaciones que puede realizarse con Otras posibles operaciones que puede realizarse con el mismo tiempo de ejecución promedio usando el mismo tiempo de ejecución promedio usando árboles binarios de búsqueda sonárboles binarios de búsqueda son:: mminin,, que devuelve el elemento mínimo de un árbol que devuelve el elemento mínimo de un árbol suprime_minsuprime_min,, que elimina el elemento mínimo de un árbol que elimina el elemento mínimo de un árbol mmaxax,, que devuelve el elemento máximo de un árbol que devuelve el elemento máximo de un árbol suprime_maxsuprime_max,, que elimina el elemento máximo de un que elimina el elemento máximo de un

árbolárbol

Page 11: Lider zambrano 4to s

Especificación InformalEspecificación Informal

ArbolBinarioBusquedaArbolBinarioBusqueda tienetiene operaciones crea, destruye, operaciones crea, destruye, vacio, inserta, suprime, miembro.vacio, inserta, suprime, miembro.

Descripción:Descripción: Los valores ArbolBinarioBusqueda son árboles binarios Los valores ArbolBinarioBusqueda son árboles binarios

de búsqueda de elementos del tipo de búsqueda de elementos del tipo CobjetoCobjeto.  Los árboles .  Los árboles binarios de búsqueda son mutables: inserta y suprime binarios de búsqueda son mutables: inserta y suprime aaññaden y eliminan elementos en el árbol aden y eliminan elementos en el árbol respectivamente.respectivamente.

OOperacionesperaciones crea() devuelve (A:ArbolBinarioBusqueda)crea() devuelve (A:ArbolBinarioBusqueda)

efecto: Devuelve el árbefecto: Devuelve el árbool binario de búsqueda vacl binario de búsqueda vacíío A. o A.

Page 12: Lider zambrano 4to s

OOperacionesperaciones

vacio(A:ArbolBinarioBusqueda) devuelve (booleano)vacio(A:ArbolBinarioBusqueda) devuelve (booleano) efecto: Devuelve cierto si A es el árbol vacefecto: Devuelve cierto si A es el árbol vacíío, yo, y falso en caso falso en caso

contrario.contrario.

inserta(A:ArbolBinarioBusqueda; E:inserta(A:ArbolBinarioBusqueda; E:CobjetoCobjeto)) modifica: A.modifica: A. eefecto: Añade el elemento E al árbol binario de búsqueda A.fecto: Añade el elemento E al árbol binario de búsqueda A.

suprime(A:ArbolBinarioBusqueda; E: suprime(A:ArbolBinarioBusqueda; E: CobjetoCobjeto)) modifica: A.modifica: A. efecto: Suprime el elemento E, si existe, del árbol binario de efecto: Suprime el elemento E, si existe, del árbol binario de

búsquedabúsqueda A.A.

miembro(A:ArbolBinarioBusqueda; E: miembro(A:ArbolBinarioBusqueda; E: CobjetoCobjeto) devuelve ) devuelve (booleano)(booleano) efecto: Devuelve cierto si E es un elemento del árbol binario efecto: Devuelve cierto si E es un elemento del árbol binario

de búsqueda A, y falso en caso contrario.de búsqueda A, y falso en caso contrario.

Page 13: Lider zambrano 4to s
Page 14: Lider zambrano 4to s

Con el objeto de mejorar el rendimiento en la búsqueda surgen los árboles balanceados. La idea central de estos es la de realizar reacomodó o balanceos después de inserciones o eliminaciones de elementos. Estos árboles también nombrados recientemente AVL en honor a sus inventores, dos matemáticos rusos Adelson-Velskii y Landis.

Page 15: Lider zambrano 4to s
Page 16: Lider zambrano 4to s

El Factor de Equilibrio (FE) o de Balance (FB) de un nodo se define como la altura del SAD menos la altura del SAI correspondiente. El Factor de Equilibrio de cada nodo en un árbol balanceado será –1, 1 ó 0. Si FE llegara a tomar los valores de –2 ó 2, entonces debería reestructurarse el árbol.

Factor de Equilibrio

Page 17: Lider zambrano 4to s

Arbol Balanceado

Page 18: Lider zambrano 4to s

Reestructuración de Arboles AVL Reestructurar un árbol balanceado significa rotar los nodos del mismo. La rotación puede ser simple o compuesta. En el primer tipo de rotación se involucran dos nodos y en el segundo, se afectan tres. Si la rotación es simple puede realizarse por las ramas derechas (RDD: Rotación Derecha Derecha) o por las ramas izquierdas (RII: Rotación Izquierda Izquierda). Si la rotación es compuesta puede realizarse por las ramas derecha e izquierda (RDI: Rotación Derecha Izquierda) o por las ramas izquierda y derecha (RID: Rotación Izquierda Derecha).

Page 19: Lider zambrano 4to s
Page 20: Lider zambrano 4to s
Page 21: Lider zambrano 4to s

CASO 1. El SAI y el SAD del árbol balanceado tienen la misma altura (hSAD = hSAI):

a) Si se inserta un elemento en SAI entonces hSAD será menor que hSAIb) Si se inserta un elemento en SAD entonces hSAD será mayor que hSAI

Ya sea para a) o para b), no se viola el criterio de equilibrio o balance del árbol.

B C

A

B C

A

B C

A

CASO 1 1.b1.a

DD

Page 22: Lider zambrano 4to s

CASO 2. El SAI y el SAD del árbol balanceado tienen altura diferente (hSAD ≠ hSAI):

CASO 2.1. Si hSAD > hSAI

a) Si se inserta un elemento en SAI entonces hSAD será igual a hSAI Las ramas tienen la misma altura por lo que se mejora el equilibriob) Si se inserta un elemento en SAD entonces el árbol debe ser reestructurado Las ramas están desequilibradas por lo que se requiere reestructuración

B C

A

D

B C

A

DE

B C

A

DE

CASO 2.1. 2.1.a. 2.1.b.

F

Page 23: Lider zambrano 4to s

CASO 2.2. Si hSAD < hSAIa) Si se inserta un elemento en SAI entonces el árbol debe ser reestructurado Las ramas están desequilibradas por lo que se requiere reestructuraciónb) Si se inserta un elemento en SAD entonces hSAD será igual a hSAI Las ramas tienen la misma altura por lo que se mejora el equilibrio

Para poder determinar si un árbol está balanceado debe calcularse el FE de cada nodo del árbol.

B C

A

D

CASO 2.2.

B C

A

D

2.2.a.

E

B C

A

ED

2.2.b.

Page 24: Lider zambrano 4to s

El proceso de inserción en un árbol balanceado consta de los siguientes pasos:

1) Primero debe seguirse el camino de búsqueda del árbol, hasta localizar el lugar donde hay que insertar el elemento.

2) Se calcula su FE, que será cero (pues el elemento recién insertado posee SAI y SAD vacíos). Luego, se regresa por el camino de búsqueda calculando el FE de todos los demás nodos que componen el árbol. Si en alguno de los nodos se viola el criterio de equilibrio entonces debe reestructurarse el árbol. El proceso termina al llegar a la raíz del árbol, o cuando se realiza la reestructuración del mismo, en cuyo caso no es necesario determinar el FE de los nodos restantes.

Page 25: Lider zambrano 4to s

Ejemplo de Inserción de Nodos con Árboles AVL

Se insertara la siguiente secuencia: 65, 50, 23, 70, 82, 68 y 39

Page 26: Lider zambrano 4to s
Page 27: Lider zambrano 4to s
Page 28: Lider zambrano 4to s

//NODO es de tipo puntero, BO es booleano indica que el árbol a crecido (falso), INFOR es de tipo //entero. OTRO, NODO1, NODO2 son variables auxiliares de tipo puntero

insertaBalanceado(NODO, BO, INFOR){

1. Si NODO≠null

entonces

1.1. Si INFOR < NODO^.INFO

entonces:

1.1.1. Si BO = VERDADERO

entonces:

1.1.1.1. Si NODO^.FE

= 1: Hacer NODO^.FE=0 y BO=falso

=0 : Hacer NODO^.FE = -1

= -1 : Hacer NODO1 = NODO^.IZQ

//{Restructuración del árbol}

1.1.1.1.1. Si NODO1^.FE ≤ 0

entonces: //{Rotacion II} Hacer

NODO^.IZQ =NODO^.DER

NODO1^.DER = NODO

NODO^.FE = 0 y NODO = NODO1

//{ Termina la rotacion II}

Page 29: Lider zambrano 4to s

si no: Hacer NODO2 = NODO1^.DER

NODO^.IZQ = NODO2^.DER

NODO2^.DER = NODO

NODO1^.DER = NODO2^.IZQ

NODO2^.IZQ =NODO1

1.1.1.1.2.A. Si NODO2^.FE = -1

entonces: Hacer NODO^.FE =1

si no: Hacer NODO^.FE = 0

1.1.1.1.2.B. //{Fin del paso 1.1.1.1.1.A.}

1.1.1.1.2.C. Si NODO2^.FE =1

entonces: Hacer NODO1^.FE = -1

si no : Hacer NODO1^.FE = 0

1.1.1.1.2.D // Fin del paso 1.1.1.1.1.C.

Hacer: NODO = NODO2 //Termina rotacionID

1.1.1.1.2. // Fin del paso 1.1.1.1.1

Hacer NODO^.FE = 0 y BO = falso

1.1.1.2. // Fin del paso 1.1.1.1.

1.1.2. //Fin del paso 1.1.1.

SI NO :

Page 30: Lider zambrano 4to s

1.1.3. Si INFOR > NODO^.INFO

entonces:

Regresar a InsertarBalanceado con NODO^.DER, BO, e INFOR

1.1.3.1. Si BO = VERDADERO

entonces:

1.1.3.1.1. Si NODO^.FE

= -1: Hacer NODO^.FE = 0 y BO= FALSO

= 0: Hacer NODO^.FE =1

= 1 : Hacer NODO1= NODO^.DER

// restructuracion del arbol

1.1.3.1.1.1. Si NODO^.FE ≥ 0

entonces: //rotacio DD

Hacer:

NODO^.DER = NODO^.IZQ

NODO^.IZQ = NODO

NODO^.FE = 0 y NODO = NODO1

// termina rotacionDI

Si no: //Rotacion DI

Hacer: NODO2 = NODO1^.IZQ

Page 31: Lider zambrano 4to s

NODO^.DER = NODO2^.IZQ

NODO2^.IZQ = NODO

NODO1^.IZQ = NODO2^.DER

NODO2^.DER = NODO1

1.1.3.1.1.1.A. Si NODO2^.FE = 1

entonces: Hacer NODO^.FE = -1

si no: Hacer NODO^.FE = 0

1.1.3.1.1.1.B // fin del paso 1.1.3.1.1.1.A.

1.1.3.1.1.1C. Si NODO2^.FE = -1

entonces: Hacer NODO1^.FE =1

Si no: Hacer NODO1^.FE = 0

1.1.3.1.1.1.D. //Fin del paso 1.1.3.1.1.1.C.

1.1.3.1.1.2. // fin del paso 1.1.3.1.1.1.

Hacer NODO^.FE = 0 y BO=falso

1.1.3.1.2. // Fin del paso 1.1.3.1.1.

1.1.3.2. // Fin del paso 1.1.3.1.

Si No:

Escribir “ El nodo ya se encuentra en el arbol”

1.1.4 // Fin del paso 1.1.3

Page 32: Lider zambrano 4to s

1.1.4. // Fin del paso 1.1.3.

1.2. //Fin del paso 1.1.

Si no:

CREAR NODO

HACER NODO^.INFO =INFOR

NODO^.IZQ = NULL

NODO^.DER = NULL

NODO^.FE = 0

BO = VERDADERO

2. // Fin del paso 1

Page 33: Lider zambrano 4to s
Page 34: Lider zambrano 4to s
Page 35: Lider zambrano 4to s

PASOS A SEGUIR PARA ELIMINAR UN NODO, EN UN ARBOL BALANCEADO.

Localizar su posición en el árbol. Eliminarlo siguiendo los criterios

establecidos previamente. Regresar por el camino de búsqueda

calculando el FE de los nodos visitados. Si en alguno de los nodos se viola el criterio

de equilibrio, entonces debe reestructurarse el árbol.

El proceso concluye una vez que se llega hasta la raíz del árbol.

Page 36: Lider zambrano 4to s
Page 37: Lider zambrano 4to s
Page 38: Lider zambrano 4to s
Page 39: Lider zambrano 4to s
Page 40: Lider zambrano 4to s
Page 41: Lider zambrano 4to s
Page 42: Lider zambrano 4to s
Page 43: Lider zambrano 4to s
Page 44: Lider zambrano 4to s
Page 45: Lider zambrano 4to s
Page 46: Lider zambrano 4to s

Para hablar sobre Arboles AVL previamente a de haberse conocido el concepto de Árbol Binario de Búsqueda.

El problema de estos tipos de estructuras es pueden producirse Arboles degenerados o parcialmente degenerados, por lo que la búsqueda de un elemento puede llegar a ser de un orden de 0(log n) y en el peor caso llegar a tener un orden de 0(n).

Page 47: Lider zambrano 4to s

Gracias a los científicos Adelson – Velsky y Landis, quedó resuelto este problema ya que idearon los árboles AVL, nombrados de esta forma en su honor, o balanceados en altura.

Page 48: Lider zambrano 4to s

Es un árbol binario de búsqueda equilibrado.

Un árbol AVL es un ABB en donde las alturas de los hijos izquierdo y derecho solo pueden diferir a lo máximo en uno.

Page 49: Lider zambrano 4to s

-Pero si se le agregar 3

Page 50: Lider zambrano 4to s

- Quedaría así:

Page 51: Lider zambrano 4to s

El inconveniente que presentan estos árboles, es que al realizar modificaciones sobre él (insertar o borrar) podemos perder el equilibrio, por lo que tendremos que proceder al equilibrado del árbol mediante rotaciones.

Page 52: Lider zambrano 4to s

Los árboles AVL comparten las mismas operaciones básicas que el ABB,pero precedido o seguido por una o más de las llamadas "rotaciones AVL".

Page 53: Lider zambrano 4to s

Puesto que las inserciones involucran a un único nodo nuevo, los desequilibrios siempre significan que en uno (o mas) de los nodos del árbol se produce una diferencia de altura entre su subárbol izquierdo y su subárbol derecho que es 2 o −2. Así pues, después de insertar en el árbol, la detección del desequilibrio es fácil, basta con examinar el campo balance. Si el balance es −2, es que hemos insertado un nuevo nodo en el subárbol izquierdo, y si es 2, la inserción tuvo lugar en el subárbol derecho.

Page 54: Lider zambrano 4to s

Los nodos tienen un Factor de Balance (FB) que está entre –1 y 1.

FB=Altura del subárbol derecho – Altura del subárbol izquierdo

FB = 0 alturas de subárbols iguales.

FB =1 subárbol derecho más grande que izquierdo.

FB = -1 subárbol izquierdo más grande que derecho

Para realizar la inserción, se realiza igual que en un árbol binario y después se verifica el balanceo.

Page 55: Lider zambrano 4to s

13

21

10 18 2540

33

26

Al agregar el valor 26 el árbol cumple con las reglas de un AVL (el Factor de Balanceo de todos los nodos es 0, 1 ó –1) .

13

21

10 18 25

40

33

26

262627

Al agregar el valor 27 el árbol se DESBALANCEÓ (el Factor de Balanceo para el nodo con el valor 25 ahora es 2). Se requiere una ROTACIÓN.

Page 56: Lider zambrano 4to s

El reequilibrado se produce de abajo hacia arriba sobre los nodos en los que se produce el desequilibrio. Pueden darse dos casos: rotación simple o rotación doble; a su vez ambos casos pueden ser hacia la derecha o hacia la izquierda.

Page 57: Lider zambrano 4to s

5

3

2

A

C

B

D

Pívot

Raíz

Realizar la rotación a la izquierda

Baja

Sube

NODO PIVOTE: Es el nodo ancestro más cercano del nodo recién insertado cuyo Factor de Balanceo es diferente de cero.

Page 58: Lider zambrano 4to s

5

3

2

AC BD

Árbol balanceado

Page 59: Lider zambrano 4to s

3

5A

C

B

D

Raíz

7

Pívot

Realizar la rotación a la derecha

Baja

Sube

Page 60: Lider zambrano 4to s

3

5

A CB D

7 Árbol balanceado

Page 61: Lider zambrano 4to s

4

5

3

A

C

B

D

Pívot

Raíz

2 Rotaciones simples

Baja

Sube

Page 62: Lider zambrano 4to s

4

5

3

A

CB

D

Pívot

Raíz

Baja

Sube

Page 63: Lider zambrano 4to s

4

53

ACB D

Page 64: Lider zambrano 4to s

4

C

B

D

Pívot

Raíz

5

3

A

Baja

Sube

Page 65: Lider zambrano 4to s

4

5

3

A

C B

D

Pívot

RaízBaja

Sube

Page 66: Lider zambrano 4to s

4

53

A C BD