63
UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 hs c/u) Arboles 30/5/2018 1 Apuntes de apoyo para clases teóricas. Para una conceptualización completa de los temas, los alumnos deberán asistir a las clases teóricas y completar con lectura del material bibliográfico propuesto. Tiempo de exposición: 2 hs

UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

UNIDAD 6: Contenedores No Lineales

(Incluye 2 clases de 2 hs c/u)

Arboles

30/5/2018 1

Apuntes de apoyo para clases teóricas.Para una conceptualización completa de los temas, los alumnos deberán asistir a las clases

teóricas y completar con lectura del material bibliográfico propuesto.

Tiempo de exposición: 2 hs

Page 2: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Bibliografía

2

1) Apuntes de la cátedra – Dr. Tomas N. Hibbard.

3) El arte de programar ordenadores. Clasificación y Búsquedas. Volúmen III – D. E.Knuth – Ed. Reverté – Reimpresión Año 2002 – (SRO: NO). El tema figura como: Árbolesequilibrados (pag. 462).

2) Videos de la cátedra – Dr. Tomas N. Hibbard – (SRO: SI)

30/5/2018

4) Matemática Discreta y Combinatoria. Ralph P. Grimaldi - Addison – Wesley –3ra.Edición – Año 1998 - (SRO: SI)

5) Matemáticas Discretas - Richard Johnsonbaugh - Prentice Hall – 4ta. Edición – Año1997 - (SRO: NO)

6) Elementos de Matemática Discreta - C. L. Liu - Mc Graw Hill – 2dta. Edición – Año1995 - (SRO: NO)

Page 3: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Software visualización árboles (gt.jar tree)

30/5/2018 4

Autores:• Jakub (kuko) Kováč , Comenius Universit, Bratislava, Eslovaquia (antes

Chescolovaquia)• Octubre de 2013 a la fecha : Software Engineer en Facebook Inc., Londres

Otros autores:• Katka Kotrlová• Pavol (paly) Lukča• Viktor (friker) Tomkovič• Tatiana Tóthová

https://people.ksp.sk/~kuko/gnarley-trees/

Page 4: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Campo de Aplicación

30/5/2018 5

➢ Evaluadores de expresiones aritméticas (Ciencias de la computación)

➢ Representaciones de jerarquía entre sus elementos:❑ Organigramas❑ Árboles genealógicos❑ Tabla de contenidos❑ Árboles de decisión con dos opciones, también pueden ser de 3

opciones.❑ Juegos de algún campeonato❑ Representación de expresiones que contienen operandos y

operadores binarios.❑ Etc.

Page 5: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Objetivos de la clase:

30/5/2018

Arboles

Operaciones básicas:

Binarios (AB)

Generales (A)

De búsqueda ordenados (ABB)

Recorridos

Inserción

Búsqueda – Complejidad

Preorden

Inorden

Posorden

Eliminación

Page 6: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arbol General: Definición I

30/5/2018 7

Sea G = (N, A, P), donde➢ N, es un conjunto de nodos➢ A, es un conjunto de aristas➢ P, es una función de las aristas, tal que cada P(a) = {p, q}

El grafo G es un árbol, si G es conexo y NO contiene ciclos.

a) u v

wx

y

z

Libro

C2C1 C3

S1.1 S1.2 S3.1 S3.2 S3.3

S3.2.1 S3.2.2

LibroC1

S1.1S1.2

C2C3

S3.1S3.2

S3.2.1S3.2.2

S3.3

b)

Ej.: Ya vimos el árbol cubridor, también podemos representar jerarquías, etc.

Page 7: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arbol General: Definición II

30/5/2018

8

Un ARBOL es un conjunto finito de uno o más nodos, tales que:

• Existe un nodo especial llamado raíz del árbol (V1)

• Los nodos restantes (v2,v3,..,vn) se dividen en m>=0 conjuntos disjuntos denominados T1, T2,....Tm , cada uno de los cuales es a su vez, un árbol. Estos se llaman subárboles de la raíz.

•Un árbol con 0 nodos es el árbol vacío

Page 8: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles Binarios (AB) :Definición

30/5/2018 9

Los árboles binarios son los tipos particulares más importantes de árboles con raíz

• Cada nodo tiene cero, uno o dos hijos.

• Cada nodo de un árbol binario tiene a lo sumo dos hijos.

• Cada hijo se designa como hijo izquierdo o hijo derecho.

A

I D

x

y z

u v

Hijo izquierdo Hijo derecho

Nodo raíz

Page 9: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles Binarios (AB) …

Relaciones de parentesco y conceptos asociados con la teoría de árboles.

30/5/2018 10

A

I D

➢ Raíz: Nodo “x”

➢ Subárbol izquierdo de A: I➢ Subárbol derecho de A: D

➢ Nodo “x” es padre de los nodos “y” y “z”➢ Nodos “y” y “z”, son hijos del nodo “x”

➢ Nodo “x” es ancestro de los nodos “y” y “z”➢ Nodos “y” y “z”, son descendientes del nodo “x”

➢ Nodos hojas o terminales: Son aquellos que notienen hijos o descendientes. Por ejemplo, losnodos “u”, “v” y “z”.

➢ El grado de cada nodo puede ser 1, 2 o 3.

x

y z

u v

Page 10: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles Binarios (AB): Nivel - Altura

30/5/2018 11

A

I

0

1

2

3

Nivel

1

2

3

4

a = Altura = Nivel + 1 ❑ Al nivel 1 pertenecen losnodos con valores 10 y 30, sedice que pertenecen a lamisma generación.

❑ Altura de A es 4. Nos dá unaidea de la cantidad debúsquedas que se debenrealizar para encontrar o noun elemento dado.

❑ Altura de I, es igual a 3.

❑ Altura de (12, (11, Ø, Ø), Ø),es igual a 2.

Nivel de un vértice o nodo, es la longitud de caminosimple a la raíz.La profundidad o altura de un árbol A, es el númeromáximo de nivel que aparece en dicho árbol más 1.

2511

127

10

21

30

15

Page 11: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles Binarios (AB): Operaciones básicas

12

❑ Recorridos de un árbol:

❑ Preorden

❑ Inorden

❑ Posorden

❑ Búsqueda de un elemento.

❑ Inserción de un elemento.

❑ Eliminación de un elemento.

A

2511

127

10

21

30

15

Page 12: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles Binarios (AB): Recorridos

30/5/2018 13

Dado un Arbol Binario de raiz A:

a) preorden:

1° procesar la raíz A

2° recorrer el subárbol izquierdo de A en preorden

3° recorrer el subárbol derecho de A en preorden

preorden(A) = 15,10,7,12,11,30,21,25

A

2511

127

10

21

30

15

Page 13: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles Binarios (AB): Recorridos

30/5/2018 14

Dado un Arbol Binario de raiz A:

b) inorden:

1° recorrer el subárbol izquierdo de A en inorden

2° procesar la raíz A

3° recorrer el subárbol derecho de A en inorden

inorden(A) = 7,10,11,12,15,21,25,30

A

2511

127

10

21

30

15

Page 14: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles Binarios (AB): Recorridos

30/5/2018 15

Dado un Arbol Binario de raiz A:

c) posorden:

1° recorrer el subárbol izquierdo de A en posorden

2° recorrer el subárbol derecho de A en posorden

3° procesar la raíz A

posorden(A) = 7,11,12,10,25,21,30,15

A

2511

127

10

21

30

15

Page 15: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles Binarios de Búsqueda (ABB):

Vamos a ver la primera estructura para facilitar la búsqueda y la inserción.

Definiremos el conjunto de árboles binarios de búsqueda, abreviado ABB, con tresfunciones, “valor”, “izq” y “der”, que entenderemos respectivamente como:

1. valor: valor almacenado en la raíz.2. izq: subárbol izquierdo.3. der: subárbol derecho.

30/5/2018 16

izq

A

A = Ø

der

Hay un objeto en los ABB que no tiene estas funciones definidas, es el árbol nulo (Ø).

valor(A) = xx

Page 16: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Árboles Binarios de Búsqueda (ABB):

Definición:Sea “T” un tipo de datos.

1. Ø es un ABB.2. Si I y D son ABB y t ∈ T entonces A = (t, I, D) es un ABB

con valor(A) = tizq(A) = Ider(A) = D

30/5/2018 17

I

A A = Ø

D

valor(A) = t

izq(A) = I

der(A) = D

1) 2) t

Page 17: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Árboles Binarios de Búsqueda (ABB) …

Ejemplos:

30/5/2018 18

5A valor(A) = 5izq(A) = Ø

der(A) = Ø

A = (5, Ø, Ø)1)

Ø Ø

2A valor(A) = 2izq(A) = Ø

der(A) = (9, Ø, Ø)

A = (2, Ø, (9, Ø, Ø))2)

Ø

Ø

9

Ø

1A valor(A) = 1izq(A) = (4, Ø, Ø)

der(A) = (9, Ø, Ø)

A = (1, (4, Ø, Ø), (9, Ø, Ø))3)

Ø

4

Ø Ø

9

Ø

I D

ID

DI

Page 18: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Árboles Binarios de Búsqueda (ABB) …

El conjunto de valores de un ABB son todos los valores de los subárboles de A.Recursivamente:

➢ Ø no tiene ningún valor➢ t es un valor de A si t = valor(A) o

t es un valor de izq(A) ot es un valor de der(A)

30/5/2018 19

A = (1, (4, Ø, (6, Ø, Ø)), (9, Ø, Ø))Ej.:

DI

1A valor(A) = 1izq(A) = (4, Ø, (6, Ø, Ø))

der(A) = (9, Ø, Ø)

Ø

4

Ø

9

Ø

Ø

6

Ø

Los valores de A son: 1, 4, 6 y 9

Page 19: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Árbol Binario de Búsqueda ordenado

Sea ≤ una relación transitiva y reflexiva sobre T. El AB A es ordenado respecto de ≤ si esØ o si izq(A) y der(A) son ordenados respecto de ≤:

todos los valores de izq(A) ≤ valor(A) ≤ todos los valores de der(A)

30/5/2018 20

A = (15, (10, (7, Ø, Ø), (12, (11, Ø, Ø), Ø) ), (30, (21, Ø, (25, Ø, Ø) ), Ø ) )Ej.:

D = der(A)I = izq(A)A

i. todos los valores izq(A) ≤ 15 ≤ todos los valores de der(A)

ii. todos los valores izq(I) ≤ 10 ≤ todos los valores de der(I)

I

2511

21127

3010

15

VEMOS QUE ESTE TIPO DE ARBOLES, PERMITE ALMACENARINFORMACIÓN ORDENADA.

Page 20: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Búsqueda en un ABB ordenado

30/5/2018 21

Sea T los números naturales. Podemos representar un conjunto de números naturalesmediante un ABB ordenado sobre T, y en su orden natural, y efectuar x ∈ C mediantebuscar(A).

buscar(x, A) =Si (A = Ø) “NO”Sino

Si (x = valor (A)) “SI”Sino

Si (x < valor(A)) buscar(x, izq(A))Sino buscar(x, der(A))

Ej. a) buscar(2, (15, (10, (7, Ø, Ø), (12, (11, Ø, Ø), Ø) ), (30, (21, Ø, (25, Ø, Ø) ), Ø)) )== buscar(2, (10, (7, Ø , Ø ), (12, 11, Ø ))= buscar(2, (7, Ø , Ø))= buscar(2, Ø))= NO

A

2511

127

10

21

30

15

Page 21: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Búsqueda en un ABB ordenado …

30/5/2018 22

buscar(x, A) =Si (A = Ø) “NO”Sino

Si (x = valor (A)) “SI”Sino

Si (x < valor(A)) buscar(x, izq(A))Sino buscar(x, der(A))

Ej. b) buscar(21, (15, (10, (7, Ø, Ø), (12, (11, Ø, Ø), Ø) ), (30, (21, Ø, (25, Ø, Ø) ) , Ø))) =(Animación en qmatica y los alumnos en el pizarrón prueban)

= buscar(21, (30, (21, Ø, (25, Ø, Ø) ) , Ø ) )= buscar(21, (21, Ø, (25, Ø, Ø) ))= SI

A

2511

127

10

21

30

15

Page 22: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Costo de búsqueda en un ABB en el peor caso

30/5/2018 23

La esperanza (el caso promedio) para la búsqueda en un ABB construido al azar es,proporcional al logaritmo en base 2 del número de nodos.

a = k (log2 (n)), k: constante menor que 2. (1,386)a = 1,386 (log2 (n)

Árbol binario degenerado con “n” nodos

A A

Árbol binario completo con “n” nodos (bien equilibrado)

a = n a = log2 (n + 1)

Árbol binariocompleto: Cadavértice interno(verdes) tieneexactamente doshijos y los nodosterminales(negros) ningúnhijo.

A

Page 23: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Gráfica comparativa de los costos de búsqueda en el peor caso

30/5/2018 24

Árbol binario bien equilibrado: a = lg(n + 1)

Árbol binario construido al azar: a = 1.386 lg(n)Árbol binario degenerado: a = n

n

a

Page 24: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Inserción en un ABB ordenado

30/5/2018 25

El objetivo es construir un ABB ordenado y que sirva para la búsqueda. El algoritmo quese presenta a continuación, se inicia con un ABB vacío, y construye un ABB ordenadocuando los objetos vienen en forma aleatoria.

insertar(x, A) =Si (A = Ø) (x, Ø, Ø)Sino

Si (x = valor (A)) ASino

Si (x < valor(A)) A(izq→ insertar(x, izq(A)))Sino A(der→ insertar(x, der(A)))

El subárbol izquierdo,se reemplaza por loque resulta deinsertar por izquierdade A.

Ej.: supongamos A = Ø y, se desea insertar la sucesión de nros. aleatorios: 82, 35, 24,88, 5, 58, 57, ...

82: insertar(82, A = Ø) = (82, Ø, Ø) A 82Después de insertar

Page 25: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Inserción en un ABB ordenado …

30/5/2018 26

insertar(x, A) =Si (A = Ø) (x, Ø, Ø)Sino

Si (x = valor (A)) ASino

Si (x < valor(A)) A(izq→ insertar(x, izq(A)))Sino A(der→ insertar(x, der(A)))

35: insertar(35, (82, Ø, Ø)) = A(izq→ insertar(35, izq(A)))

A= A(izq→ insertar(35, Ø))

Ø Ø

= (82, (35, Ø , Ø) , Ø)

I Dder(A)izq(A)

A

Ø Ø

Ø

82

82

35

Después de insertar

= A(izq→ (35, Ø , Ø))

Page 26: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Inserción en un ABB ordenado …

30/5/2018 27

insertar(x, A) =Si (A = Ø) (x, Ø, Ø)Sino

Si (x = valor (A)) ASino

Si (x < valor(A)) A(izq→ insertar(x, izq(A)))Sino A(der→ insertar(x, der(A)))

24: insertar(24, (82, (35, Ø , Ø) , Ø)) = A(izq→ insertar(24, (35, Ø , Ø))))

A= A(izq→ insertar(24, Ø))

Ø Ø

Ø

= A(izq→ (24, Ø , Ø))

= (82, (35, (24, Ø , Ø) , Ø) , Ø)

A82

35

82

35

24

Después de insertar

Page 27: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Inserción en un ABB ordenado …

30/5/2018 28

insertar(x, A) =Si (A = Ø) (x, Ø, Ø)Sino

Si (x = valor (A)) ASino

Si (x < valor(A)) A(izq→ insertar(x, izq(A)))Sino A(der→ insertar(x, der(A)))

88: insertar(88, (82, (35, (24, Ø , Ø) , Ø) , Ø)) = A(der→ insertar(88, Ø))

= A(der→ (88, Ø , Ø))

= (82, (35, (24, Ø , Ø) , Ø) , (88, Ø , Ø))A

82

35

24

A82

35

24

88Después de insertar

Page 28: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Inserción en un ABB ordenado …

30/5/2018 29

insertar(x, A) =Si (A = Ø) (x, Ø, Ø)Sino

Si (x = valor (A)) ASino

Si (x < valor(A)) A(izq→ insertar(x, izq(A)))Sino A(der→ insertar(x, der(A)))

5: insertar(5, (82, (35, (24, Ø , Ø) , Ø) ,(88, Ø ,Ø)) Los alumnos en el pizarrón

A82

35

24

88

Page 29: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Eliminación en un ABB ordenado:

30/5/2018 30

Caso:

1: Borrar un nodo sin hijos o nodo hoja (129) , así que podemos eliminarlo:

Simplemente se borra y se establece a nulo el puntero de su padre.

Page 30: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Eliminación en un ABB ordenado:

30/5/2018 31

Caso:

2: Borrar un nodo con un subárbol hijo (201) (izq o der: vincular el abuelo con su hijo):

Page 31: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Eliminación en un ABB ordenado:

30/5/2018 32

Caso:

3: Borrar un nodo con dos subárboles hijos (534):

Caso III: el nodo 534 tiene dos hijos.

En este caso, encontramos el sucesor de 534: el nodo más a la izquierda (el más pequeño: -) en el subárbol derecho, que lo reemplazará.

El sucesor tiene como máximo un hijo, por lo que podemos eliminarlo fácilmente.

Page 32: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Eliminación en un ABB ordenado:

30/5/2018 33

Caso:

3: Borrar un nodo con dos subárboles hijos (534):

Caso III:El nodo 168 tiene dos hijos.

En este caso, encontramos el sucesor de 168 (el mas pequeño) , el nodo más a la izquierda en el subárbol derecho - que lo reemplazará (el 219).

Page 33: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles: Hasta aquí vimos:

30/5/2018

Arboles

Operaciones básicas:

Binarios (AB)

Generales (A)

De búsqueda ordenados (ABB)

Recorridos

Inserción

Búsqueda – Complejidad

Preorden

Inorden

Posorden

Eliminación

Próxima clase implementaciones de ABB

Page 34: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

UNIDAD 6: Contenedores No Lineales

Arboles

(Nivel de implementación)

30/5/2018 35

Apuntes de apoyo para clases teóricas.Para una conceptualización completa de los temas, los alumnos deberán asistir a las clases

teóricas y completar con lectura del material bibliográfico propuesto.

Tiempo de exposición: 2 hs

Page 35: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles Binarios (AB): Implementación

30/5/2018 36

AB

(III) Secuencial: único array

(II) Listas enlazada

(I) Con tipos recursivos de un lenguaje (Haskell)

a.Con asignación estática de memoria (Cursores)

b.Con asignación dinámica de memoria (Punteros)

El principal requerimiento para cualquier representación de un árbol es:- tener acceso directo a la raíz y- dado cualquier nodo del árbol, que se tenga acceso directo a sus hijos.

Page 36: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 37

Arboles binarios (AB):

(I) Implementación con tipos recursivos de un lenguaje

Page 37: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles binarios (AB): (I) Implementación con tipos recursivos

30/5/2018 38

Un tipo Arbol sobre elementos del tipo genérico a puede ser construído de dos formas:

(1) Aplicando un constructor de dato (al que nosotros llamaremos Nodo) a tres parámetros:

- el primer arg. de tipo a (valor de la raíz)

- el segundo arg. de tipo Arbol sobre a (que será el subárbol I)

- el tercero arg. de tipo Arbol sobre a (que será el subárbol D)

(2) Usando un constuctor de dato (al que nosotros llamaremos Vacio) para indicar árbol vacío.

Código Haskell:

data Arbol a = Nodo a (Arbol a) (Arbol a) | Vacioderiving Show

Page 38: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 39

Ejemplo I: Arbol constante de caracteres:

data Arbol a = Nodo a (Arbol a) (Arbol a) | Vacio deriving Show

arbolChar :: Arbol Char

arbolChar = Nodo ‘A’ (Nodo ‘B’

(Nodo ‘D’ Vacio Vacio)

Vacio)

(Nodo ‘C’

(Nodo ‘G’ Vacio Vacio)

(Nodo ‘H’ Vacio Vacio))

Arboles binarios (AB): (I) Implementación con tipos recursivos

Page 39: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 40

Ejemplo II: Arbol constante cuyos nodos contendrán números enteros

data Arbol a = Nodo a (Arbol a) (Arbol a) | Vacio deriving Show

arbolInt :: Arbol Int

arbolInt = Nodo 10 (Nodo 6 Vacio (Nodo 8 Vacio Vacio))

(Nodo 15 Vacio Vacio)

Arboles binarios (AB): (I) Implementación con tipos recursivos

Page 40: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 41

preorden :: Arbol a -> [a]

preorden Vacio = []

preorden (Nodo raiz izq der) =

[raiz] ++ preorden izq ++ preorden der

Programa Haskell: ABBconstante.hs

preorden(arbolInt) = [10,6,8,15]

Arboles binarios (AB): Recorridos(I) Implementación con tipos recursivos

Page 41: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 42

inorden :: Arbol a -> [a]

inorden Vacio = []

inorden (Nodo raiz izq der) =

inorden izq ++[raiz] ++ inorden der

Programa Haskell: ABBConstante.hs

inorden(arbolInt) = [6,8,10,15]

Arboles binarios (AB): Recorridos(I) Implementación con tipos recursivos

Page 42: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 43

posorden :: Arbol a -> [a]

posorden Vacio = []

posorden (Nodo raiz izq der) =

posorden izq ++ posorden der ++ [raiz]

Programa Haskell: ABBconstante.hs

posorden(arbolInt) = [8,6,15,10]

Arboles binarios (AB): Recorridos(I) Implementación con tipos recursivos

Page 43: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 44

ABB: Algoritmo de Inserción(I) Implementación con tipos recursivos

data Arbol a = Nodo a (Arbol a) (Arbol a) | Vacio

deriving Show

insertArbol :: Ord a => a -> Arbol a -> Arbol a

insertArbol elemento Vacio = Nodo elemento Vacio Vacio

insertArbol elemento (Nodo raiz izq der)

| elemento < raiz = Nodo raiz (insertArbol elemento izq) der

| elemento > raiz = Nodo raiz izq (insertArbol elemento der)

| elemento == raiz = Nodo raiz izq der

Page 44: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 45

ABB: Algoritmo de construcción de un árbol BB a partir de una lista

Ej:

Programa Haskell: ABB.hs (ABB.pdf)

Entrada: Lista de elementos: [15,8,6,10]

Salida: arbolInt : Nodo 10 (Nodo 6 Vacio (Nodo 8 Vacio Vacio))

(Nodo 15 Vacio Vacio)

deListaaArbol :: Ord a => [a] -> Arbol a

deListaaArbol = foldr insertArbol Vacio

4° en evaluar ( 3° en evaluar ( 2° en evaluar ( 1° en evaluar ) ) )

insertArbol 15 ( insertArbol 8 ( insertArbol 6 (insertArbol 10 Vacio)))

Page 45: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 46

ABB: algoritmo para buscar un elemento

(I) Implementación con tipos recursivos

buscar :: Ord a => a -> Arbol a -> Bool

buscar x Vacio = False

buscar x (Nodo raiz izq der) =

if x == raiz then True

else

if x < raiz then buscar x izq

else buscar x der

Programa Haskell: ABB.hs

>buscar 5 arbolInt (pertenece 5 arbolInt)

False

>buscar 8 arbolInt

True

Page 46: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 47

Arboles binarios (AB):

(II) Implementación con listas enlazadascon asignación estática de memoria

(arrays)

Page 47: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

AB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

30/5/2018 48

El árbol binario usa:- tres arrays paralelos, VALOR, IZQ y DER.

Si un nodo N del árbol se encuentra en la posición K, entonces:- VALOR(K): contiene el dato del nodo N.- IZQ(K): contiene la localización del hijo izquierdo del nodo N.- DER(K): contiene la localización del hijo derecho del nodo N.

- IZQ(0): contiene la localización de la raíz del árbol.

Si el árbol está vacío, entonces IZQ(0) = 0Si el árbol NO está vacío, entonces IZQ(0) 0

DER(0) contiene la localización del primer nodo vacío, y es el inicio de una lista enlazada de nodos disponibles sobre el Array DER

Page 48: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 49

Ejemplo: Diagrama esquemático: RAIZ

A

CB

HD G

0 1 2 3 4 5 6 7 8 9 10 11 12

VALOR A D B G C H

IZQ 1 3 0 2 0 5 0

DER 4 9 0 0 6 0 7 8 10 11 12 0 0

AB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

Page 49: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Estructura de datos en Pascal:

Const M = 100 {cantidad total de memoria reservada}Type

Tipo_elemento = Char; AB = Record

Valor: Array [0..M] of tipo_elemento;Izq : Array [0..M] of Integer;Der: Array [0..M] of Integer;

end;

Var A: AB;

AB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

Carpeta Arboles en Pascal: Programa Pascal: Arbolarr.pasUnit Pascal: ABBarra.pas

Page 50: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Operaciones: Recorrido Preorden

Procedure Preorden(A: AB, Raíz:Integer); Begin

if Raiz <> 0 thenBegin

Write(A.Valor[Raíz], ’ ‘);Preorden(A, A.IZQ[Raíz]);Preorden(A, A.DER[Raiz]);

end;End;

Prueba del algoritmo en el Pizarrón.

0 1 2 3 4 5 6 7 8 9 10 11 12

VALOR A D B G C H

IZQ 1 3 0 2 0 5 0

DER 4 9 0 0 6 0 7 8 10 11 12 0 0

Los recorridos Inorden y Posordense dejan como ejercicio.

AB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

Page 51: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Operaciones: Búsqueda de un elemento:

Function Buscar(t:Tipo_Elemento; A: AB; Raíz:Integer): Boolean; Begin

if Raiz = 0 then Buscar:= Falseelse

if A.Valor[Raíz] = t then Buscar:=Trueelse

if A.Valor[Raíz] > t then Buscar:=Buscar(t, A, A.Izq[Raíz] )else Buscar:=Buscar(t, A, A.Der[Raíz]);

end;

Prueba del algoritmo en el Pizarrón.

0 1 2 3 4 5 6 7 8 9 10 11 12

VALOR 15 8 10 18 20 30

IZQ 1 3 0 2 0 5 0

DER 4 9 0 0 6 0 7 8 10 11 12 0 0

ABB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

Page 52: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Operaciones: Inserción de un elemento

Procedure Insertar(t:tipo_elemento; VAR A:AB; Var Raiz:Integer;Var Nuevo:Integer);Var Prox_Nuevo:Integer;Begin

If Raiz = 0 thenbegin {insertar el nuevo nodo}

Nuevo := A.DER[0]; Prox_Nuevo := A.DER[Nuevo];A.VALOR[Nuevo] := t; A.IZQ[Nuevo] := 0; A.DER[Nuevo] := 0;A.DER[0] := Prox_Nuevo;If A.IZQ[0] = 0 then A.IZQ[0] := Nuevo;

endelse

If (t < A.VALOR[Raiz]) then insertar(t,A,A.IZQ[Raiz], A.IZQ[Raiz]);else if (t > A.VALOR[Raiz]) then insertar(t, A, A.DER[Raiz], A.DER[Raiz]);

end;

ABB: (II.a) Implementación Enlazada con

Asignación Estática de Memoria

Page 53: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 54

Arboles binarios (AB):

(II) Implementación con listas enlazadascon asignación dinámica de memoria

(punteros)

Page 54: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 55

TypeTipo_Elemento= char; {o el tipo que corresponda}AB = ^Nodo;Nodo = Record

Valor : Tipo_Elemento;Izq: AB;Der: AB;

End;Var A:AB;

Ejemplo: Diagrama esquemático: A:RAIZ

A

CB

HD G

Estructura de datos en Pascal:

ABB: (II.b) Implementación Enlazada con

Asignación Dinámica de Memoria (Punteros)

Carpeta Arboles en Pascal: Programa Pascal: ArbolBB.pasUnit Pascal: ABBpunte.pas

Page 55: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Operaciones: Recorrido Preorden

Procedure Preorden(A: AB);begin

if A <> nil thenbegin

Writel(A^.Valor);Preorden(A^.Izq);Preorden(A^.Der);

end ;end;

Prueba del algoritmo en el Pizarrón.

Los recorridos Inorden y Posordense dejan como ejercicio.

ABB: (II.b) Implementación Enlazada con

Asignación Dinámica de Memoria (Punteros)

Page 56: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Operaciones: Búsqueda de un elemento en un ABB ordenado

Function Buscar(t:Tipo_Elemento; A: AB): Boolean; Begin

if A = Nil then Buscar:= Falseelse

if A^.Valor = t then Buscar:=Trueelse

if A^.Valor > t then Buscar:=Buscar(t, A^.Izq)else Buscar:= Buscar(t, A^.Der);

end;

Prueba del algoritmo en el Pizarrón.

ABB: (II.b) Implementación Enlazada con

Asignación Dinámica de Memoria (Punteros)

Page 57: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Operaciones: Inserción de un elemento en un ABB ordenado

Procedure Insertar(t:Tipo_Elemento; VAR A: AB);Var Nuevo:AB;Begin

If A = Nil thenbegin {insertar el nuevo nodo}

New(Nuevo);Nuevo^.Valor:= t; Nuevo^.IZQ := Nil; Nuevo^.DER:=Nil;A:= Nuevo;

endelse

If (t < A^.VALOR) then Insertar(t, A^.IZQ)else if (t > A^.VALOR) then insertar(t, A^.DER);

end;

ABB: (II.b) Implementación Enlazada con

Asignación Dinámica de Memoria (Punteros)

Prueba del algoritmo en el Pizarrón.

Page 58: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Implementación Enlazada con Asignación Dinámica de Memoria (Punteros) Eliminación en un ABB ordenado: Prueba en el pizarrón

Procedure eliminar(A:AB; t: Tipo_Elemento);Var aux: AB;Begin

if (A <> Nil) thenbegin

if A^.Valor < t then eliminar(A^.Der, t)else if A^.Valor > t then eliminar (A^.Izq, t)

else if A^.Valor = t)thenbegin

aux := A;if A^.Izq = nil then A := A^.Derelse if A^.Der = Nil then A := A^.Izq

else reemplazar(A^.Izq, aux);dispose(aux);

End;End;

End;

Procedure reemplazar(A: AB, aux: AB);Begin

if A^.Der = Nil then begin aux^.Valor := A^.Valor; aux := A; A := A^.Izq Endelse reemplazar(A^.Der, aux)

End;

Page 59: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

30/5/2018 60

Arboles binarios (AB):

(III) Implementación secuencial con un array

Page 60: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Utiliza únicamente un array al que llamaremos ARBOL, de la siguiente manera:

a) La raíz del árbol se guarda en ARBOL[1].

b) Si un nodo N está en ARBOL[K], entonces:

• Su hijo izquierdo está en ARBOL[2*K]

• Su hijo derecho está en ARBOL[2*K + 1]

c) Se usa 0 o un valor nulo para indicar subárbol vacío.

Ejemplo:

ARBOL

1 A

2 B

3 C

4 D

5 Nulo

6 G

7 H

8 Nulo

9 Nulo

10 Nulo

11 Nulo

12 Nulo

13 Nulo

14 Nulo

ABB: (III) Implementación Secuencial (Array)

Page 61: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Definición de la Estructura de Datos y operaciones:

ABB: (III) Implementación Secuencial (Array)

Const = 100; {cantidad de memoria reservada para el arbol}Type

Tipo_Elemento= char; {o el tipo que corresponda}AB = Array[1..M] of Tipo_Elemento;

Var Arbol: AB;

Operaciones:

1) Recorrido Preorden2) Recorrido Inorden3) Recorrido Posorden4) Buscar (t, Arbol)5) Insertar(t, Arbol)6) Eliminar(t, Arbol)

Se dejan como ejercicio

Page 62: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Resumiendo, la implementación de Arboles Binarios la realizamos con:

30/5/2018 63

AB

(III) Secuencial (1 array)

(II) Enlazada

(I) Con tipos recursivos de un lenguaje (Haskell)

a.Con asignación estática de memoria (Array)

b.Con asignación dinámica de memoria (Punteros)

Page 63: UNIDAD 6: Contenedores No Lineales (Incluye 2 clases de 2 ......Arboles Binarios de Búsqueda (ABB): Vamos a ver la primera estructura para facilitar la búsqueda y la inserción

Arboles: (próximas clases)

30/5/2018 64

A 2-3

AVL Otros tipos de árboles

etc

Sus operaciones

búsqueda

Inserción