arboles

Upload: luis-gabriel-hernandez-saenz

Post on 08-Jul-2015

64 views

Category:

Documents


0 download

TRANSCRIPT

TAD Arbol

Def inicin, implementacin y aplicaciones

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Arboles: conceptos bsicos

ARBOL: Conjunto dinmico con una estructura estrictamente jerrquica Ejemplos:rbol genealgico estructura de apartados y sub-apartados de un libro estructura sintctica de una frase

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

Arboles: conceptos bsicos

34

4

76

31

50

22

90

15

2Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3

Arboles: conceptos bsicos

Nodo: cada uno de los elementos de un rbol Nodo padre: el nico antecesor directo de un nodo Nodo hijo: descendiente directo de un nodo Raz: antecesor comn de todos los nodos del rbol, que a su vez no tiene antecesores Hoja o nodo terminal: nodo sin descendencia Sub-rbol: conjunto formado por un nodo y todos sus descendientes Arbol nulo: rbol sin nodos

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.4

Arboles: conceptos bsicosCamino: secuencia de nodos n1 , n2 , . . . , nk tal que ni es el nodo padre de ni+1 , para 1 i < k Longitud de un camino: nmero de nodos que lo forman, salvo el nodo inicial Altura de un nodo: longitud del camino ms largo de ese nodo a una hoja Altura de un rbol: altura del nodo raz Profundidad o nivel de un nodo: longitud del camino de la raz a ese nodo Grado de un nodo: nmero de hijos de dicho nodo Grado de un rbol: mximo de los grados de sus nodosAlgoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.5

Tipos de rboles: rboles ordenadoslos nodos estn ordenados de izquierda a derecha; dado un nodo n y el camino de la raz a n, todos los nodos que quedan a la izquierda de dicho camino, estn a la izquierda de n, y todos los nodos que quedan a la derecha, estn a la derecha de n34

4

76

31

50

22

90

15

2

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.6

Tipos de rboles: rboles ordenadosOrden de recorrido

Sea n0 el nodo raz de un rbol A, y sean A1 , A2 , . . . , Ak los k subrboles que cuelgan de n0n0 A

......... A1 A2 Ak

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.7

Tipos de rboles: rboles ordenadosOrden de recorridoEl recorrido en orden previo de A est formado por la raz n0 , seguida de los nodos de A1 en orden previo, los nodos de A2 en orden previo, y as sucesivamente hasta los nodos de Ak en orden previo. El recorrido en orden simtrico de A est formado por los nodos de A1 en orden simtrico, seguidos de n0 , y de los nodos de A2 , . . . , Ak todos ellos en orden simtrico. El recorrido en orden posterior de A est formado por los nodos de A1 en orden posterior, los nodos de A2 en orden posterior, y as sucesivamente hasta los nodos de A k en orden posterior, para finalizar con n0 .Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.8

Tipos de rboles: rboles ordenadosOrden de recorrido EJEMPLO34

4

76

31

50

22

90

15

2

Orden previo: 34, 4, 50, 22, 76, 31, 90, 2, 15 Orden simtrico: 50, 4, 22, 34, 76, 2, 90, 31, 15 Orden posterior: 50, 22, 4, 76, 2, 90, 15, 31, 34Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.9

Tipos de rboles: rboles etiquetadosArboles etiquetados Cada nodo ocupa una posicin distinta dentro del rbol, y por ello es necesario asignarle un identif icador Pero cada nodo almacena tambin informacin adicional, a la cual nos referiremos como valor o etiqueta Es muy comn referirse a los nodos directamente por la informacin que contienen. As, los recorridos dan lugar a secuencias de valores.

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles etiquetadosArboles de expresiones1

+

2

*

3

*

4

a

5

6

d

7

e

8

b

9

c

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles etiquetadosArboles de expresiones1

+

2

*

3

*

4

a

5

6

d

7

e

8

b

9

c

Orden previo expresin prefija: +*a-bc*de

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles etiquetadosArboles de expresiones1

+

2

*

3

*

4

a

5

6

d

7

e

8

b

9

c

Orden posterior expresin postfija: abc-*de*+

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles etiquetadosArboles de expresiones1

+

2

*

3

*

4

a

5

6

d

7

e

8

b

9

c

Orden simtrico expresin infija: a*b-c+d*e

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles etiquetadosArboles de expresiones1

+

2

*

3

*

4

a

5

6

d

7

e

8

b

9

c

Orden simtrico expresin infija: a*b-c+d*e Y los parntesis? EjercicioAlgoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Tipos de rboles: rboles n-arios

Arbol n-ario: rbol de grado n 1 Se define recursivamente: 1. Un rbol formado por un nico nodo es un rbol n-ario 2. Un rbol n-ario se puede construir enraizando k n rboles n-arios a un nico nodo r El nmero mximo de nodos en el nivel i-simo de un rbol n-ario es ni Un rbol unario es un tipo degenerado de rbol n-ario, equivalente a una lista

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en profundidad

Sea n0 el nodo raz de un rbol A, y sean A1 , A2 , . . . , Ak los k sub-rboles descendientes de n0 , ordenados de izquierda a derechan0 A

......... A1 A2 Ak

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en profundidad

Sea n0 el nodo raz de un rbol A, y sean A1 , A2 , . . . , Ak los k sub-rboles descendientes de n0 , ordenados de izquierda a derecha El recorrido en profundidad de A se define recursivamente como sigue:rp(A) = (n0 , rp(A1 ), rp(A2 ), . . . , rp(Ak ))

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en profundidad

Sea n0 el nodo raz de un rbol A, y sean A1 , A2 , . . . , Ak los k sub-rboles descendientes de n0 , ordenados de izquierda a derecha El recorrido en profundidad de A se define recursivamente como sigue:rp(A) = (n0 , rp(A1 ), rp(A2 ), . . . , rp(Ak ))

El recorrido en profundidad es un recorrido de A en orden previo.

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en anchura

Sea L(i) la lista de nodos, ordenados de izquierda a derecha, en el nivel i del rbol A, con i [1, h], siendo h la altura de A34 L(0)={34}

4

76

31

L(1)={4, 76, 31}

50

22

90

15

L(2)={50, 22, 90, 15}

2

L(3)={2}

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en anchura

Sea L(i) la lista de nodos, ordenados de izquierda a derecha, en el nivel i del rbol A, con i [1, h], siendo h la altura de A El recorrido en anchura de A se define como sigue:ra(A) = (L(0), L(1), . . . , L(h))

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Recorrido en anchura

Sea L(i) la lista de nodos, ordenados de izquierda a derecha, en el nivel i del rbol A, con i [1, h], siendo h la altura de A El recorrido en anchura de A se define como sigue:ra(A) = (L(0), L(1), . . . , L(h))

El recorrido en anchura enumera los nodos que hay en cada nivel, de izquierda a derecha, desde el nivel 0 hasta el nivel ms profundo del rbol.

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD ArbolTipos ELEMENTO NODO ARBOL Constantes NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbolprocedimiento inicializar (ref t: ARBOL) Inicializa la variable t de tipo ARBOL Realiza las reservas dinmicas de memoria necesarias Como resultado, se tendr un rbol t vaco inicializar (t): primera accin a realizar sobre t

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbolfuncin aadir_hijo (ref t: ARBOL, ref n: NODO, x: ELEMENTO): NODO Crea un nuevo nodo con la informacin x, y lo inserta como siguiente hijo del nodo n en el rbol t Precondicin: n = NODO_NULO si y slo si t es un rbol vaco Si n = NODO_NULO entonces el nuevo nodo es raz de t Devuelve el nodo recin creado

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbolaadir_hijo(A,c,12)a 5a 5

e

Ab 7 c 1b 7 c

A1

d

3

d

3

e

12

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbolprocedimiento eliminar_subrbol (ref t: ARBOL, n: NODO) Elimina el subrbol que cuelga del nodo n del rbol t Si n = NODO_NULO, el procedimiento no hace nada Si n es la raz de t, el procedimiento elimina el rbol completo, y t queda vaco

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arboleliminar_subrbol(A,c)a 5

Aa 5

b

7

c

1b 7

A

d

3

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbolfuncin vaco?(t: ARBOL): booleano Devuelve: TRUE FALSE si el rbol t est vaco en caso contrario

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbolfuncin raz(t: ARBOL): NODO Devuelve el nodo raz del rbol t Si t est vaco, devuelve NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbolfuncin padre(t: ARBOL, n: NODO): NODO Devuelve el nodo padre de n en el rbol t Si n no tiene padre es decir, si se trata de la raz del rbol t, la funcin devuelve NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbolfuncin primer_hijo(t: ARBOL, n: NODO): NODO Devuelve el primer hijo del nodo n en el rbol t Si n no tiene hijos, la funcin devuelve NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbolfuncin siguiente_hermano(t: ARBOL, n: NODO): NODO Devuelve el siguiente hermano a la derecha del nodo n en el rbol t Si n es el ltimo de los hermanos, la funcin devuelve NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbolfuncin valor (t: ARBOL, n: NODO): ELEMENTO Devuelve el valor almacenado en el nodo n del rbol t Precondicin: n = NODO_NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol

a

5

Ab 7 c 1 f 8

raz(A)

a a d

padre(A,c)

primer_hijo(A,c)

siguiente_hermano(A,c)d 3 e 12

f

valor(A,c)

1

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

Ejemplo: recorrido en orden previoprocedimiento orden_previo(t: ARBOL, n: NODO) var c: NODO fvar usa funcin imprimir(n: NODO) fusa principio imprimir (n) c primer_hijo(t,n) mientras c = NODO_NULO hacer orden_previo(t,c) c siguiente_hermano(t,c) fin_mientras n Llamada original: orden_previo(t,raz(t))Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol: representacin en memoria (1)Array esttico1 5

A2 7 3 1 4 8

5

3

6

12

Indice de nodo Nodo padre Valor NivelAlgoritmos y Estructuras de Datos

1 0 5 0

2 1 7

3 1 1 1

4 1 8

5 3 3 2

6 3 12

7 ........ ........

MAX

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol: representacin en memoria (2)Listas de hijosA6 Numero de nodos Valores Listas de hijos 2NULO

1

5

A2 7 3 1 4 8Indices de nodo

1 2 3 4 5

5 7 1 8 3 12NULO

3

4

NULO

5

6

NULO

NULO

5

3

6

12

6

NULO

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol: representacin en memoria (3)Representacin explcitaValor / Nodo padre / Primer hijo / Siguiente hermanoA5

1

5

7

1

8

A3 12

2

7

3

1

4

8

Valor

Nodo padre Siguiente hermano

5

3

6

12

Primer hijo

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.1

TAD Arbol: representacin explcitaconstantes NODO_NULO = NULO fin_constantes tipos ITEM = registro valor: ELEMENTO padre: apuntador a ITEM primer_hijo: apuntador a ITEM siguiente_hermano: apuntador a ITEM fin_registro NODO = apuntador a ITEM ARBOL = NODO fin_tipos

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcitaprocedimiento inicializar (ref t: ARBOL) principio t NODO_NULO n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcitafuncin aadir_hijo (ref t: ARBOL, ref n: NODO, x: ELEMENTO): NODO var p, q: NODO n_var principio p reservar (1,ITEM) apuntado(p).valor x apuntado(p).primer_hijo NODO_NULO apuntado(p).siguiente_hermano NODO_NULO si t = NODO_NULO entonces apuntado(p).padre NODO_NULO tp devolver p n_si continua...

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita...viene de la anterior apuntado(p).padre n si apuntado(n).primer_hijo = NODO_NULO entonces apuntado(n).primer_hijo p si_no q apuntado(n).primer_hijo mientras apuntado(q).siguiente_hermano = NODO_NULO hacer q apuntado(q).siguiente_hermano n_mientras apuntado(q).siguiente_hermano p n_si devolver p nAlgoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcitaprocedimiento eliminar_subrbol(ref t: ARBOL, n: NODO) var p, q, r: NODO n_var usa liberar_subrbol() n_usa principio si n = t entonces liberar_subrbol(t) t NODO_NULO si_no p apuntado(n).padre q apuntado(p).primer_hijo r NODO_NULO continua...

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcita...viene de la anterior mientras q = n hacer rq q apuntado(q).siguiente_hermano n_mientras si r = NODO_NULO entonces apuntado(r).siguiente_hermano apuntado(n).siguiente_hermano si_no apuntado(p).primer_hijo apuntado(n).siguiente_hermano n_si liberar_subrbol(n) n_si nAlgoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcitafuncin vaco?(t: ARBOL): booleano principio si t = NODO_NULO entonces devolver TRUE si_no devolver FALSE n_si n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcitafuncin raz(t: ARBOL): NODO principio devolver t n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcitafuncin padre(t: ARBOL, n: NODO): NODO principio devolver apuntado(n).padre n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcitafuncin primer_hijo(t: ARBOL, n: NODO): NODO principio devolver apuntado(n).primer_hijo n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.2

TAD Arbol: representacin explcitafuncin siguiente_hermano(t: ARBOL, n: NODO): NODO principio devolver apuntado(n).siguiente_hermano n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3

TAD Arbol: representacin explcitafuncin valor (t: ARBOL, n: NODO): ELEMENTO principio devolver apuntado(n).valor n

Algoritmos y Estructuras de Datos

Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3

TAD Arbol: ejerciciosEscribir en lenguaje algortmico una funcin que calcule la altura de un rbol, utilizando los procedimientos y funciones del TAD Arbol. Escribir en lenguaje algortmico una funcin que calcule el grado de un rbol, utilizando los procedimientos y funciones del TAD Arbol. Escribir en lenguaje algortmico sendos procedimientos que obtengan los recorridos en orden simtrico y posterior de un rbol. Escribir en lenguaje algortmico un procedimiento que obtenga el recorrido en anchura de un rbol. Sugerencia: utilcese una variable de tipo COLA, as como los procedimientos y funciones del TAD COLA.Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3

TAD Arbol: ejerciciosEscribir en lenguaje algortmico una implementacin del TAD Arbol Binario mediante una representacin explcita basada en apuntadores, con las siguientes operaciones: inicializar(), crear_raz(), aadir_hijo_izq(), aadir_hijo_der(), extraer_subrbol(), eliminar_subrbol(), raz(), padre(), hijo_izq(), hijo_der(), valor() y vaco?(). Escribir en lenguaje C el cdigo necesario para codificar/decodificar ficheros de texto mediante lo que se conoce como cdigos de Huffman. El fichero codificado deber contener: la especificacin del rbol binario de cdigos, el nmero de caracteres del fichero original y una secuencia de bytes con la codificacin propiamente dicha. Sugerencia: consultar "Estructuras de Datos y Algoritmos", de Aho-Hopcroft-Ullman (p. 95-102).Algoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3

Procedimiento auxiliar liberar_subrbol()liberar_subrbol() es un procedimiento auxiliar y privado. No forma parte de la especificacin del TAD Arbol. Slo se puede llamar desde los interfaces pblicos. procedimiento liberar_subrbol(n: NODO) var p, q: NODO n_var principio p apuntado(n).primer_hijo mientras p = NODO_NULO hacer q apuntado(p).siguiente_hermano liberar_subrbol(p) pq n_mientras liberar (n) Volver nAlgoritmos y Estructuras de Datos Departamento de Electricidad y Electr onica (UPV/EHU)

TAD Arbol p.3