Sunteți pe pagina 1din 34

EDAs Jerrquicas

rboles, rbol Binario, rbol Binario de Bsqueda

Karim Guevara Puente de la Vega


2014

Agenda

Introduccin
Conceptos bsicos

rboles Binarios

Concepto de rbol
Longitud, profundidad y altura
Relaciones entre nodos
Definicin
Propiedades
Operaciones de recorrido
Condiciones efectivas para la bsqueda

INTRODUCCIN
Modelos lineales vs. jerrquicos

Las estructuras de datos lineales permiten describir


conjuntos de datos que mantienen entre ellos
relaciones de sucesin (o de predecesin).

Los rboles permiten representar estructuras


jerrquicas entre conjuntos de datos.

P.e. : lista de clientes de una empresa, trabajos en la


cola de impresin, etc.

P.e. : estructura de directorios, rbol genealgico,


expresiones aritmticas, etc

INTRODUCCIN
Estructuras jerrquicas

En ocasiones los datos de una coleccin mantienen


relaciones de tipo jerrquico, que no es posible
expresar con una representacin lineal.

P.e.1 : coleccin de directorios


$HOME

eda
libreras

estructuras
5

aplicaciones

util

figuras

hospital

INTRODUCCIN
Estructuras jerrquicas

P.e.2: el rbol que se muestra a continuacin representa la


expresin aritmtica (((a*b)+(c+d))*(e-f))
*
+

*
a

+
b

e
d

INTRODUCCIN
Estructuras jerrquicas

Los rboles permiten procesos de bsqueda con coste


sublineal

P.e.: coste de buscar el dato 300 en la coleccin de


enteros {100, 50, 200,25, 75, 150, 300}
Usando una lista

Usando un rbol

Es necesario recorres todos


los elementos en el peor de
los casos

100
50

Coste lineal
25

200
75

150

cunto cuesta as ?
7

300

CONCEPTOS BSICOS
Definicin de rbol

Un rbol es una estructura jerrquica que se puede definir


por medio de un conjunto de nodos (uno de los cuales es
distinguido como la raz del rbol) y un conjunto de aristas
tal que:

Cualquier nodo H, a excepcin del raz, est conectado por


medio de una arista a un nico nodo P. Se dice que P es el
nodo padre y H el hijo

Un nodo sin hijos se denominan hojas

Un nodo que no es hoja se denomina nodo interno

CONCEPTOS BSICOS
Definicin de rbol

Ejemplo:

Nodo raz: A

Nodos hojas:
{D, M, N, F, J, K, L}

Nodos internos:
{A, B, E, I, C, G, H}

CONCEPTOS BASICOS
Longitud, profundidad y altura

En un rbol hay un nico camino desde la raz a cada nodo


El nmero de aristas que componen un camino se denomina
longitud del camino
Profundidad de un nodo: longitud del camino que va desde
la raz a ese nodo

Se dice que todos los nodos que estn a la misma profundidad


estn en el mismo nivel

Altura de un nodo: longitud del camino que va desde ese


nodo hasta la hoja ms profunda bajo l

10

La profundidad de la raz es 0

Altura de un rbol = Altura de la raz

CONCEPTOS BASICOS
Relaciones entre nodos

11

Los nodos que tienen el mismo padre son hermanos


Si hay un camino desde el nodo u hasta el nodo v,

u es un ascendiente de v

v es un descendiente de u

Si u != v, entonces

u es un ascendiente propio de v

v es un descendiente propio de u

Tamao de un nodo: nmero de descendientes que tiene (l


inclusive)
Tamao de un rbol = tamao de su raz

RBOLES BINARIOS
Definicin

12

Un rbol Binario es un rbol en el que ningn nodo puede


tener ms de dos hijos (hijo izquierdo e hijo derecho)
Definicin recursiva: un rbol Binario es:

Un rbol binario vaco, o

Un nodo raz y dos sub-rboles binarios (izquierdo y derecho)

RBOLES BINARIOS
Propiedades

13

El nmero de nodos del nivel i


es 2i
En un rbol de altura H, el
nmero mximo de nodos es:

El nmero mximo de hojas es:

El nmero mximo de nodos


internos es:

RBOLES BINARIOS
rboles Binarios llenos

14

Un rbol Binario es lleno si tiene todos sus niveles completos


Propiedades: sea H su altura y N su tamao (nmero de
nodos)

H = log2N

N = 2H+1-1

RBOLES BINARIOS
rboles Binarios completos

15

Un rbol Binario completo tiene todos sus niveles


completos, a excepcin quizs del ltimo en el cul
todas las hojas estn tan a la izquierda como sea
posible
Propiedades: sea H su altura y N su tamao (nmero de
nodos)

H = log2N es un rbol equilibrado

2H N 2H+1 -1

Nota: un rbol es equilibrado si


los subrboles izquierdo y
derecho de cualquier nodo
tienen alturas que difieren
como mucho en 1

RBOLES BINARIOS
Operaciones de recorrido

16

Recorrido en anchura (por niveles):


los nodos se visitan nivel a nivel y,
dentro de cada nivel, de izquierda
a derecha
En profundidad: los nodos se visitan
bajando por las ramas del rbol
Pre-Orden: 1) raz, 2) sub-rbol
izquierdo, 3) sub-rbol derecho
In-Orden: 1) sub-rbol izquierdo,
2) raz, 3) sub-rbol derecho
Post-Orden: 1) sub-rbol izquierdo,
2) sub-rbol derecho, 3) raz,

Por niveles: ABCDEFG


Pre-Orden: ABDEGCF
In-Orden: DBGEACF
Post-Orden: DGEBFCA

RBOLES BINARIOS DE BSQUEDA - BST


Definicin y usos

Un rbol Binario es de Bsqueda si:

17

Los datos de su subrbol izquierdo son menores que la


raz.
Los datos de su subrbol derecho son mayores que la raz.
Los subrboles izquierdo y derecho tambin son rboles
Binarios de Bsqueda.
Si se imprime en InOrden resulta una secuencia ordenada

RBOLES BINARIOS DE BSQUEDA - BST


Coste de la bsqueda: esfuerzo de comparacin

Esfuerzo de comparacin: nmero de comparaciones


necesarias para encontrar un dato determinado.
Ejemplos:
Buscar(7) 1 comparacin
Buscar(2) 2 comparacin
Buscar(5) 3 comparacin
Buscar(3) 4 comparacin

Esfuerzo de comparacin(x) = 1 +nivel(x)

18

RBOLES BINARIOS DE BSQUEDA - BST


Coste de la bsqueda: esfuerzo medio de comparacin

Ejemplo:
eMC = (1 * (1+0) + 2 * (1+1) +
+ 2 * (1+2) + 1 * (1+3) ) / 6 =
= (1+ 4+ 6 + 4) / 6 = 2.5

Por trmino medio harn falta 2.5 comparaciones para


encontrar un dato en este rbol.)
19

RBOLES BINARIOS DE BSQUEDA -BST


Relacin entre el equilibrado y el eMC en un BST

Ejemplo: inicializar un ABB con las secuencias {7, 2, 9, 1, 5,


3}, {5, 7, 2, 9, 1, 3} y {1, 2, 3, 5, 7, 9}

20

Cundo ms equilibrado est el BST, menor ser su altura,


su esfuerzo Medio de Comparacin y el coste de sus
operaciones.

RBOLES BINARIOS DE BSQUEDA


Costo medio de las operaciones

BST

21

Cundo el BST no est equilibrado (caso peor) los costes son


lineales

ARBOLES BINARIOS DE BUSQUEDA


Implementacin: representacin enlazada

BST

NodoBST

NodoBST

22

NodoBST

ARBOLES BINARIOS DE BUSQUEDA


Implementacin: clase NodoBST
template <class E>
class NodoBST {
E data;
NodoBST<E> *left, *right;
public:
// Constructores
NodoBST(E data,NodoBST<E> *left=0,NodoBST<E> *right=0){
this->data = data;
this->left = left;
this->right = right;
}
};

23

ARBOLES BINARIOS DE BUSQUEDA


Operaciones que nos interesan de la clase BST
Operaciones de bsqueda:

E recover(E x)
E minRecover()

Operaciones de insercin:

void
insertDuplicates(E x)
void insert(E x)
Void update(E x)

Operaciones de eliminacin:

24

void remove(E x)
void minRemove()

Consultores:

int tamanio()
Int height()
Bool isEmpty()
Double eMC()

Operaciones de recorrido:

void
void
void
void

preOrder()
postOrder()
inOrder()
levels()

ARBOLES BINARIOS DE BUSQUEDA


implementacin: atributos y constructor
template <class E>
class BST{

// Atributos
NodoBST<E> *root;

nodo raz del rbol

int totComparisions;
// Constructores de un ABB vacio
public:
BST(){
root = NULL;
totComparisions = 0;
}
};

25

Se utiliza para calcular el


eMC

eMC = totComparisions
root->tamanio

ARBOLES BINARIOS DE BUSQUEDA


implementacin: operaciones de bsqueda
template <class E> E BST<E>::recover(E x){
NodoBST<E> *res = recover(x, root);
assert(res != NULL);

return res->data;
}
template <class E> NodoBST<E>* BST<E>::recover(E x, NodoBST<E> *n){
if (n == NULL) return NULL;
else {
if (n->data < x) return recover(x, n->rigth);
else if (n->data > x) return recover(x, n->left);
else return n;

}
}
26

ARBOLES BINARIOS DE BUSQUEDA


Traza de la operacin recover/recuperar
Llamada inicial (buscamos el dato x=5)
res=recover(x, root),

recover(5, 7 );
7 > 5
return recover(5, 7 ->left)
5

recover(5, 2 );
2 < 5
return recover(5,

->right)

recover(5, 5 );
5 == 5
return 5
5

27

return

->dato;

ARBOLES BINARIOS DE BUSQUEDA


Implementacin: operaciones de insercin
template <class E> void BST<E>::insert(E x){
root = insert(x, root);
}
template <class E> NodoBST<E>* BST<E>::insert(E x, NodoBST<E>*act){
NodoBST<E> *res = act;
if (act == NULL) res = new NodoBST<E>(x); //insertamos
else {
//buscamos el lugar para insercin
try{
if(act->data == x) throw duplicate();
if (act->data < x) res->right = insert(x,act->right);
else
if (act->data > x) res->left = insert(x,act->left);
}
catch(exception& e) { cout << e.what() << endl; }
}
return res;
}
28

ARBOLES BINARIOS DE BUSQUEDA


Traza de la operacin insertarSinDuplicados
Llamada inicial (insertamos el dato x=6)
raiz = insert(x, root),

29

insert(6, 7 );
7 > 6
7 ->left = insert(6, 7 ->left)
return 7
insert(6, );
2
2 < 6
2 ->right = insert(6, 2 ->right)
return 2
2
insert(6, 5 );
5 < 6
5 ->right = insert(6, 5 ->right)
return 5
5
insert(6,NULL);
return 6
6

ARBOLES BINARIOS DE BUSQUEDA


Implementacin: operaciones de eliminacin
template <class E> void BST<E>::remove(E x){
root = remove(x, root);
}
template <class E> NodoBST<E>* BST<E>::remove(E x, NodoBST<E>*act){
NodoBST<E> *res = act;
try{
if (act == NULL) throw itemNotFound();
if (act->data < x) res->right = remove(x,act->right);
else
if (act->data > x) res->left = remove(x,act->left);
else
if(act->left != NULL && act->right != NULL) //dos hijos
cout<<"no se puede, tiene dos hijos\n";
else{
res = (act->left) ? act->left : act->right; //1 o 0 hijos
delete act;
}
}
catch(exception& e) { cout << e.what() << endl; }
return res;
30 }

ARBOLES BINARIOS DE BUSQUEDA


Traza de la operacin eliminar (nodo con un hijo)
Llamada inicial (eliminamos el dato x=5)
root = remove(x, root),

remove(5, 7 );
7 > 5
7 ->left = remove(5, 7 ->left)
return 7
remove(5, 2 );
2 < 5
2 ->right = remove(5, 2 ->right)
return 2
2
remove(5, 5 );
5 == 5
return 5 ->left)
3

31

ARBOLES BINARIOS DE BUSQUEDA


Traza de la operacin eliminar (nodo con dos hijos)
Llamada inicial (eliminamos el dato x=7)
root = remove(x, root),

remove(7, 7 );
7 == 7
7 ->dato = minRecover(

->right)->dato

->right) minRecover(
return 8
8

->right = minRemove(
return 8
8

32

minRemove( 9 );
9 ->left = minRemove( 9 ->left)
return 9

NULL

minRemove( 8 );
8 ->left == NULL
return 8 ->right

);

ARBOLES BINARIOS DE BUSQUEDA


Implementacin: operaciones de eliminacin
//SII !isEmpty(): mtodo para eliminar el minimo
template <class E> E BST<E>::minRemove()
E min = minRecover();
root = minRemove(root);
return min;
}
template <class E> NodoBST<E>* BST<E>::minRemove(NodoBST<E>* act){
if (act->left != NULL) {
//buscamos el minimo
act->left = minRemove(act->left);
}
else {
//eliminamos el minimo
NodoBST<E> *eli=act;
act = act->right;
delete eli;
}
return act;
}

33

ARBOLES BINARIOS DE BUSQUEDA


Traza del mtodo eliminarMin
Llamada inicial (eliminamos el minimo =1)
root = minRemove(root),

minRemove( 7 );
7 ->left = minRemove(
return 7

->left)

minRemove( 4 );
4 ->left = minRemove(
return 4

34

->left)

minRemove( 1 );
1 ->left == NULL
return 1 ->right

ARBOLES BINARIOS DE BUSQUEDA


Implementacin: consultores
template <class E> bool BST<E>::isEmpty(){
return (root == NULL);
}
template <class E> void BST<E>::inOrder(){
inOrder(root);
}
template <class E> void BST<E>::inOrder(NodoBST<E> *act){
if (act){
inOrder(act->left);
cout<<act->data<< ;
inOrder(act->right);
}
}

35

S-ar putea să vă placă și