unidad 6: contenedores no lineales (incluye 2 clases de 2 ......arboles binarios de búsqueda (abb):...
TRANSCRIPT
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
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)
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/
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.
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
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.
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
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
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
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
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
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
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
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
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
Á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
Á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
Á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
Á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.
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
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
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
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
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
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, Ø , Ø))
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
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
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
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.
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):
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.
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).
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
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
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.
30/5/2018 37
Arboles binarios (AB):
(I) Implementación con tipos recursivos de un lenguaje
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
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
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
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
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
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
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
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)))
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
30/5/2018 47
Arboles binarios (AB):
(II) Implementación con listas enlazadascon asignación estática de memoria
(arrays)
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
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
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
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
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
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
30/5/2018 54
Arboles binarios (AB):
(II) Implementación con listas enlazadascon asignación dinámica de memoria
(punteros)
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
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)
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)
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.
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;
30/5/2018 60
Arboles binarios (AB):
(III) Implementación secuencial con un array
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)
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
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)
Arboles: (próximas clases)
30/5/2018 64
A 2-3
AVL Otros tipos de árboles
etc
Sus operaciones
búsqueda
Inserción