Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en...
Transcript of Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en...
![Page 1: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/1.jpg)
Árboles
Programación de sistemas
Julio Villena Román <[email protected]>
MATERIALES CREADOS EN EL TRABAJO DE DIFERENTES AUTORES:
Carlos Delgado Kloos, M.Carmen Fernández Panadero, Raquel M.Crespo García, Carlos Alario Hoyos
1
![Page 2: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/2.jpg)
Concepto de árbol
Terminología
Implementación
Casos especiales
Árboles binarios de búsqueda
Montículos (heaps)
Contenidos
2
![Page 3: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/3.jpg)
Cita
3
“The structure of concepts is formally called a hierarchy and since ancient times has been a basic structure for all Western knowledge. Kingdoms, empires, churches, armies have all been structured into hierarchies. Tables of contents of reference material are so structured, mechanical assemblies, computer software, all scientific and technical knowledge is so structured...”
Robert M. Pirsig: Zen and the Art of Motorcycle Maintenance
![Page 4: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/4.jpg)
Un árbol es una estructura
de datos no lineal que
almacena los elementos
jerárquicamente
(generalización de las listas)
Concepto de árbol
4
![Page 5: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/5.jpg)
Ejemplos
1. Clasificación de la información en una
enciclopedia
5
![Page 6: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/6.jpg)
Ejemplos
2. Sistema de ficheros
6
![Page 7: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/7.jpg)
Ejemplos
3. Estructura organizativa de una empresa
4. Estructura de rangos del ejército
5. Estructura de un libro
…
7
![Page 8: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/8.jpg)
Definición no recursiva
• Un árbol consiste en un conjunto de nodos
y un conjunto de aristas, de forma que:
o Se distingue un nodo llamado raíz
o A cada nodo h (hijo), excepto la raíz, le llega
una arista de otro nodo p (padre)
o Para cada nodo hay un camino (secuencia de
aristas) único desde la raíz
o Los nodos que no tienen hijos se denominan
hojas
8
![Page 9: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/9.jpg)
Definición no recursiva
9
![Page 10: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/10.jpg)
Definición recursiva
• Un árbol es:
o Vacío
o Un nodo y cero o más árboles conectados
al nodo mediante una arista
* A los árboles que se conectan al nodo raíz los denominaremos
también “subárboles” 10
![Page 11: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/11.jpg)
Definición recursiva
11
![Page 12: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/12.jpg)
Definición recursiva
12
![Page 13: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/13.jpg)
Definición recursiva
13
![Page 14: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/14.jpg)
Definición recursiva
14
![Page 15: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/15.jpg)
Definición recursiva
15
![Page 16: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/16.jpg)
• Un nodo es externo, si no tiene hijos (es hoja)
o Según la definición recursiva: si todos los subárboles
conectados a ese nodo están vacíos
• Un nodo es interno, si tiene uno o más hijos
o Según la definición recursiva: si alguno de los subárboles
conectados a ese nodo no está vacío
• Un nodo es ascendiente de otro, si es padre suyo
o ascendiente de su padre
• Un nodo es descendiente de otro, si este último
es ascendiente del primero
o Los descendientes de un nodo forman un subárbol en el
que ese nodo hace de raíz
Terminología
16
![Page 17: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/17.jpg)
• Un camino de un nodo a otro, es una secuencia de
aristas consecutivas que llevan del primero al
segundo
o La longitud del camino es el número de aristas
• La profundidad de un nodo es la longitud del
camino de la raíz a ese nodo
• La altura de un árbol es el valor de la
profundidad del nodo más profundo
• El tamaño de un árbol es el número de nodos
que contiene
Terminología
17
![Page 18: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/18.jpg)
Ejemplo
Nodo Altura Profundidad Tamaño Int./Ext.
a 2 0 7 Interno
b 1 1 3 Interno
c 0 1 1 Externo
d 0 1 1 Externo
e 0 1 1 Externo
f 0 2 1 Externo
g 0 2 1 Externo
18
![Page 19: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/19.jpg)
• Completa la tabla para el siguiente árbol Nodo Altura Profundidad Tamaño Int./Ext.
a 3 0 11 Interno
b 1 1 3 Interno
c 0 1 1 Externo
d 1 1 2 Interno
e 2 1 4 Interno
f 0 2 1 Externo
g 0 2 1 Externo
h 0 2 1 Externo
i 0 2 1 Externo
j 1 2 2 Interno
k 0 3 1 Externo 19
Ejercicio 1
![Page 20: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/20.jpg)
• Un árbol es ordenado, si para cada nodo
existe un orden lineal para todos sus hijos
Terminología: Árbol ordenado
20
![Page 21: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/21.jpg)
• Un árbol binario es un árbol ordenado en el
que cada nodo tiene 2 árboles (izquierdo y
derecho). o Árbol binario según la definición recursiva de árbol
o Los árboles izquierdo y/o derecho pueden estar vacíos
* En general, suponemos árboles binarios para simplificar
la implementación de los árboles
Terminología: Árbol binario
21
![Page 22: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/22.jpg)
La interfaz BTree
public interface BTree<E> {
static final int LEFT = 0;
static final int RIGHT = 1;
boolean isEmpty();
E getInfo() throws BTreeException;
BTree<E> getLeft() throws BTreeException;
BTree<E> getRight() throws BTreeException;
void insert(BTree<E> tree, int side) throws BTreeException;
BTree<E> extract(int side) throws BTreeException;
String toStringPreOrder();
String toStringInOrder();
String toStringPostOrder();
String toString(); // preorder
int size();
int height();
boolean equals(BTree<E> tree);
boolean find(BTree<E> tree);
}
22
![Page 23: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/23.jpg)
• Implementación basada en arrays
Una interfaz varias implementaciones
Subárbol izquierdo Posición nodo raíz * 2
Subárbol derecho Posición nodo raíz * 2 +1
23
![Page 24: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/24.jpg)
• Implementación basada en enlaces Linked Binary Node (LBNode)
Linked Binary Tree (LBTree)
Cada árbol (LBTree) tiene un nodo raíz (atributo LBNode)
Cada nodo raíz LBNode apunta a dos árboles (atributos LBTree), los
cuales pueden estar vacíos (null)
Una interfaz varias implementaciones
24
![Page 25: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/25.jpg)
La clase LBNode
public class LBNode<E> {
private E info;
private BTree<E> left;
private BTree<E> right;
public LBNode(E info, BTree<E> left, BTree<E> right) {…}
public E getInfo() {…}
public void setInfo(E info) {…}
public BTree<E> getLeft() {…}
public void setLeft(BTree<E> left) {…}
public BTree<E> getRight() {…}
public void setRight(BTree<E> right){…}
}
25
![Page 26: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/26.jpg)
• Completa la implementación de
la clase LBNode.
26
Ejercicio 2
![Page 27: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/27.jpg)
La clase LBTree
public class LBTree<E> implements BTree<E> {
private LBNode<E> root;
public LBTree() {
root = null;
}
public LBTree(E info) {
root = new LBNode<E>(info, new LBTree<E>(), new LBTree<E>());
}
public boolean isEmpty() {
return (root == null);
}
…
27
![Page 28: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/28.jpg)
La clase LBTree
…
public E getInfo() throws BTreeException {
if (isEmpty()) {
throw new BTreeException("empty trees do not have info");
}
return root.getInfo();
}
public BTree<E> getLeft() throws BTreeException {
if (isEmpty()) {
throw new BTreeException("empty trees do not have a left child");
}
return root.getLeft();
}
public BTree<E> getRight() throws BTreeException {
if (isEmpty()) {
throw new BTreeException("empty trees do not have a right child");
}
return root.getRight();
}
… 28
![Page 29: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/29.jpg)
• Tamaño: size()
• Altura: height()
• Recorridos o Pre-orden: toStringPreOrder()
o In-orden: toStringInOrder()
o Post-orden: toStringPostOrder()
Algoritmos básicos
29
![Page 30: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/30.jpg)
La clase LBTree: size()
public int size() {
if (isEmpty()) {
return 0;
} else {
return 1 + root.getLeft().size()
+ root.getRight().size();
}
}
30
![Page 31: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/31.jpg)
La clase LBTree: height()
public int height() { if (isEmpty()) {
return -1;
} else {
int leftHeight = root.getLeft().height();
int rightHeight = root.getRight().height();
if (leftHeight > rightHeight) {
return 1 + leftHeight;
} else {
return 1 + rightHeight;
}
}
}
31
1+Math.max(leftHeight,
rightHeight);
![Page 32: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/32.jpg)
Recorrido de Euler
32
![Page 33: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/33.jpg)
Recorrido Pre-orden
Primero el nodo raíz Después sus hijos
(recursivamente)
33
![Page 34: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/34.jpg)
La clase LBTree:
toStringPreOrder()
public String toStringPreOrder() {
if (isEmpty()) {
return "";
} else {
return root.getInfo().toString() + " " +
root.getLeft().toStringPreOrder() +
root.getRight().toStringPreOrder();
}
}
34
![Page 35: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/35.jpg)
Recorrido Post-orden
Primero los hijos (recursivamente)
Después el nodo raíz
35
![Page 36: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/36.jpg)
La clase LBTree:
toStringPostOrder()
public String toStringPostOrder() {
if (isEmpty()) {
return "";
} else {
return root.getLeft().toStringPostOrder() +
root.getRight().toStringPostOrder() +
root.getInfo().toString() + " ";
}
}
36
![Page 37: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/37.jpg)
Recorrido In-orden (simétrico)
Primero el hijo izquierdo (recursivamente)
Después el nodo raíz Después el hijo derecho
(recursivamente)
37
![Page 38: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/38.jpg)
La clase LBTree:
toStringInOrder()
public String toStringInOrder() {
if (isEmpty()) {
return "";
} else {
return root.getLeft().toStringInOrder() +
root.getInfo().toString() + " " +
root.getRight().toStringInOrder();
}
}
38
![Page 39: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/39.jpg)
• Dado el siguiente árbol binario, indica qué
recorrido (pre-orden, in-orden, post-orden)
produce el resultado (A+B)*(C-D).
39
Ejercicio 3
![Page 40: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/40.jpg)
Infix Prefix Postfix
A+B +AB AB+
A+B–C –+ABC AB+C–
(A+B)*(C–D) *+AB–CD AB+CD–*
40
Diferente notación matemática
![Page 41: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/41.jpg)
Expresiones matemáticas como árboles:
http://www.cs.jhu.edu/~goodrich/dsa/05trees/Demo1/
41
Actividad
![Page 42: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/42.jpg)
Árboles (II)
Programación de sistemas
Julio Villena Román <[email protected]>
MATERIALES BASADOS EN EL TRABAJO DE DIFERENTES AUTORES:
Carlos Delgado Kloos, M.Carmen Fernández Panadero, Raquel M.Crespo García, Carlos Alario Hoyos
42
![Page 43: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/43.jpg)
Concepto de árbol
Terminología
Implementación
Casos especiales
Árboles binarios de búsqueda
Montículos (heaps)
Contenidos
43
![Page 44: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/44.jpg)
Notación
• Hasta ahora:
o Un nodo, tres atributos: información almacenada,
subárbol izquierdo y subárbol derecho
o Un árbol, un atributo: nodo raíz
• Al pintar un árbol representamos la información
almacenada como el contenido de cada nodo
44
![Page 45: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/45.jpg)
Notación
• A partir de ahora:
o Añadimos un atributo más: la clave (key)
• Facilita la utilización del árbol en operaciones de búsqueda,
inserción, eliminación
• Dependiendo de la implementación, la clave puede añadirse
como atributo del nodo o como atributo del árbol
4
8 2
9 6 3 1
*
+ -
A B C D
Al pintar el árbol
Color oscuro: Clave
Color claro: Información
45
![Page 46: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/46.jpg)
Ejemplo de uso de claves
• Colas con prioridad
o Estructura de datos lineal que devuelve los elementos de
acuerdo con el valor de una clave que determina la
prioridad y no al orden en que fueron insertados
COLA CON PRIORIDAD
E U U Q E
3 2 4 1 5
Q U E U E
*1 Valor de prioridad máximo
46
![Page 47: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/47.jpg)
Ejemplo de uso de claves
• Colas con prioridad
o Implementación 1: Comparar al insertar
Facilita la extracción
o Implementación 2: Comparar al extraer
Facilita la inserción
47
![Page 48: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/48.jpg)
• Concepto de árbol binario de búsqueda
• Operaciones
– Búsqueda
– Inserción
– Eliminación
Árboles binarios de búsqueda
48
![Page 49: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/49.jpg)
Árboles binarios de búsqueda:
Concepto
Un árbol binario de búsqueda es un árbol binario en el que para cada nodo
n,
todas las claves de los nodos del subárbol izquierdo son menores que la
clave de n (o iguales)
y todas las del subárbol derecho mayores (o iguales).
49
![Page 50: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/50.jpg)
Ejemplo (I)
4
8 2
9 6 3 1
7 5 3
Representación únicamente de las claves (no se incluye la información almacenada)
Implementación errónea (en el subárbol izquierdo de “2” hay una clave mayor que 2)
50
![Page 51: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/51.jpg)
Ejemplo (II)
4
8
2
9 6
3 1
7
5
Implementación correcta de árbol binario de búsqueda 51
![Page 52: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/52.jpg)
Operación: Búsqueda
Buscamos el “3”: • 3<4: Subárbol izquierdo • 3>2: Subárbol derecho • 3=3: Elemento encontrado
4
8 2
9 6 3 1
7 5
4
2
3
http://www.cosc.canterbury.ac.nz/mukundan/dsal/BST.html
52
![Page 53: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/53.jpg)
Operación: Inserción
Insertar “6”: • 6<7: Subárbol izquierdo • 6>2: Subárbol derecho • 6>5: Subárbol derecho • Hueco libre: insertar
7
9 2
5 1
3 6
7
2
5
53
![Page 54: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/54.jpg)
• Dado el siguiente árbol binario de búsqueda,
inserta en orden tres elementos que contienen las
siguientes claves: 4, 8 y 5
7
9 2
5 1
3 6
7
2
5
54
Ejercicio 4
![Page 55: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/55.jpg)
Operación: Eliminar (I)
Si los subárboles izquierdo y derecho están vacíos (“hoja”) • Eliminar directamente • Por ejemplo, eliminar “3”
7
9 2
5 1
3 6
7
2
5
55
![Page 56: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/56.jpg)
Operación: Eliminar (II)
Si uno de los dos subárboles está vacío • Reemplazar por el nodo raíz del subárbol no vacío • Por ejemplo, eliminar “5”
7
9 2
5 1
6
7
2
5 6
56
![Page 57: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/57.jpg)
Operación: Eliminar (III)
Si ninguno de los subárboles está vacío • Reemplazar por el mayor del subárbol izquierdo o el menor del subárbol derecho • Por ejemplo, eliminar “2” o Reemplazar por “1” o por “3”
7
9 2
5 1
3 6
7
2
5
3
http://www.ibr.cs.tu-bs.de/courses/ss98/audii/applets/BST/BST-Example.html 57
![Page 58: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/58.jpg)
• Dado el siguiente árbol binario de búsqueda,
elimina el elemento cuya clave es 7. Propón dos
formas de realizar dicha operación
7
9 2
5 1
3
7
2
5
58
Ejercicio 5
![Page 59: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/59.jpg)
59
Actividad
http://www.ibr.cs.tu-bs.de/courses/ss98/
audii/applets/BST/BST-Example.html
![Page 60: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/60.jpg)
• Un montículo (binario)* es un árbol binario
completo en el que cada nodo tiene una clave
mayor** o igual que la de su padre.
* normalmente se sobreentiende montículo binario
** también podría definirse como menor o igual (el orden
es arbitrario)
Aplicaciones:
• Colas con prioridad
• Ordenación
Montículos (heaps)
60
![Page 61: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/61.jpg)
Montículos: propiedades
1. Para cada nodo n (excepto para el raíz), su clave es
mayor o igual que la de su padre.
2. Completo Para una profundidad K, todos los subárboles hasta K-1 están no vacíos
y en K los árboles no vacíos están colocados de izquierda a derecha
Completo
No Completo
No Completo
61
![Page 62: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/62.jpg)
1
4 2
9 6 5 3
7 8
No es un montículo. Cumple la propiedad 1 pero no la 2
Ejemplo (1)
62
![Page 63: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/63.jpg)
7
6 5
3 4 8 2
1 9
No es un montículo. Cumple la propiedad 2 pero no la 1
Ejemplo (2)
63
![Page 64: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/64.jpg)
1
4 2
9 6 5 3
7 8
Sí es un montículo
Ejemplo (3)
64
![Page 65: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/65.jpg)
1
3 2
7 6 5 4
1 2 3 4 5 6 7
p(root)=1
p(x.left)=2*p(x)
p(x.right)=2*p(x)+1
Implementación basada en secuencias
65
![Page 66: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/66.jpg)
Insertar
4
6 5
20 7 9 15
25 16 12 14 8 11
Insertar elemento con clave “2”
66
![Page 67: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/67.jpg)
Insertar
4
6 5
20 7 9 15
25 16 12 14 8 11 2
Insertar elemento con clave “2”
67
![Page 68: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/68.jpg)
Insertar
4
6 5
2 7 9 15
25 16 12 14 8 11 20
Insertar elemento con clave “2”
68
![Page 69: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/69.jpg)
Insertar
4
2 5
6 7 9 15
25 16 12 14 8 11 20
Insertar elemento con clave “2”
69
![Page 70: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/70.jpg)
Insertar
2
4 5
6 7 9 15
25 16 12 14 8 11 20
Insertar elemento con clave “2”
70
![Page 71: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/71.jpg)
• Dado el siguiente montículo, inserta tres
elementos con claves 3, 8 y 1.
2
4 5
6 7 9 15
25 16 12 14 8 11 20 71
Ejercicio 6
![Page 72: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/72.jpg)
Eliminar
4
6 5
20 7 9 15
25 16 12 14 8 11
Eliminar elemento con clave “4”
72
![Page 73: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/73.jpg)
Eliminar
8
6 5
20 7 9 15
25 16 12 14 11
4
73
![Page 74: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/74.jpg)
Eliminar
5
6 8
20 7 9 15
25 16 12 14 11
Eliminar elemento con clave “4”
74
![Page 75: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/75.jpg)
• Dado el siguiente montículo, elimina tres
elementos con claves 15, 5 y 7.
5
6 8
20 7 9 15
25 16 12 14 11 75
Ejercicio 7
![Page 76: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/76.jpg)
Ejemplo
Montículo - Cola con prioridad
http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Priority-Q/
76
![Page 77: Programación de sistemas - Academia Cartagena99 · • Facilita la utilización del árbol en operaciones de búsqueda, inserción, eliminación • Dependiendo de la implementación,](https://reader034.fdocuments.net/reader034/viewer/2022051923/601164f4d6c7af628f1dc72b/html5/thumbnails/77.jpg)
Ejemplo
Montículo - Cola con prioridad
http://www.cosc.canterbury.ac.nz/mukundan/dsal/MinHeapAppl.html
77