Problema 14 70 del libro “termodinámica yunus a. cengel, michael a. boles quinta edición”
Trar Boles
-
Upload
mortvivant -
Category
Documents
-
view
35 -
download
0
Transcript of Trar Boles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM)
April 14, 2010
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
IntroduccionAplicacionesTerminologıa
Arboles: Estructuras no lineales
Idea formal: Un arbol es un grafo conexo sin ciclos
Idea intuitiva: Los arboles expresan relaciones jerarquicas enlas que:
Cada elemento (excepto el primero) tiene un unico superiorinmediatoCada elemento tiene varios siguientes inmediatos
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
IntroduccionAplicacionesTerminologıa
Son una generalizacion de las listas:
Listas: cada elemento tiene un unico sucesor.Arboles: los elementos pueden tener mas de un sucesor.
Permiten representar la nocion de jerarquıa. Ejemplos:
Arboles genealogicos: familiares, linguısticos.Arboles sintacticos.Estructura de los directorios.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
IntroduccionAplicacionesTerminologıa
Representacion de estructuras anidadas
Representacion de expresiones
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
IntroduccionAplicacionesTerminologıa
A los elementos de la relacion se les llama nodos
El unico nodo sin antecesores es la raız
Los nodos sin descendientes se llaman hojas y el resto nodosinternos
Se llama rama a la secuencia de nodos que lleva de la raız acualquiera de las hojas
Llamamos padre de un nodo a su antecesor inmediato
Llamamos hijos de un nodo a sus descendientes inmediatos
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
IntroduccionAplicacionesTerminologıa
Arboles binarios: todo nodo tiene siempre dos hijos (aunquealguno pueda ser vacıo). Un arbol binario puede ser vacıo.
Arboles generales: el numero de hijos de cada nodo esvariable.
Grado del arbol: maximo numero de hijos que un nodo puedetener → Arboles n-arios.
¡Los arboles binarios no son un caso particular de arbolesn-arios con n=2!:
En un arbol binario si un nodo tiene un solo hijo (el otro esvacıo), es preciso distinguir si se trata del hijo izquierdo oderecho.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
IntroduccionAplicacionesTerminologıa
¿Como distinguir un arbol binario de un arbol n-ario cuando n=2?Si para nosotros significa lo mismo
A
∅B y
A
B∅ ,es un arbol n-ario. Si significan dos cosas distintas, se trata de unarbol binario.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas
Operaciones a considerar:
crear un arbol vacıo,
construir un arbol a partir de un elmento y dos arboles,
consultar la raız,
calcular el hijo izquierdo,
calcular el hijo derecho, y
determinar si un arbol es vacıo.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas
Especificacion
especificacion ARBOLES-BINARIOS[ELEM]usa BOOLEANOStipos arbolBinoperaciones
arbolBBV acio : arbolBin(constructora)plantar : arbolBin× elemento× arbolBin→ arbolBin(constructora)raiz : arbolBin→ elementohijo− iz : arbolBin→ arbolBinhijo− de : arbolBin→ arbolBines− arbolBBV acio? : arbolBin→ bool
variables
e: elementoiz,de: arbol
ecuaciones
hijo− iz(arbolBBV acio) = errorhijo− iz(plantar(iz, e, de) = izhijo− de(arbolBBV acio) = errorhijo− de(plantar(iz, e, de) = deraiz(arbolBBV acio) = errorraiz(plantar(iz, e, de) = ees− arbolBBV acio?(arbolBBV acio) = ciertoes− arbolBBV acio?(plantar(iz, e, de)) = falso
fin-especificacion
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas
Observaciones:
Las constructoras son libres → No son necesarias ecuacionesde equivalencia.
Extension de la especificacion de arboles binarios. Operaciones aconsiderar:
calcular la altura de un arbol: el numero de nodos de la ramamas larga,
calcular el numero de nodos,
calcular el numero de hojas: aquellos cuyos hijos son vacıos, y
calcular la imagen especular de un arbol.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas
Especificacion
especificacion ARBOLES-BINARIOS+[ELEM]usa ARBOLES-BINARIOS[ELEM],BOOLEANOSoperaciones
altura : arbolBin→ natnum− nodos : arbolBin→ natnum− hojas : arbolBin→ natespecular : arbolBin→ arbolBin
variables
e: elementoiz,de: arbol
ecuaciones
altura(arbolBBV acio) = 0altura(plantar(iz, e, de)) = 1 + max(altura(iz), altura(de))num− nodos(arbolBBV acio) = 0num− nodos(plantar(iz, e, de)) = 1 + num− nodos(iz) + num− nodos(de)num− hojas(arbolBBV acio) = 0num− hojas(plantar(iz, e, de)) = 1⇐es− arbolBBV acio(iz) ∧ es− arbolBBV acio(de)num− hojas(plantar(iz, e, de)) = num− hojas(iz) + num− hojas(de)⇐¬(es− arbolBBV acio(iz)) ∨ ¬(es− arbolBBV acio(de))especular(arbolBBV acio) = arbolBBV acioespecular(plantar(iz, e, de)) = plantar(especular(dr), e, especular(iz))
fin-especificacion
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas
Representacion:
Cada nodo de la estructura enlazada representa a un nodo delarbol.
Cada arista se representa mediante dos punteros.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas
Representacion
tipos
enlace-arbol: puntero a nodo-arbolnodo-arbol : reg
valor: elementoiz,de: enlace-arbol
fregarbolBin: enlace-arbol
ftipos
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas
Operaciones:
Operacion
fun arbolBBVacio() dev a: arbolBina ← nil
fin fun
Operacion
fun plantar(iz: arbolBin, e: elemento, de: arbolBin) dev a:arbolBin
reservar(a)a ↑ .valor ← ea ↑ .iz ← iza ↑ .de ← de
fin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas
Operacion
fun hijo-iz(a: arbolBin) dev b: arbolBinsi a = nil entonces
Error(arbol vacıo)si no
b ← a ↑ .izfin si
fin fun
Operacion
fun hijo-de(a: arbolBin) dev b: arbolBinsi a = nil entonces
Error(arbol vacıo)si no
b ← a ↑ .drfin si
fin funR. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas
Operacion
fun raiz(a: arbolBin) dev e: elementosi a = nil entonces
Error(arbol vacıo)si no
e ← a ↑ .valorfin si
fin fun
Operacion
fun es-arbolBBVacio(a: arbolBin) dev b: boolb ← (a=nil)
fin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas
Idea: Almacenar el arbol por niveles dejando los huecos paraa los hijos ”ausentes”
|’+’ | ’9’ | ’-’ | | | ’*’ | 4 | | | | | ’5’ | ’8’ | | | |0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Para un arbol de altura n se necesita un array de longitud2n − 1Si un nodo esten la posicion i:
Su hijo izquierdo estara en la posicion 2*i+1Su hijo derecho estara en la posicion 2*i+2
Si un nodo esta en la posicion i su padre estara en la b i−12 c
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles binariosImplementacion con punterosImplementacion con tablas
Quedan huecos. Es preferible para minimizarlos que el arbolsea completo o semicompleto
Si el arbol va a contener pocos nodos (en relacion a su altura)sera preferible utilizar la implementacion basada en punteros
La implementacion con tablas exige que todos los nodos estenconsecutivos, mientras que la de punteros puede aprovechar”trozos”pequenos de memoria.
Ventaja: en la implementacion con tablas es posible pasardirectamente de los hijos al padre, mientras que en la depunteros habrıa que incluir un puntero adicional
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Operaciones a considerar:
Habra tres constructoras: plantar que crea un arbol general apartir de una raız y una lista de arboles hijos.bosqueVacıo que crea una lista vacıa de arbolesanadirArbol a una lista de arboles.
consultar la raız,
calcular la sucesion de hijos,
calcular el numero de hijos,
calcular el hijo i-esimo, y
determinar si un arbol es una hoja.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Notas:
Los tipos bosque y arbol se definen mutuamente:
Un arbol se construye a partir de un bosque.Un bosque consta de una lista de arboles.Caso base: un bosque vacıo que da lugar a un arbol que notiene hijos (hoja) → No existe ”el arbol vacıo” para arbolesgenerales.
Como el numero de hijos es variable necesitamos un tipo pararepresentar las listas de arboles → ”bosques”.
Las constructoras (libres) del tipo bosque son bosqueVacio yaniadirArbol.
plantar es la unica constructora del tipo arbol.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Especificacion
especificacion ARBOLES-GENERALES[ELEM]usa BOOLEANOS, NATURALEStipos arbolGen, bosqueoperaciones
plantar : elemento× bosque→ arbolGen(constructora)bosqueV acio : bosque(constructora)aniadirArbol : arbolGen× bosque→ bosque(constructora)raiz : arbolGen→ elementohijos : arbolGen→ bosquenumHijos : arbolGen→ natlongitud : bosque→ natsub− arbol : arbolGen× nat→ arbolGen−[−] : bosque× nat→ arbolGenes− hoja? : arbolGen→ bool
variables
e: elementoa: arbolGenb: bosquei: nat
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Especificacion
ecuaciones
raiz(plantar(e, b)) = ehijos(plantar(e, b)) = bnumHijos(plantar(e, b)) = longitud(b)longitud(bosqueV acio) = 0longitud(aniadirArbol(a, b)) = 1 + longitud(b)subarbol(plantar(e, b), i) = b[i]b[i] = error ⇐ i = 0 ∨ i > longitud(b)aniadirArbol(a, b)[1] = aaniadirArbol(a, b)[i] = b[i− 1]⇐ 1 < i ∧ i ≤ longitud(b) + 1es− hoja?(a) = (numHijos(a) = 0)
fin-especificacion
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Extension de los arboles generales:
calcular la altura de un arbol,
calcular el numero de nodos,
calcular el numero de hojas, y
calcular el grado de un arbol.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Especificacion
especificacion ARBOLES-GENERALES+[ELEM]usa ARBOLES-GENERALES[ELEM],NATURALESoperaciones
altura : arbolGen→ natnum− nodos : arbolGen→ natnum− hojas : arbolGen→ natgrado : arbolGen→ nat
Operaciones privadas
altura− bosque : bosque→ natnum− nodos− bosque : bosque→ natnum− hojas− bosque : bosque→ natgrado− bosque : bosque→ nat
variables
e: elementoa: arbolGenb: bosque
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Especificacion
ecuaciones
altura(plantar(e, b)) = 1 + altura− bosque(b)altura− bosque(bosqueV acio) = 0altura− bosque(aniadirArbol(a, b)) = max(altura(a), altura− bosque(b))num− nodos(plantar(e, b)) = 1 + num− nodos− bosque(b)num− nodos− bosque(bosqueV acio) = 0num−nodos−bosque(aniadir(a, b)) = num−nodos(a)+num−nodos−bosque(b)num− hojas(plantar(e, bosqueV acio)) = 1num− hojas(plantar(e, aniadir(a, b))) = num− hojas− bosque(aniadir(a, b))num− hojas− bosque(bosqueV acio) = 0num−hojas−bosque(aniadir(a, b)) = num−hojas(a)+num−hojas−bosque(b)grado(plantar(e, b)) = max(long(b), grado− bosque(b))grado− bosque(bosqueV acio) = 0grado− bosque(aniadir(a, b)) = max(grado(a), grado− bosque(b))
fin-especificacion
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Representacion: Utilizamos un arbol binario para representarlo.Ejemplo:
A
D
H
CB
GF
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
se representa como:
A
∅B
C
D
∅H
∅
F
G∅
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Semantica del arbol binario:
La arista izquierda de un nodo senala al primer hijo.
La arista derecha de un nodo senala a su primer hermano.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Representacion
tipos
enlace-arbol: puntero a nodo-arbolnodo-arbol : reg
valor: elementoprimerHijo,siguienteHermano: enlace-arbol
fregarbolGen: enlace-arbolbosque: enlace-arbol
ftipos
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Operaciones:
Operacion
fun plantar( e: elemento, b: bosque) dev a: arbolGenreservar(a)a ↑ .valor ← ea ↑ .primerHijo ← ba ↑ .siguienteHermano ← nil
fin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Operacion
fun bosqueVacio() dev b: bosqueb ← nil
fin fun
Operacion
proc aniadirArbol(a: arbolGen, b:bosque)a ↑ .siguienteHermano← bb← a
fin proc
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Ejemplo. Construccion del arbol:
A
DCB
Operacion
D ← plantar(D, bosqueV acio())
D
∅∅
que representa al arbol:
D
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
B ← plantar(B, bosqueV acio())C ← plantar(C, bosqueV acio())Bosque← bosqueV acio()aniadirArbol(D,Bosque)
Bosque = [D]
D
∅∅
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
aniadirArbol(C, Bosque)aniadirArbol(B, Bosque)
Bosque = [B, C,D] a traves del enlace siguienteHermano!!!
B
C
D
∅∅
∅
∅
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Arbol← plantar(A, Bosque)
A
∅B
C
D
∅∅
∅
∅
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Operacion
fun raiz(a: arbolGen) dev e: elementoe← a ↑ .valor
fin fun
Operacion
fun hijos(a: arbolGen) dev b: bosqueb← a ↑ .primerHijo
fin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Operacion
fun numHijos(a: arbolGen) dev n: natn← longitud(a ↑ .primerHijo)
fin fun
Operacion
fun longitud(b: bosque) dev n: natvar c: enlace-arbolc← bn← 0mientras c 6= nil hacer
n← n + 1c← c ↑ .siguienteHermano
fin mientrasfin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Operacion
fun sub-arbol(a: arbolGen, i: nat) dev h: arbolGenh← consultar(a ↑ .primerHijo, i)
fin fun
Operacion
fun consultar(b: bosque, i: nat) dev h: arbolGensi i=0 entonces
Error(Indice no valido)si no
h← bj ← 1mientras h 6= nil ∧ j 6= i hacer
j ← j + 1h← h ↑ .siguienteHermano
fin mientrassi h=nil entonces
Error(Indice no valido)fin si
fin sifin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Especificacion de los arboles generalesImplementacion de los arboles generales
Operacion
fun es-hoja?(a: arbolGen) dev r: boolr ← (a ↑ .primerHijo = nil)
fin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Ejemplos:
A
C
GF
B
ED
Recorridos:
Preorden (Raiz-Izq-Der): A,B,D,E,C,F,G
Inorden (Izq-Raiz-Der): D,B,E,A,F,C,G
Postorden(Izq-Der-Raiz): D,E,B,F,G,C,A
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Especificacion
especificacion RECORRIDOS-ARBOLES-BINARIOS[ELEM]usa ARBOLES-BINARIOS[ELEM],LISTAS[ELEM]operaciones
preorden : arbolBin→ listainorden : arbolBin→ listapostorden : arbolBin→ lista
variables
e: elementoiz,de: arbolBin
ecuaciones
preorden(arbolBBV acio) = []preorden(plantar(iz, e, de) = [e] + +(preorden(iz) + +preorden(de))inorden(arbolBBV acio) = []inorden(plantar(iz, e, de) = inorden(iz) + +([e] + +inorden(de))postorden(arbolBBV acio) = []postorden(plantar(iz, e, de) = postorden(iz) + +(postorden(de) + +[e])
fin-especificacion
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Implementacion:
Operacion
fun preorden(a: arbolBin) dev l: natvar r: listasi es-arbolBBVacio(a) entonces
l← lista− vacia()si no
r ← preorden(hijo− iz(a))aniadir − izq(raiz(a), r)l← concatenar(r, preorden(hijo− de(a))
fin sifin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Operacion
fun inorden(a: arbolBin) dev l: natvar r: listasi es-arbolBBVacio(a) entonces
l← lista− vacia()si no
r ← inorden(hijo− iz(a))aniadir − der(r, raiz(a))l← concatenar(r, inorden(hijo− de(a))
fin sifin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Operacion
fun postorden(a: arbolBin) dev l: natvar r: listasi es-arbolBBVacio(a) entonces
l← lista− vacia()si no
r ← postorden(hijo− iz(a))l← concatenar(r, postorden(hijo− de(a))aniadir − der(l, raiz(a))
fin sifin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Especificacion
especificacion RECORRIDOS-ARBOLES-GENERALES[ELEM]usa ARBOLES-GENERALES[ELEM],LISTAS[ELEM]operaciones
preorden : arbol→ listapostorden : arbol→ listaniveles : arbol→ listafrontera : arbol→ lista (La lista de hodos hojas tomados de izquierda a derecha)
operaciones privadas
preorden− bosque : bosque→ listapostorden− bosque : bosque→ listaniveles− bosque : bosque→ lista− + +− : bosque× bosque→ bosquefrontera− bosque : bosque→ lista
variables
e: elementoa: arbolb, b’: bosque
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Especificacion
ecuaciones
preorden(plantar(e, b)) = [e] + +preorden− bosque(b)preorden− bosque(bosqueV acio) = []preorden− bosque(aniadirArbol(a, b)) = preorden(a) + +preorden− bosque(b)
postorden(plantar(e, b)) = postorden− bosque(b) + +[e]postorden− bosque(bosqueV acio) = []postorden−bosque(aniadirArbol(a, b)) = postorden(a)++postorden−bosque(b)
niveles(plantar(e, b)) = [e] + +niveles− bosque(b)niveles− bosque(bosqueV acio) = []
niveles− bosque(aniadirArbol(plantar(e, b′), b︸ ︷︷ ︸
Lista de arboles
)) =
[e] + +niveles− bosque(b + +b′)
bosqueV acio + +b = baniadirArbol(a, b′) + +b = aniadirArbol(a, b′ + +b)
fin-especificacion
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Especificacion
ecuaciones
frontera(plantar(e, bosqueV acio)) = [e]frontera(plantar(e, aniadirArbol(a, b))) =
frontera− bosque(aniadirArbol(a, b))frontera− bosque(bosqueV acio) = []frontera− bosque(aniadirArbol(a, b)) = frontera(a) + +frontera− bosque(b)
fin-especificacion
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Implementacion:
Operacion
fun preorden(a: arbolGen) dev l: natvar b: bosque, k: listal← unitaria(raiz(a))b← hijos(a)n← longitud(b)desde i=1 hasta n hacer
k ← preorden(consultar(b, i))l← concatenar(l, k)
fin desdefin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Operacion
fun postorden(a: arbolGen) dev l: natvar b: bosque, k: listal← lista− vacia()b← hijos(a)n← longitud(b)desde i=1 hasta n hacer
k ← postorden(consultar(b, i))l← concatenar(l, k)
fin desdeaniadir − der(l, raiz(a))
fin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Operacion
fun frontera(a: arbolGen) dev l: natvar b: bosque, k: listasi es-hoja(a) entonces
l← unitaria(raiz(a))si no
l← lista− vacia()b← hijos(a)n← longitud(b)desde i=1 hasta n hacer
k ← frontera(consultar(b, i))l← concatenar(l, k)
fin desdefin si
fin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arboles binariosArboles generales
Operacion
fun niveles(a: arbolGen) dev l: natvar sig, hijo: arbol, b: bosque, c: cola[arbol]si es-hoja(a) entonces
l← unitaria(raiz(a))si no
l← lista− vacia()c← cola− vacia()encolar(a, c)mientras ¬es− cola− vacia(c) hacer
sig ← primero(c))desencolar(c)aniadir − der(l, raiz(sig))b← hijos(sig)n← longitud(b)desde i=1 hasta n hacer
hijo← consultar(b, i)encolar(hijo, c)
fin desdefin mientras
fin sifin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Caracterısticas:
Son arboles binarios cuyos nodos almacenan datos entre losque existe una relacion de orden.
Cada nodo es mayor que todos los nodos de su hijo izquierdoy menor que todos los nodos que los de sus hijos derechos.
Permiten acceder a la informacion eficientemente.
Operaciones mas habituales:
BuscarInsertarBorrar
El contenido de cada nodo se utiliza como clave para accedera la informacion asociada.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Ejemplo: un diccionario.
Para cada palabra un diccionario asocia una informacion → Elnombre de la palabra es la clave.
La clave esta ordenada segun orden alfabetico.
La operacion tıpica es buscar
En nuestro arbol el contenido de los nodos serıa la clave obien la clave mas la informacion.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Operaciones a considerar:
crear un arbol binario de busqueda vacıo,
insertar un elemento,
determinar si un elemento pertenece al arbol,
consultar el menor elemento,
consultar el mayor elemento,
eliminar un elemento, y
determinar si el arbol es vacıo
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Especificacion
especificacion ARBOLES-BINARIOS-BUSQUEDA[ELEM]usa BOOLEANOStipos arbolBBoperaciones
arbolBBV acio : arbolBB(constructora)plantar : arbolBB × elemento× arbolBB → arbolBB(constructora)insertar : elemento× arbolBB → arbolBBesta : arbolBB → boolminimo : arbolBB → elementomaximo : arbolBB → elementoeliminar : elemento× arbolBB → arbolBBes− arbolBBV acio? : arbolBB → bool
variables
e, f: elementoiz,de: arbolBB
ecuaciones
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Especificacion
ecuaciones
plantar(iz, e, dr) = error ⇐ ¬(es− arbolBBV acio(iz) ∨ e >maximo(iz)) ∨ ¬(es− arbolBBV acio(de) ∨ e < minimo(de))
insertar(e, arbolBBV acio) = plantar(arbolBBV acio, e, arbolBBV acio)insertar(e, plantar(iz, e, dr)) = plantar(iz, e, dr)insertar(e, plantar(iz, f, dr)) = plantar(insertar(e, iz), f, dr)⇐ e < finsertar(e, plantar(iz, f, dr)) = plantar(iz, f, insertar(e, de))⇐ e > f
esta(e, arbolBBV acio) = falsoesta(e, plantar(iz, e, dr)) = ciertoesta(e, plantar(iz, f, dr)) = esta(e, iz)⇐ e < festa(e, plantar(iz, f, dr)) = esta(e, dr)⇐ e > f
minimo(arbolBBV acio) = errorminimo(plantar(arbolBBV acio, e, dr) = eminimo(plantar(iz, e, de) = minimo(iz)⇐ ¬es− arbolBBV acio?(iz)
maximo(arbolBBV acio) = errormaximo(plantar(iz, e, arbolBBV acio) = emaximo(plantar(iz, e, de) = maximo(de)⇐ ¬es− arbolBBV acio?(de)
fin-especificacion
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Especificacion
ecuaciones
eliminar(e, arbolBBV acio) = arbolBBV acioeliminar(e, plantar(iz, e, arbolBBV acio)) = izeliminar(e, plantar(arbolBBV acio, e, de)) = deeliminar(e, plantar(iz, e, dr)) =plantar(iz, minimo(dr), eliminar(minimo(dr), dr))⇐¬es− arbolBBV acio?(iz) ∧ ¬es− arbolBBV acio?(de)eliminar(e, plantar(iz, f, dr)) = plantar(eliminar(e, iz), f, dr)⇐ e < feliminar(e, plantar(iz, f, dr)) = plantar(iz, f, eliminar(e, de))⇐ e > f
es− arbolBBV acio?(arbolBBV acio) = ciertoes− arbolBBV acio?(plantar(iz, e, dr)) = falso
fin-especificacion
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Representacion: La misma que la de los arboles binarios.
Representacion
tipos
enlace-arbolBB: puntero a nodo-arbolBBnodo-arbolBB : reg
valor: elementoiz,de: enlace-arbolBB
fregarbolBB: enlace-arbolBB
ftipos
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Operaciones:
Operacion
fun arbolBBVacio() dev a: arbolBBa← nil
fin fun
Operacion
proc insertar(e: elemento, a: arbolBB)si a = nil entonces
reservar(a)a ↑ .valor ← ea ↑ .iz ← nila ↑ .de← nil
si nocasos
e < a ↑ .valor :insertar(e, a ↑ .iz)
e > a ↑ .valor :insertar(e, a ↑ .de)
fin casosfin si
fin proc
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Operacion
fun plantar(iz: arbolBB, e: elemento, dr: arbolBB) dev a: arbolBBreservar(a)a ↑ .iz ← iza ↑ .de← dea ↑ .valor ← e
fin fun
Operacion
fun esta(e: elemento, a: arbolBB) dev b: boolsi a = nil entonces
b← falsosi no
casose = a ↑ .valor :
b← ciertoe < a ↑ .valor :
b← esta(e, a ↑ .iz)e > a ↑ .valor :
b← esta(e, a ↑ .iz)fin casos
fin sifin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Operacion
fun minimo(a: arbolBB) dev e: elementosi a = nil entonces
Error(arbol vacıo)si no
si a ↑ .iz = nil entoncese← a ↑ .valor
si noe← minimo(a ↑ .iz)
fin sifin si
fin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Operacion
fun maximo(a: arbolBB) dev e: elementosi a = nil entonces
Error(arbol vacıo)si no
si a ↑ .de = nil entoncese← a ↑ .valor
si noe← maximo(a ↑ .de)
fin sifin si
fin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Operacion
proc eliminar(e: elemento, a: arbolBB)var b: arbolBBsi a 6= nil entonces
casose = a ↑ .valor :
casosa ↑ .de = nil :
b← aa← a ↑ .izliberar(b)
a ↑ .iz = nil :b← aa← a ↑ .deliberar(b)
a ↑ .de 6= nil ∧ a ↑ .de 6= nil :eliminar − aux(a, a ↑ .de)
fin casose < a ↑ .valor :
eliminar(e, a ↑ .iz)e > a ↑ .valor :
eliminar(e, a ↑ .de)fin casos
fin sifin proc
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Operacion
proc eliminar-aux(a,b: arbolBB)var c: arbolBBsi b ↑ .iz 6= nil entonces
eliminar − aux(a, b ↑ .iz)si no
a ↑ .valor ← b ↑ .valorc← bb← b ↑ .deliberar(c)
fin sifin proc
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
EspecificacionImplementacion
Operacion
fun es-arbolBBVacio(a: arbolBB) dev b: boolb ← (a=nil)
fin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Definicion
Un arbol binario es equilibrado en altura si cumple:
la diferencia entre las alturas de sus hijos es como mucho 1, y
ambos estan equilibrados en altura.
Disena un algoritmo que determine si un arbol binario estaequilibrado con la menor complejidad posible.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Consideremos el calculo de la altura:
Operacion
fun altura(a: arbolBin) dev alt: natsi es− arbolBBV acio(a) entonces
alt← 0si no
alt← 1 + max(altura(hijo− iz(a)), altura(hijo−de(a)))fin si
fin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
El tiempo de ejecucion es:
T (n) ={
c, si n = 0;T (p) + T (q) + c, si n > 0.
Donde:
n: numero de nodos del arbolp: numero de nodos del hijo izquierdop: numero de nodos del hijo derechop + q + 1 = nCasos:
Caso ”extremo”: q = 1 y p = n− 2. Entonces:
T (n) ={
c, si n = 0;T (1) + T (n− 2), si n > 0.
Caso promedio: q ≈ 12n y p ≈ 1
2n. Entonces:
T (n) ={
c, si n = 0;2T (n/2), si n > 0.
Luego el coste del calculo de la altura es lineal.R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Operacion
fun equilibrado-1(a: arbolBin) dev eq: boolsi es− arbolBBV acio(a) entonces
eq ← ciertosi no
eq ← equilibrado− 1(hijo− iz(a)) ∧ equilibrado− 1(hijo− de(a)) ∧diferencia(altura(hijo− iz(a)), altura(hijo− de(a)))
fin sifin funfun diferencia(n,m:nat) dev d: nat
si n ≥ m entoncesd← n−m
si nod← m− n
fin sifin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
El tiempo de ejecucion es:
T (n) ={
c, si n = 0;T (p) + T (q) + cn, si n > 0.
donde cn proviene de llamar a altura. Luego es Θ(n2).
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Ineficiencia: equilibrado− 1(hijo− iz(a)) calcula las alturas desus hijos aunque altura(hijo− iz(a) vuelve a hacerlo. Idea clave:Simultaneamente vemos is un arbol esta equilibrado y calculamossu altura:
Operacion
fun equilibrado− 2(a : arbolBin)dev〈eq : bool, alt : nat〉si es− arbolBBV acio(a) entonces〈eq, alt〉 ← 〈cierto, cero〉
si no〈eq − iz, alt− iz〉 ← equilibrado− 2(hijo− iz(a))〈eq − de, alt− de〉 ← equilibrado− 2(hijo− de(a))eq ← eq− iz∧eq−de∧ (diferencia(alt− iz, alt−de) ≤ 1)alt← 1 + max(alt− iz, alt− de)
fin sifin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
El tiempo de ejecucion es:
T (n) ={
c, si n = 0;T (p) + T (q) + c, si n > 0.
Luego es Θ(n).
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Dado un arbol:
Definicion
La distancia entre dos nodos es la longitud del unico camino quelos conecta.
Definicion
El diametro del arbol es la maxima distancia sobre todos los paresde nodos.
Disena un algoritmo de coste lineal que determine el diametro deun arbol binario dado.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Consideremos el subarbol izquierdo y el derecho:
Si los nodos que estan a la maxima distancia estan en elmismo hijo, el diametro es el mismo que el diametro del hijo.
Si estan de distintos el camino debe pasar por la raız. Paraque el camino sea maximo la distancia debe coincidir con lasuma de las alturas de los dos hijos.
Como no sabemos que alternativa nos lleva a la solucionprobamos las 3:
El camino esta en el hijo izquierdo.El camino esta en el hijo derecho.El camino esta en arbol principal.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Operacion
fun diametro(a : arbolBin) : 〈diam : ent, alt : nat〉si es− arbolBBV acio(a) entonces〈diam, alt〉 ← 〈−1, 0〉
si no〈diam− iz, alt− iz〉 ← diametro(hijo− iz(a))〈diam− de, alt− de〉 ← diametro(hijo− de(a))diam← max(max(diam−iz, diam−de), alt−iz+alt−de)alt← 1 + max(alt− iz, alt− de)
fin sifin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Definicion
Un arbol binario es zurdo si se da alguna de las siguientescondiciones:
es el arbol vacıo,
es un nodo hoja, o
sus hijos izquierdo y derecho son zurdos y mas de la mitad desus descendientes estan en el hijo izquierdo.
Determina si un arbol binario es zurdo con coste lineal.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Mas de la mitad de los descendientes estan en el hijoizquierdo:
di > di+dd2 ⇔ 2di > de + dd⇔ di > dd
Idea clave: Calculamos simultaneamente si un arbol es zurdoy el numero de hijos.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Operacion
fun zurdo(a : arbolBin) : 〈zurdo : bool, num : nat〉casos
es− arbolBBV acio(a) :〈zurdo, num〉 ← 〈cierto, 0〉
es− hoja(a) :〈zurdo, num〉 ← 〈cierto, 1〉¬es− arbolBBV acio(a) ∨ ¬es− hoja(a) :〈zur − iz, des− iz〉 ← zurdo(hijo− iz(a))〈zur − de, des− de〉 ← zurdo(hijo− de(a))zurdo← zur − iz ∧ zur − de(des− iz > des− de)num← 1 + des− iz + des− de
fin casosfin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
a Desarrolla un algoritmo que reconstruya un arbol binario apartir de las dos listas que definien sus recorridos en preordene inorden, suponiendo todos los elementos distintos.
b ¿Es posible reconstruir univocamente el arbol a partir de susrecorridos en inorden y postorden?
c ¿Y con las recorridos en preorden y postorden?
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Ambas listas poseen el mismo numero de elementos.
El primer elemento de lpre contiene la raız del arbol.
La raız esta en la lista lpre en la posicion k:
Los elementos anteriores a k forman el hijo izquierdo.Los elementos posteriores a k forman el hijo derecho.
¡Los elementos entre 2 y k de lpre son el recorrido en preordenpara subarbol izquierdo! por la recursividad de la definicion derecorrido en preorden.
Lo mismo ocurre con los elementos mayores que k
Idea clave: Aplicar la misma idea a cada recorrido parcial.
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Funciones auxiliares:
proc coger(n : nat, l : lista)mientras longitud(l) > n hacer
elim− der(l)fin mientras
fin proc
proc tirar(n : nat, l : lista)m← nmientras m > 0 ∧ ¬es− lista− vacia(l) hacer
elim− izq(l)m← m− 1
fin mientrasfin proc
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Apartado (a)
Operacion
fun reconstruir − 1(lpre, lin : lista) : a : arbolBinvar iz, de : arbolBin, lpre− iz, lpre− de, lin− iz, lin− de : listasi es− lista− vacia(lpre) entonces
a← arbolBBV acio()si no
x← izquierdo(lpre)k ← posicion(x, lin)lpre− iz ← copiar − lista(lpre); eliminar(lpre− iz); coger(k − 1, lpred− iz)lin− iz ← copiar − lista(lin); coger(k − 1, lin− iz)iz ← reconstruir − 1(lpre− iz, lin− iz)lpre− de← copiar − lista(lpre); tirar(k, lpre− de)lin− de← copiar − lista(lin); tirar(k, lin− de)de← reconstruir − 1(lpre− de, lin− de)a← plantar(iz, x, de)anular − lista(lpre− iz)anular − lista(lpre− de)anular − lista(lin− iz)anular − lista(lin− de)
fin sifin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Apartado (b)
Operacion
fun reconstruir − 2(lpost, lin : lista) : a : arbolBinvar iz, de : arbolBin, lpost− iz, lpost− de, lin− iz, lin− de : listasi es− lista− vacia(lpost) entonces
a← arbolBBV acio()si no
x← derecho(lpost)k ← posicion(x, lin)lpost− iz ← copiar − lista(lpost); coger(k − 1, lpred− iz)lin− iz ← copiar − lista(lin); coger(k − 1, lin− iz)iz ← reconstruir − 2(lpost− iz, lin− iz)lpost− de← copiar − lista(lpost); eliminar(lpost− de); tirar(k − 1, lpost− de)lin− de← copiar − lista(lin); tirar(k, lin− de)de← reconstruir − 1(lpost− de, lin− de)a← plantar(iz, x, de)anular − lista(lpost− iz)anular − lista(lpost− de)anular − lista(lin− iz)anular − lista(lin− de)
fin sifin fun
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles
Ideas generalesArboles binarios
Arboles generalesRecorridos de arboles
Arboles binarios de busquedaEjemplos y ejercicios
Arbol binario equilibrado en alturaDiametro de un arbol binarioArbol binario zurdoInferencia de un arbol binario a partir de listas
Apartado (c) Los siguiente arboles poseen el mismo recorrido enpreorden y postorden.
A
B
D∅
∅
A
∅B
∅D
R. Gonzalez del Campo - Yolanda Garcıa Ruiz (UCM) Arboles