55
1 Tema 3 Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva 2005 -2006 El TAD Árbol Objetivos Presentar el árbol como estructura de datos jerárquica Estudiar diferentes variantes de árboles, tanto en su especificación como en su implementación Contenidos 3.1 Conceptos, definiciones y terminología básica 3.2 Especificación e implementación del árbol binario 3.3 Recorridos sobre árboles binarios 3.4 Árboles binarios de búsqueda 3.5 Árboles equilibrados 3.6 Montículos y colas de prioridad 3.7 Árboles generales 3.8 Árboles multicamino de búsqueda

Objetivos - UTEM

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Objetivos - UTEM

1

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

El TAD Árbol

Objetivos

Presentar el árbol como estructura de datos jerárquica

Estudiar diferentes variantes de árboles, tanto en su especificación como en su implementación

Contenidos

3.1 Conceptos, definiciones y terminología básica

3.2 Especificación e implementación del árbol binario

3.3 Recorridos sobre árboles binarios

3.4 Árboles binarios de búsqueda

3.5 Árboles equilibrados

3.6 Montículos y colas de prioridad

3.7 Árboles generales

3.8 Árboles multicamino de búsqueda

Page 2: Objetivos - UTEM

2

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Duración

8 clases (12 h)

Bibliografía

Data Structures and Algorithms in C++Autor: Michael T. Goodrich, Roberto Tamassia, David M. MountEditorial: John Wiley & Sons, Inc.Año: 2004Págs. 253 - 301, 411 - 475

Estructuras de datos y métodos algorítmicosAutor: Narciso Martí Oliet y otrosEditorial : Prentice-Hall, 2004Págs. 147 - 230

Estructuras de datos: especificación, diseño e implementaciónAutor: Xavier Franch GutiérrezEditorial : Ediciones UPC, 1999Págs. 219 - 303

El TAD Árbol

Page 3: Objetivos - UTEM

3

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

3.1 Conceptos, definiciones y terminología básica

Los árboles son estructuras que organizan sus elementos, denominados nodos, formando jerarquías. De entre estos nodos existe uno especial denominado raíz, situado en la cúspide de la jerarquía

Existe una relación (de paternidad entre los nodos) que hace que la estructura sea jerárquica frente a la estructura lineal

El uso de los árboles está muy extendido en programación. Algunos ejemplos pueden ser:

estructurar los directorios y archivos en los sistemas operativos

representar la estructura de las fórmulas matemáticas

organizar la información en los SGBD

representar la estructura sintáctica de un programa fuente en los compiladores

representar sistemas de clasificación

El TAD Árbol

Page 4: Objetivos - UTEM

4

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

La definición recursiva de árbol es la siguiente:

Un árbol n-ario (con n ≥ 1) es un conjunto no vacío de elementos o nodos del mismo tipo, tal que:

es un único nodo,

o bien está formado por un nodo raíz y m (0 ≤ m ≤ n) subconjuntos disjuntos, denominados subárboles, cada uno de los cuales es a su vez un árbol n-ario

Un árbol con raíz x y subárboles A1, …, Am se representa de la siguiente forma:

Am

x

A1... Am

x

A1...

El TAD Árbol

Page 5: Objetivos - UTEM

5

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Podemos clasificar los árboles atendiendo a diferentes criterios:

Cuando existe una relación de orden total en el conjunto de los subárboles de

un árbol, el árbol se llama ordenado (será el que utilizaremos)

Si no existe limitación para el número de hijos que pueda tener un nodo, el árbol

se denomina general. Por el contrario, si existe un número fijo n que limita el

número de hijos de un nodo, el árbol se denomina n-ario

Cuando los nodos de un árbol contienen información (caso más habitual), el

árbol se denomina etiquetado

El TAD Árbol

Page 6: Objetivos - UTEM

6

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

A

FE

DB

H

G

C

I J LK

M

A

FE

DB

H

G

C

I J LK

M

• Nodo: Cada posición dentro del árbol junto con la información asociada

• Si existe una arista (rama) dirigida del nodo nal nodo m, entonces n es el padre de m y mes un hijo de n

• Los hijos del mismo padre se denominan hermanos

• Todos los nodos de un árbol menos uno, denominado nodo raíz, tienen un único padre

• Una hoja de un árbol es un nodo que no tiene hijos. El resto de los nodos se denominan interiores o internos

Terminología Básica

El TAD Árbol

Page 7: Objetivos - UTEM

7

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

A

FE

DB

H

G

C

I J LK

M

A

FE

DB

H

G

C

I J LK

M

• Se denomina camino del nodo n1 al nodo nk a la secuencia de nodos de un árbol n1, n2, …, nk, de tal forma que ni es el padre de ni+1 (1 ≤ i < k)

• La longitud de un camino es el número de nodos del camino menos 1. Por convenio, decimos que existe un camino de longitud 0 de un nodo a sí mismo

• Si existe un camino desde un nodo n1hasta un nodo n2, se dice que n1 es antecesor de n2, y n2 es descendiente de n1

• El padre de un subárbol o nodo es su primer antecesor propio. Los hijos de un subárbol o nodo son sus primeros descendientes propios

Terminología Básica

El TAD Árbol

Page 8: Objetivos - UTEM

8

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

A

FE

DB

H

G

C

I J LK

M

A

FE

DB

H

G

C

I J LK

M

• La altura de un nodo en un árbol es la longitud del camino desde dicho nodo a la hoja más lejana que sea alcanzable desde él, más 1.

• La altura de un árbol es la altura del nodo raíz.El árbol vacío se considera con altura 0

• La profundidad o nivel de un nodo en un árbol es la longitud del único camino existente desde el nodo raíz hasta dicho nodo

• Por definición, el número de niveles de un árbol se define como el nivel de la hoja más profunda más 1. En el nivel 0 sólo está el nodo raíz. El número de niveles coincide con la altura del árbol

• El grado de un árbol n-ario es el número máximo de hijos que pueden tener sus subárboles

• El número máximo de nodos en el niveli-ésimo de un árbol de grado n es ni

Terminología Básica

El TAD Árbol

Page 9: Objetivos - UTEM

9

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árbol binario

3.2 Especificación e implementación del árbol binario

Un árbol binario ordenado es un árbol en el que cada nodo puede tener a losumo dos hijos

Es un conjunto de nodos del mismo tipo que, o bien es el conjunto vacío, o está formado por un nodo raíz enlazado a dos árboles binarios disjuntos denominados subárbol izquierdo y subárbol derecho

t

fh

km

d

Page 10: Objetivos - UTEM

10

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Tipos de árboles binarios

Un árbol binario de altura h se llama completo si tiene todas sus hojas a nivel h y todos sus nodos interiores tienen dos hijos no vacíos

Un árbol binario de altura h se llama semicompleto si los nodos de nivel h y h-1son los únicos de grado cero o uno, de forma que las hojas del último nivel ocupan las posiciones más a la izquierda de dicho nivel

50

4010

8020

9974

358 60

50

4010

8020

9974

358 60

Árbol binario

Page 11: Objetivos - UTEM

11

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Especificación Algebraica

espec arbolesBinariosusa booleanos, enterosparámetro formal

género elementofpfgénero arbinoperaciones

∆: arbin_ < _ , _ >: elemento arbin arbin arbinparcial raíz: arbin elementoparcial subIzq, subDer: arbin arbinvacío?: arbin booleanoaltura: arbin entero

dominios de definición iz, de: arbin; e: elementoraíz (e<iz, de>)subIzq (e<iz, de>)subDer (e<iz, de>)

Árbol binario

Page 12: Objetivos - UTEM

12

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

ecuaciones iz, de: arbin; e: elementoraíz (e<iz, de>) = subIzq (e<iz, de>) = subDer (e<iz, de>) = vacío? (∆) =vacío? (e<iz, de>) =altura (∆) = altura (e<iz, de>) =

fespec

Clasificación de las operaciones:

Gen (arbin) =

Mod (arbin) =

Obs (arbin) =

Árbol binario

Page 13: Objetivos - UTEM

13

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Implementación del árbol binario

La clase NodoB representa cada uno de los nodos de un árbol binario:

template <typename T>class NodoB {

typedef NodoB<T>* PtrNodoB;public:

NodoB(const T& objeto);NodoB(const T& objeto, PtrNodoB nizq, PtrNodoB nder);NodoB(const NodoB& n);const T& getObj() const;PtrNodoB getIzq() const;PtrNodoB getDer() const;void setObj(const T& objeto);void setIzq(PtrNodoB p);void setDer(PtrNodoB p);

private:T obj;PtrNodoB izq, der;

};

Árbol binario

obj

derizq derizq

Page 14: Objetivos - UTEM

14

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

template <typename T>class Arbin {

typedef NodoB<T>* PtrNodoB;public:

Arbin();Arbin(const T& objeto, const Arbin& ai, const Arbin& ad);Arbin(const Arbin& a);Arbin& operator=(const Arbin& a);const T& getRaiz() const throw(ArbolVacioExcepcion);const Arbin& subIzq() const throw(ArbolVacioExcepcion);const Arbin& subDer() const throw(ArbolVacioExcepcion);bool esVacio() const; int altura() const;

private:PtrNodoB raiz;Arbin(PtrNodoB p);

} ;

raíz

Árbol binario

Page 15: Objetivos - UTEM

15

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árbol binario

const Arbin<T>& subDer() constthrow(ArbolVacioExcepcion)

iniciosi esVacio() entonces

lanzar ArbolVacioExcepcion()fsidevolver *nuevo Arbin( raiz->getDer() )

fin

Arbin(const Arbin& a)var

Arbin ci, cdfvarinicio

si a.esVacio() entoncesraiz = NULO

sinoci = Arbin( a.subIzq() )cd = Arbin( a.subDer() )raiz = nuevo NodoB<T>( a.getRaiz(), ci.raiz, cd.raiz )

fsifin

Arbin(PtrNodoB p)inicio

raiz = pfin

Arbin(const T& objeto, const Arbin& ai, const Arbin& ad)inicio

raiz = nuevo NodoB<T>(objeto, ai.raiz, ad.raiz)fin

Page 16: Objetivos - UTEM

16

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Consideraciones sobre la implementación elegida

La implementación elegida se ajusta tanto a la definición recursiva de árbol como a la especificación algebraica propuesta

Sin embargo, deben tenerse en cuenta las siguientes consideraciones:

El constructor Arbin(const T&, const Arbin&, const Arbin&) no hace una copia de los árboles a partir de los cuales se construye, sino que comparte estructura con ellos

Las operaciones subIzq y subDer tampoco devuelven copias de los hijos izquierdo y derecho, respectivamente, sino subárboles que comparten memoria con el árbol original.

Si se desea evitar la utilización de alias el coste de ejecución de esas operaciones sería O(n) en lugar de O(1)

Por esa razón, no se ha incluido un método destructor: la destrucción de variables locales ⇒ podría afectar a otros árboles con los que compartieran estructura

Una alternativa consistiría en la implementación de una clase Iterador, con métodos para avanzar al hijo izquierdo o derecho. Véase Goodrich págs. 273-300

El TAD Árbol

Page 17: Objetivos - UTEM

17

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

3.3 Recorridos sobre árboles binarios

- En el caso de recorridos en profundidad sobre árboles binarios, podemos distinguir tres tipos. En cualquier caso, si el árbol es vacío no se hace nada, y si no tiene hijos, se visita únicamente la raíz.

PREORDEN

Se visita la raíz, y a continuación, se recorren en preorden primero el subárbol izquierdo y luego el subárbol derecho

POSTORDEN

Se recorren en postorden primero el subárbol izquierdo y luego el subárbol derecho, y a continuación se visita la raíz

INORDEN

Primero se recorre en inorden el subárbol izquierdo, luego se visita la raíz, y por último serecorre en inorden el subárbol derecho

Árbol binario

- En el recorrido en anchura, los nodos se visitan por niveles y dentro de cada nivel de izquierda a derecha, comenzando por el nivel 0.

Page 18: Objetivos - UTEM

18

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árbol binario

A

CB

D E

H

JI

GF

K

A

CB

D E

H

JI

GF

K

Recorrido en preorden:

Recorrido en inorden:

Recorrido en postorden:

Recorrido en anchura:

Page 19: Objetivos - UTEM

19

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

template <typename T>Lista<T> preOrden(const Arbin<T>& a)var

Lista<T> lfvarinicio

preOrden( a, l )devolver l

fin

template <typename T>void preOrden(const Arbin<T>& a, Lista<T>& l)inicio

si ¬ a.esVacio() entoncesl.añadirDch( a.getRaiz() )

preOrden( a.subIzq(), l )preOrden( a.subDer(), l )

fsifin

Árbol binario

Recorrido en preorden Llamada al procedimiento de recorrido en preorden

Page 20: Objetivos - UTEM

20

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árbol binario

template <typename T>void postOrden(const Arbin<T>& a, Lista<T>& l)inicio

si ¬ a.esVacio() entoncespostOrden( a.subIzq(), l )postOrden( a.subDer(), l )l.añadirDch( a.getRaiz() )

fsifin

template <typename T>void inOrden(const Arbin<T>& a, Lista<T>& l)inicio

si ¬ a.esVacio() entoncesinOrden( a.subIzq(), l )l.añadirDch( a.getRaiz() )inOrden( a.subDer(), l )

fsifin

template <typename T>void anchura(const Arbin<T>& a, Lista<T> & l)inicio Cola<Arbin<T> > c; Arbin<T> ac;

si ¬ a.esVacio() entoncesc.añadir(a);mientras (¬ c.esVacia()) hacer

ac = c.primero(); c.eliminar();l.añadirDch(ac.getRaiz() ); si ¬ ac.subIzq().esVacio() entonces c.añadir(ac.subIzq() ) fsisi ¬ ac.subDer().esVacio() entonces c.añadir(ac.subDer() ) fsi

fmientrasfsi

Fin

Page 21: Objetivos - UTEM

21

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles Binarios de Búsqueda

3.4 Árboles binarios de búsqueda (ABB)

Un ABB puede definirse cuando el tipo de los elementos posee una relación de orden total

Son árboles binarios en los que:

todos los valores de las claves del subárbol izquierdo son menores que el valor de la clave de la raíz

todos los valores de las claves del subárbol derecho son mayores que el valor de la clave de la raíz

esta propiedad se cumple en todos los nodos del árbol

Propiedad: el recorrido en “inorden” de un ABB, independientemente de su forma, obtiene los elementos ordenados según la relación de orden existente entre los nodos

Page 22: Objetivos - UTEM

22

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles Binarios de Búsqueda

Ejemplo de 2 árboles binarios con los mismos valores, pero con diferente estructura y altura:

La máxima altura alcanzable por un ABB de n nodos se produce cuando el árbol degenera en una lista enlazada, en cuyo caso la altura es de n

L

PE

JB

L

PE

JB

P

E

L

B

J

P

E

L

B

J

Page 23: Objetivos - UTEM

23

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles Binarios de Búsqueda

10 1 2 1

max

0

2 2 2 2 ... 2h

i h

i

N−

=

= = + + + +∑

1

0

11

nni

i

xxx

+

=

−=

−∑

Operaciones básicas:

Búsqueda

Inserción

Borrado

Complejidad de las operaciones: O(h)

h ≡ altura del árbol

h ≅ log2(n)

Número máximo de nodos en el nivel i: 2i

Número máximo de nodos en un árbol binario:

Justificación

1

max0

2 12 2 12 1

hhi h

i

N−

=

−= = = −

−∑

max max 2 max 22 1 2 1 log ( 1) (log ( ))h hN N h N O n= − ⇒ = + ⇒ = + ≅

Progresión geométrica

aplicando log2

Page 24: Objetivos - UTEM

24

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles Binarios de Búsqueda

Las operaciones se basan en el esquema de búsqueda de un elemento en el árbol. Si Aes un ABB y e el elemento a buscar, tenemos:

Si A es el árbol vacío, el elemento e no está en el árbol.

En caso contrario, se compara e con la raíz de A y se pueden dar tres casos:

1. e = raíz(A): el elemento ha sido encontrado

2. e < raíz(A): se repite el proceso de búsqueda dentro del subárbol izquierdo de A

3. e > raíz(A): se repite el proceso de búsqueda dentro del subárbol derecho de A

Page 25: Objetivos - UTEM

25

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Utiliza el esquema de búsqueda

Si el elemento a insertar se encuentra en el árbol, no se hace nada

En caso contrario, se inserta en el lugar donde acaba la búsqueda

La búsqueda acaba sin éxito al llegar a un subárbol izquierdo o derecho que está vacío

Operación de inserción

Árboles Binarios de Búsqueda

8

73

106

8

73

106

8

73

106

5

8

73

106

5

insertamos el 5

Page 26: Objetivos - UTEM

26

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Utiliza el esquema de búsqueda

Si no se encuentra el elemento a eliminar, la operación termina

Si el elemento a eliminar se encuentra en el árbol, el comportamiento de la operación depende del número de hijos que tenga dicho nodo:

Operación de borrado (1/4)

Árboles Binarios de Búsqueda

1. Eliminar un nodo sin hijos (hoja) simplemente se elimina el nodo

8

63

105

8

63

105

8

6

105

8

6

105eliminamos el 3

Page 27: Objetivos - UTEM

27

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Operación de borrado (2/4)

Árboles Binarios de Búsqueda

2. Eliminar un nodo con un solo hijo solo hay que realizar una reasignación de punteros

eliminamos el 21

25

6

15

3711

21

17

25

6

15

3711

21

17

25

6

17

3711

15

25

6

17

3711

15

el padre del nodo que queremos eliminar pasa a apuntar al hijo del nodo que está siendo eliminado

Page 28: Objetivos - UTEM

28

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Operación de borrado (3/4)

Árboles Binarios de Búsqueda

3. Eliminar un nodo con dos hijos

a. Se reemplaza el nodo que queremos eliminar con el elemento máximo de su subárbol izquierdo o el elemento mínimo de su subárbol derecho

b. Seguidamente, se elimina el nodo máximo (o mínimo, según el caso)

c. Dicho nodo será una hoja o tendrá un solo hijo, por lo que la operación se resolverá fácilmente mediante uno de los dos primeros casos

Page 29: Objetivos - UTEM

29

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Operación de borrado (4/4)

Árboles Binarios de Búsqueda

Ejemplo de borrado

eliminamos

el 20

8

155

206

17

16

21

12

8

155

206

17

16

21

12

8

155

176

17

16

21

12

8

155

176

17

16

21

12

8

155

176

16

21

12

Page 30: Objetivos - UTEM

30

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles Binarios de Búsqueda

3.4.1 Especificación algebraica

espec arbolesBinariosdeBusquedausa booleanosparámetro formal

género elementooperaciones

_≤_ , _≥_, _<_ , _>_ , _==_ , _≠_ : elemento elemento booleanofpfgénero abboperaciones

∆: abbparcial _ < _ , _ > : elemento abb abb abbparcial subIzq, subDer: arbin arbinvacío?: arbin booleanoinsertar: abb elemento abbestá?: abb elemento booleanoparcial min: abb elementoparcial max: abb elementoeliminar: abb elemento abb ...

Page 31: Objetivos - UTEM

31

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles Binarios de Búsqueda

dominios de definición iz, de: abb; e: elementosubIzq (e<iz, de>)subDer (e<iz, de>)

min (e <iz, de>)

max (e <iz, de>)

e <iz, de> está definido sólo si

(vacío?(iz) ∧ vacío?(de)) ∨

(vacío?(iz) ∧ ¬ vacío?(de) ∧ e < min(de)) ∨

(¬ vacío?(iz) ∧ vacío?(de) ∧ e > max(iz)) ∨

(¬ vacío?(iz) ∧ ¬ vacío?(de) ∧ e > max(iz) ∧ e < min(de))

ecuaciones iz, de: abb; e, e1, e2: elementoinsertar(∆, e) =insertar(e1<iz, de>, e2) =

...

Page 32: Objetivos - UTEM

32

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles Binarios de Búsqueda

está? (∆, e) =está? (e1<iz, de>,e2) =

min (e<iz, de>) =

eliminar(∆, e) =eliminar(e1<iz, de>, e2) =

fespec

max (e<iz, de>) =

Page 33: Objetivos - UTEM

33

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles Binarios de Búsqueda

template <typename T>class ABB : public Arbin<T> {

typedef NodoB<T>* PtrNodoB;public:

ABB();ABB(const ABB& a);const ABB& subIzq() const throw(ArbolVacioExcepcion);const ABB& subDer() const throw(ArbolVacioExcepcion);void insertar(const T& objeto);bool buscar(const T& objeto) const;const T& minimo() const throw(ArbolVacioExcepcion);const T& maximo() const throw(ArbolVacioExcepcion);void eliminar(const T& objeto);

private:ABB(PtrNodoB p);

} ;

3.4.2 Implementación

Page 34: Objetivos - UTEM

34

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles Binarios de Búsqueda

void insertar(const T& objeto)inicio

insertarNodo( objeto, raiz )fin

void insertarNodo(const T& objeto, PtrNodoB& p)

varPtrNodoB n

fvarinicio

si p == NULO entoncesp = nuevo NodoB<T>(objeto)

sino si objeto < p->getObj() entoncesn = p->getIzq()

insertarNodo( objeto, n )

p->setIzq( n )

sino si objeto > p->getObj() entoncesn = p->getDer()

insertarNodo( objeto, n )

p->setDer( n )

fsifin

bool buscarNodo(const T& objeto, PtrNodoB p)inicio

si p == NULO entonces

devolver falso

sinoen caso de

objeto == p->getObj() : devolver verdad

objeto < p->getObj() : devolver buscarNodo( objeto, p->getIzq() )

objeto > p->getObj() : devolver buscarNodo( objeto, p->getDer() )fcaso

fsifin

bool buscar(const T& objeto) constinicio

devolver buscarNodo( objeto, raiz )fin

Page 35: Objetivos - UTEM

35

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles Binarios de Búsqueda

const T& minimoNodo(PtrNodoB p)inicio

si p->getIzq() == NULO entoncesdevolver p->getObj()

sinodevolver minimoNodo(p->getIzq())

fin

const T& minimo() const throw(ArbolVacioExcepcion)inicio

si esVacio() entonceslanzar ArbolVacioExcepcion()

fsidevolver minimoNodo(raiz)

fin

const T& maximoNodo(PtrNodoB p)inicio

si p->getDer() == NULO entoncesdevolver p->getObj()

sinodevolver maximoNodo(p->getDer())

fin

const T& maximo() const throw(ArbolVacioExcepcion)iniciosi esVacio() entonces

lanzar ArbolVacioExcepcion()fsidevolver maximoNodo(raiz)

fin

Page 36: Objetivos - UTEM

36

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles Binarios de Búsqueda

void eliminar(const T& objeto)inicio

eliminarNodo( objeto, raiz )fin

...sino

si p->getIzq() == NULO entoncesn = pp = p->getDer()liberar n

sino si p->getDer() == NULO entoncesn = pp = p->getIzq()liberar n

sinon = p->getIzq()p->setObj(maximoNodo(n))eliminarNodo( p->getObj(), n )p->setIzq(n)

fsifsi

fsifin

void eliminarNodo(const T& objeto, PtrNodoB& p)var

PtrNodoB nfvarinicio

si p ≠ NULO entoncessi objeto < p->getObj() entonces

n = p->getIzq()eliminarNodo( objeto, n )p->setIzq( n )

sino si objeto > p->getObj() entoncesn = p->getDer()eliminarNodo( objeto, n )p->setDer( n )

...

Page 37: Objetivos - UTEM

37

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

3.5 Árboles binarios equilibrados (AVL)

La eficiencia de las operaciones sobre árboles binarios de búsqueda puede llegar a ser de O(n) en el peor de los casos

En la práctica, dicha eficiencia es de O(log2(n)), cuando suponemos que los valores se insertan en el árbol de una forma aleatoria.

La eficiencia de las operaciones depende de la estructura del árbol en el momento de realizar la operación

Lo ideal es, por tanto, que la altura del árbol sea siempre la menor posible

Los árboles AVL, definidos por G.M. Adelson-Velskii y E.M. Landis en 1962, cumplen este requisito, por lo que se conocen también como árboles de búsqueda equilibrados

Page 38: Objetivos - UTEM

38

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Diremos que un árbol binario está equilibrado si, para todos los nodos del árbol, la diferencia entre las alturas de sus subárboles siempre es menor o igual que 1.

• Todo nodo que sea hoja está equilibrado

• Un árbol con un solo hijo está equilibrado si el árbol hijo consta de un único nodo

8

155

176

21

12

8

155

176

1612

Árbol equilibrado Árbol no equilibrado

Page 39: Objetivos - UTEM

39

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Cuando se realiza una operación de inserción o borrado en un árbol AVL, éste puede perder la propiedad de equilibrio. Para mantener dicha propiedad se realiza una sencilla reorganización en el árbol denominada rotación

n2

n1 Tc

TbTa

n1

n2Ta

Tb Tc

rotar-derecha (n2)

rotar-izquierda (n2)

Con estas operaciones de rotación no se pierden las propiedades de ABB. En ambos árboles el nodo n1 es menor que el nodo n2, todos los elementos de Ta son menores que n1, todos los nodos de Tc son mayores que n2 y todos los nodos de Tb están entre n1 y n2

Page 40: Objetivos - UTEM

40

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

10

85

126

7

15

rotar-derecha (10)

Page 41: Objetivos - UTEM

41

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

10

85

126

7

15

rotar-izquierda (10)

Page 42: Objetivos - UTEM

42

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Factor de equilibrio de un nodo es la altura de su subárbol derecho menos la altura de su subárbol izquierdo. En un árbol equilibrado sólo podrá tener los valores -1, 1 o 0

Para representar un árbol AVL usaremos la misma estructura que para los ABB

La clase nodoB se amplía con un nuevo atributo que almacena su factor de equilibrio

8

155

176

12

-1

1

0

1

-1

0

21

0

Page 43: Objetivos - UTEM

43

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Puesto que los árboles AVL son un caso particular de ABB, usamos el mismo algoritmo de búsqueda pero con la particularidad que siempre se realizará con una eficiencia de O(log2 n)

Operación de búsqueda

La inserción de un nodo en un árbol AVL consta de dos fases:

usando el algoritmo de inserción desarrollado para los ABB, se recorre el camino partiendo del nodo raíz y se inserta como una hoja del árbol en su lugar correspondiente

se recorre el camino de vuelta hacia la raíz, actualizando los equilibrios de los nodos y reequilibrando el árbol cuando sea necesario, esto es, cuando la altura de uno de sus nodos pase a ser ±2

Operación de inserción

Page 44: Objetivos - UTEM

44

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

El desequilibrio se produce cuando, para un determinado nodo, la altura de su subárbol derecho es mayor que la de su subárbol izquierdo y el nuevo nodo se inserta por el subárbol derecho, o si la altura de su subárbol izquierdo es mayor que la de su subárbol derecho y el nuevo nodo se inserta por el subárbol izquierdo

h + 1

n

Td

Tih

h + 1

n

Ti

Tdh

caso (a) caso (b)

Las situaciones de desequilibrio se solucionan mediante 2 tipos de rotaciones:

patrón de rotación simple

patrón de rotación doble

Page 45: Objetivos - UTEM

45

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Rotación simple a la izquierda (I)

Es necesario aplicarlo cuando el nuevo nodo se inserta en el subárbol derecho del subárbol derecho de n en el caso (a)

n

n1Ta

Tb Tc

h

h h

0

+1

n

n1Ta

Tb Tc

h

h h

0

+1

n

n1Ta

Tb Tc

h

hh + 1

+1

+2

n

n1Ta

Tb Tc

h

hh + 1

+1

+2

Page 46: Objetivos - UTEM

46

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Para reestablecer la propiedad de equilibrio, se realiza una rotación simple a la izquierda sobre el nodo n

n1

n Tc

TbTah h

h + 1

0

0

n1

n Tc

TbTah h

h + 1

0

0

Page 47: Objetivos - UTEM

47

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Rotación simple a la derecha (D)

Es el caso simétrico al anterior y es necesario aplicarlo cuando el nuevo nodo se inserta en el subárbol izquierdo del subárbol izquierdo de n en el caso (b)

n

n1 T c

T bT ah h

0

-1

h

n

n1 T c

T bT ah h

0

-1

h

h + 1

n

n1 T c

T bT ah

-1

-2

h

h + 1

n

n1 T c

T bT ah

-1

-2

h

Page 48: Objetivos - UTEM

48

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Para reestablecer la propiedad de equilibrio, se realiza una rotación simple a la derecha sobre el nodo n

h + 1

n1

nTa

Tb Tch

0

0

h

h + 1

n1

nTa

Tb Tch

0

0

h

Page 49: Objetivos - UTEM

49

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Rotación doble derecha-izquierda (DI)

Es necesario aplicarlo cuando el nuevo nodo se inserta en el subárbol izquierdo del subárbol derecho de n en el caso (a)

h

n

n1

Ta

Tb

Tdh -1

0

+1

h

n2

Tch -1

0h

n

n1

Ta

Tb

Tdh -1

0

+1

h

n2

Tch -1

0

h

n

n1

Ta

Tb

Tdh -1

-1

+2

h

n2

Tc

h

+1h

n

n1

Ta

Tb

Tdh -1

-1

+2

h

n2

Tc

h

+1

Page 50: Objetivos - UTEM

50

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Para reestablecer la propiedad de equilibrio, se realiza rotación doble DI, es decir, una rotación a la derecha sobre el nodo n1 seguida de otra rotación a la izquierda sobre el nodo n

h

n

n2

Ta

Tb

Td

h -1

h

n1

Tc

h

h

n

n2

Ta

Tb

Td

h -1

h

n1

Tc

hh

n2

n

Ta

Tb

Td

h -1

h

n1

Tc

h

0

-1 0

h

n2

n

Ta

Tb

Td

h -1

h

n1

Tc

h

0

-1 0

proceso intermedio resultado final

Page 51: Objetivos - UTEM

51

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Rotación doble izquierda-derecha (ID)

Es necesario aplicarlo cuando el nuevo nodo se inserta en el subárbol derecho del subárbol izquierdo de n en el caso (b)

h

n

n1

Td

TcTa h -1

0

-1

h

n2

Tb

0

h -1

h

n

n1

Td

TcTa h -1

0

-1

h

n2

Tb

0

h -1

h

n

n1

Td

TcTa

h

+1

-2

h

n2

Tb

+1

h -1

h

n

n1

Td

TcTa

h

+1

-2

h

n2

Tb

+1

h -1

Page 52: Objetivos - UTEM

52

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Para reestablecer la propiedad de equilibrio, se realiza rotación doble ID, es decir, una rotación a la izquierda sobre el nodo n1 seguida de otra rotación a la derecha sobre el nodo n

proceso intermedio resultado final

h

n2

n1

Ta

Tb

Td

h -1

h

n

Tc

h

0

-1 0

h

n

n2

Td

Tc

Ta

h

h

n1

Tb h - 1

Page 53: Objetivos - UTEM

53

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Tanto en las rotaciones simples como en las rotaciones dobles que se realizan en la inserción, la altura del árbol resultante tiene la misma altura que el árbol original. Esta propiedad es importante, ya que permite finalizar el algoritmo de inserción sin necesidad de seguir observando los nodos por el camino de vuelta hasta el nodo raíz, puesto que no se encontrará desequilibrado.

Durante la etapa de recorrido de regreso del procedimiento de inserción, lo que necesitamos es encontrar el primer nodo cuyo equilibrio cambia de ±1 a ±2. A este nodo se le llama pivote. Una vez encontrado el pivote, se lleva a cabo la rotación apropiada según uno de estos casos:

1. si el equilibrio del pivote pasa a ser +2 y el equilibrio de su hijo derecho es +1, se realiza una rotación simple a la izquierda.

2. si el equilibrio del pivote pasa a ser +2 y el equilibrio de su hijo derecho es -1, se realiza una rotación doble DI.

3. si el equilibrio del pivote pasa a ser -2 y el equilibrio de su hijo izquierdo es -1, se realiza una rotación simple a la derecha.

4. si el equilibrio del pivote pasa a ser -2 y el equilibrio de su hijo izquierdo es +1, se realiza una rotación doble ID.

Page 54: Objetivos - UTEM

54

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

Operación de borrado

Se utiliza la misma técnica que el algoritmo de eliminación para ABB

Una vez eliminado se recorre el camino desde el padre del nodo eliminado hasta el nodo raíz, actualizando los equilibrios

Si se encuentra un nodo cuyo equilibrio pasa a ser ±2, se utiliza un patrón de rotación simple o doble para reestablecer la propiedad de equilibrio

A diferencia de la operación de inserción, la altura de un árbol puede no mantenerse después de una operación de eliminación y reequilibrado, por lo que puede requerir más de una operación de reequilibrado para mantener la propiedad

Page 55: Objetivos - UTEM

55

Tema 3

Estructuras de Datos II I.T. en Informática de Gestión/Sistemas Universidad de Huelva2005 -2006

Árboles binarios equilibrados

La casuística que se puede dar en una operación de borrado de un árbol AVL es la siguiente:

1. Si el equilibrio del padre pasa de 0 a ±1, el algoritmo termina, ya que la altura del árbol no se modifica

2. Si el equilibrio del padre pasa de ±1 a 0, continuar reequilibrando los nodos

3. Si el equilibrio del padre pasa de +1 a +2

3.1. Si el equilibrio del hijo derecho es -1 rotación doble DI (continuar)

3.2. Si el equilibrio del hijo derecho es 0 o +1 rotación simple a la izquierda

(a) si el equilibrio del hijo derecho es 0, el algoritmo termina

(b) si el equilibrio del hijo derecho es +1, continuar

4. Si el equilibrio del padre pasa de -1 a -2

4.1. Si el equilibrio del hijo izquierdo es +1 rotación doble ID (continuar)

4.2. Si el equilibrio del hijo izquierdo es 0 o -1 rotación simple a la derecha

(a) si el equilibrio del hijo izquierdo es 0, el algoritmo termina

(b) si el equilibrio del hijo izquierdo es -1, continuar