• No se han encontrado resultados

clase12-Arboles-Part1

N/A
N/A
Protected

Academic year: 2020

Share "clase12-Arboles-Part1"

Copied!
57
0
0

Texto completo

(1)

ARBOLES

PARTE 1

CLASE N°12

CLASE N°12

Leissi M. Castañeda León

(2)

Que veremos hoy?

Arboles

1. Arboles Binarios

2. Arboles Binarios de Búsqueda 3. Arboles AVL

4. Arboles B 4. Arboles B 5. Arboles B+

6. Arboles Roji-Negro

(3)

Árboles

(4)

Introducción

Se han estudiado estructuras de datos lineales, tanto

estáticas como dinámicas: a cada elemento siempre le sucede o le precede como máximo otro elemento.

Ahora se va a introducir el concepto de ramificación

entre nodos para estudiar la estructura de datos árboles. entre nodos para estudiar la estructura de datos árboles.

Los árboles son las estructuras de datos no lineales

(cada elemento puede tener más de un sucesor) y

dinámicas (cambiar de forma o tamaño durante la

ejecución) de datos más importantes.

(5)

Introducción

Los árboles balanceados o AVL son la estructura de

datos más eficiente para trabajar con la memoria

principal (o interna), mientras que los árboles B y B+ con la memoria secundaria (externa).

(6)

Árboles

Un árbol se puede definir como una estructura

jerárquica aplicada sobre una colección de elementos u objetos llamados nodos, uno de los cuales se denomina

raiz.

Formalmente se define un árbol de tipo T como una

estructura homogénea resultado de la concatenación de un elemento de tipo T con un número finito de árboles disjuntos, llamados subárboles.

Una forma particular de árbol es el árbol vacío.

(7)

Árboles

Estructuras recursivas, ya que cada subárbol es a su

vez un árbol.

Un árbol se puede representar de diferentes formas

(notaciones) y todas ellas se consideran equivalentes:

Diagramas de Venn Diagramas de Venn

Anidación de paréntesis

Notación decimal de Dewey Notación Indentada

Grafo (se distinguen nodos y arcos)

(8)

Ejemplo

8

(9)

c) 1.A, 1.1.B,

1.1.1.D, 1.1.1.1.I,

1.1.2.E, 1.1.3.F,

1.1.3.1.J,

(10)

A

B C

B C

D E F G H

(11)

Características y Propiedades de los

árboles

Todo árbol que no es vacío tiene un

único nodo raíz

Un nodo X es descendiente directo de

un nodo Y, si el nodo X es apuntado por el nodo Y. En este caso decimos: X es hijo de Y.

A

B C

es hijo de Y.

Un nodo X es antecesor directo de un

nodo Y, si el nodo X apunta al nodo Y. En este caso decimos: X es padre de Y.

Todos los nodos que son

descendientes directos – hijos – de un mismo nodo – padre – son hermanos.

11

D E F G H

(12)

Características y Propiedades de los

árboles (cont.)

Todo nodo que no tiene ramificaciones –

hijos-, se conoce como terminal u hoja.

Todo nodo que no es raíz ni hoja, se

conoce como interior.

Grado es el número de descendientes

directos de un determinado nodo.

A

B C

directos de un determinado nodo.

Grado del árbol es el máximo grado de

todos los nodos del árbol.

Nivel es el número de arcos que deben

ser recorridos para llegar a un determinado nodo. Raíz nivel 1.

Altura es el máximo número de niveles

de todos los nodos del árbol.

12

D E F G H

(13)

Longitud de camino interno y externo

Se define la longitud de camino del nodo X como el

número de arcos que se deben recorrer para llegar desde la raíz hasta el nodo X.

Por definición la raíz tiene longitud de camino 1, sus

descendientes directos longitud de camino 2 y así sucesivamente.

(14)

Longitud de Camino Interno (LCI)

La LCI del árbol es la suma de las longitudes de camino

de todos los nodos del árbol.

Esta medida es importante porque permite conocer los

caminos que tiene el árbol.

Se calcula por medio de la siguiente fórmula: Se calcula por medio de la siguiente fórmula:

Donde i representa el nivel de árbol, h su altura y el

número de nodos en el nivel i.

La media de la longitud de camino interno: LCIM=LCI/n

(15)

Ejemplo

=

=

h

i

i

i

n

LCI

1

*

A

B C

LCI = 1*1 + 2*2 + 5*3 + 4*4 = 36

D E F G H

(16)

Longitud de camino externo (LCE)

Para definir la longitud de camino externo de un árbol es

necesario primero explicar los conceptos de árbol

extendido y nodo especial.

Árbol extendido: aquel en el que el número de hijos de Árbol extendido: aquel en el que el número de hijos de

cada nodo es igual al grado del árbol. Si algún nodo no cumple con esta condición, entonces deben

incorporarse los nodos especiales requeridos.

Nodos especiales: tienen como objetivo reemplazar las

ramas vacías o nulas, no puede tener descendientes. Se representa en forma de cuadrado.

(17)

Longitud de camino externo (LCE)

Podemos definir entonces la LCE de un árbol como la

suma de las longitudes de camino de todos los nodos especiales del árbol. Se calcula por medio de la

siguiente fórmula:

+

=

1

*

h

ei

i

n

LCE

Donde i representa el nivel del árbol, h su altura y nei el

número de nodos especiales en el nivel i. Observe que i comienza desde 2, puesto que la raíz se encuentra en el nivel i y no puede ser nodo especial.

La media: LCEM=LCE/ne

(18)

Ejemplo

+

=

=

1

2

*

h

i

ei

i

n

LCE

A

B C

D E F G H

LCE = 1*2 + 1*3 + 11*4 + 12*5 = 109

D E F G H

(19)

Ejercicio

Hallar el camino interno, media del camino interno y el

(20)

Árboles Binarios

(21)

Árboles Binarios

Un árbol ordenado es aquel en el cual la distribución de

las ramas sigue un cierto orden.

Los árboles ordenados de grado 2 son conocidos como:

árboles binarios. árboles binarios.

En un árbol binario cada nodo puede tener como

máximo dos subárboles y éstos se distinguen entre sí como subárbol izquierdo y subárbol derecho, según su ubicación con respecto a la raíz.

(22)

Árboles Binarios: aplicaciones

Las aplicaciones de los arboles binarios son muy

variadas ya que se les puede utilizar para representar una estructura en la cual es posible tomar decisiones con dos opciones en distintos puntos.

Ejemplo:

Ejemplo:

Árboles Binarios de Búsqueda

22

27 14

7

11

47

59

77 32

(23)

+ *

A B

^

3.5

Representación de una expresión algebraica.

23

A B

/

(24)

Árbol Genealógico.

Osvaldo Cario Battistuti

Jose Cario Maria Battistuti

24

Jose Cario Scandallo

Maria Battistuti Valiente

Antonio Cario Godoy

Maria Scandallo Miscoria

Maria Valiente Martin

(25)

Árboles binarios distintos, similares y

equivalentes

Distintos: cuando sus estructuras, la distribución de

nodos y arcos son diferentes.

A) A A

B B

B)

A

B C

D

A

B

(26)

Árboles binarios distintos, similares y

equivalentes

Similares: cuando sus estructuras son idénticas pero la

información que contienen sus nodos difiere entre sí

A) A V

B F

B)

A

B

C

D

P

R T

(27)

Árboles binarios distintos, similares y

equivalentes

Equivalentes: aquellos que son similares y además la

información de sus nodos contienen la misma información

A)

A A

A)

B

B

B) A

B

C

D

A

C B

(28)

¿Qué relación encuentra en los siguientes

árboles binarios?

A) A

B C

D

B) A

X L

N D

C) A

B

D

C

D) A

B

C

(29)

A) A

B C

D

B) A

X L

N

C) A D) A

- El árbol de la figura C es distinto de los árboles de la figura A,B - Los árboles de la figura A, B y D son similares.

- Los árboles de la figura A y D son equivalentes.

B

D

C

B

C

(30)

Árboles binarios completos

Se define un árbol binario completo como un árbol en el

que todos sus nodos, excepto los del último nivel, tienen dos hijos; el subárbol izquierdo y el subárbol derecho. Ejemplo:

A) DE ALTURA 3:

A

B C

D E

G F

B) DE ALTURA 4:

A

B C

D E F

G

(31)

Se puede calcular el número de nodos de un árbol binario completo de altura h aplicando la siguiente fórmula:

NÚMERO DE NODOSABC = (2^h) - 1

Donde ABC significa árbol binario completo, y h la altura del árbol. Así, por ejemplo, un árbol binario completo de altura 5 tendrá 31 nodos, de altura 9 tendrá 511 nodos y un árbol de 17 tendrá 131071 nodos.

(32)

Representación de árbol general a binario

1. Deben enlazarse los hijos de cada nodo en forma

horizontal

2. Debe enlazarse en forma vertical el nodo padre con el

hijo que se encuentra más a la izquierda, además debe eliminarse el vínculo de ese padre con el resto de sus hijo que se encuentra más a la izquierda, además debe eliminarse el vínculo de ese padre con el resto de sus hijos

3. Debe rotarse el diagrama resultante aproximadamente

(33)

A

B C

D E F G H

I J K L

A

B A

B C

D E F G H

I J K L

F D

E

C

J

K

I G

(34)

Representación de árboles binarios en

memoria

Hay dos formas tradicionales de representarlos:

Por medio de datos tipo punteros también conocidos como

variables dinámicas o listas.

Por medio de arreglos.

Sin embargo la más utilizada es la primera, puesto que Sin embargo la más utilizada es la primera, puesto que

es la más natural para tratar este tipo de estructuras.

Los nodos del árbol binario serán representados como

registros que contendrán como mínimo 3 campos: uno almacenará la información del nodo y los dos restantes se utilizarán apuntarán al subarbol izquierdo y derecho del subarbol en cuestión.

(35)

Árboles binarios

Cada nodo se representa gráficamente de la siguiente

manera:

T=

La definición de un árbol binario en lenguaje algorítmico

Izq

Info

Der

La definición de un árbol binario en lenguaje algorítmico

es:

Enlace=^nodo Nodo=registro

izq: tipo enlace info: tipo de dato der: tipo enlace {fin de la definicion}

(36)

+

* ^

*

+

A B 3.5 ^

/

C D

A B / 3.5

C D

NIL NIL NIL NIL

NIL NIL NIL NIL

(37)

Operaciones en árboles binarios

Una de las operaciones básicas es la creación del

mismo en memoria.

Otras operaciones:

Recorrer todos los nodos Insertar un nuevo nodo Insertar un nuevo nodo

Eliminar alguno de los existentes Buscar un valor determinado

A continuación se presentará el algoritmo de creación de

un árbol

(38)

Crea_arbol(NODO)

1. Leer informacion(Hacer NODO^.INFO INFOR) 2. Escribir ”¿existe nodo por izquierda?: 1(Si) – 0(No)” 3. Leer respuesta (RESP)

4. Si RESP es afirmativa entonces

CREA (OTRO) {crear un nuevo nodo} Hacer NODO ^.IZQ OTRO

Regresar a Crea_arbol con NODO ^.IZQ {llamada recursiva} si no

Hacer NODO ^.IZQ NIL Hacer NODO ^.IZQ NIL

6. {fin condicional del paso 4}

7. Escribir “¿existe nodo derecha? : 1(Si) – 0(No)” 8. Leer respuesta (RESP)

9. Si respuesta es afirmativa entonces

CREA (OTRO) {crear un nuevo nodo} Hacer NODO ^.DER OTRO

Regresar a Crea_arbol con NODO ^.DER {llamada recursiva} si no

Hacer NODO ^.DER NIL

(39)

Recorrido de un árbol binario

Una de las operaciones más importantes, que lo que

hace es visitar los nodos del árbol en forma ordenada, de tal forma que todos los nodos sean visitados una sola vez.

Hay tres manera de recorrer un árbol : en inorden, Hay tres manera de recorrer un árbol : en inorden,

preorden y postorden:

INORDEN

Recorrer el subarbol izquierdo en inorden. Examinar la raíz.

Recorrer el subarbol derecho en inorden.

(40)

Recorrido de un árbol binario

PREORDEN

Examinar la raíz.

Recorrer el subarbol izquierdo en preorden. recorrer el subarbol derecho en preorden.

POSTORDEN

Recorrer el subarbol izquierdo en postorden. Recorrer el subarbol derecho en postorden. Examinar la raíz.

(41)

Ejemplo de recorrido

D E B

F G C

A PREORDEN: ABDECFG INORDEN: DBEAFCG POSORDEN: DEBFGCA

+

41

A B *

/ 3.5

^ +

C D PREORDEN: +*AB^/CD3.5

(42)

D B

E F

C A

Ejemplo de recorrido

K

G H I J

(43)

Recorrido Preorden

PREORDEN(NODO).

1. Si NODO ≠≠≠≠ NIL entonces

visitar el NODO {escribir NODO^.INFO} regresar a PREORDEN con NODO^.IZQ

{llamada recursiva a PREORDEN con la {llamada recursiva a PREORDEN con la rama izquierda del nodo}

regresar a PREORDEN con NODO^.DER

{llamada recursiva a PREORDEN con la rama derecha del nodo}

(44)

INORDEN(NODO).

1. Si NODO ≠≠≠≠ NIL entonces

regresar a INORDEN con NODO^.IZQ

{llamada recursiva a INORDEN con la rama izquierda del nodo}

Recorrido Inorden

izquierda del nodo}

visitar el NODO {escribir NODO^.INFO} regresar a INORDEN con NODO^.DER

{llamada recursiva a INORDEN con la rama derecha del nodo}

(45)

POSTORDEN(NODO).

1. Si NODO ≠≠≠≠ NIL entonces

regresar a POSTORDEN con NODO^.IZQ

{llamada recursiva a POSTORDEN con la rama izquierda del nodo}

Recorrido Postorden

regresar a POSTORDEN con NODO^.DER

{llamada recursiva a POSTORDEN con la rama derecha del nodo}

visitar el NODO {escribir NODO^.INFO}

(46)

Árboles Binarios de

Búsqueda

(47)

Árbol binario de búsqueda

Este tipo de árbol permite almacenar información

ordenada.

Reglas a cumplir:

Cada nodo del árbol puede tener 0, 1 ó 2 hijos.Cada nodo del árbol puede tener 0, 1 ó 2 hijos.

Los descendientes izquierdos deben tener un valor menor al

padre.

Los descendientes derechos deben tener un valor mayor al

padre.

(48)

Ejemplos de ABB…

13

21

33

21

30

33

5 18

15

25

40 36

32

(49)

¿Por qué

no

son ABB?

13

21

33

1

5

6

17 18

15

25

40 22

(50)

¿Por qué

no

son ABB?

13

21

33

1

5

6

17 18

15

25

40

22

(51)

Implementación de un ABB

struct nodo {

int llave;

struct nodo *izq; struct nodo *der; struct nodo *der; };

typedef struct nodo *ABBTree;

(52)

Insertar en un ABB

(53)

else {

insertar(arbol->izq,dato); }

} }

Reportar

void reportar(ABBTree abb, int h) {

if(abb!=NULL) {

printf("%i h=%i \n",abb->llave, h); reportar(abb->izq,h+1);

reportar(abb->der,h+1); }

}

(54)

Recorridos

void recorrerEnOrden(ABBTree abb) {

if(abb!=NULL) {

recorrerEnOrden(abb->izq); recorrerEnOrden(abb->izq); printf("%i \n",abb->llave); recorrerEnOrden(abb->der); }

}

(55)

Recorridos

void recorrerPreOrden(ABBTree abb) {

if(abb!=NULL) {

printf("%i \n",abb->llave); printf("%i \n",abb->llave);

recorrerEnOrden(abb->izq); recorrerEnOrden(abb->der); }

}

(56)

Recorridos

void recorrerPostOrden(ABBTree abb) {

if(abb!=NULL) {

recorrerEnOrden(abb->izq); recorrerEnOrden(abb->izq); recorrerEnOrden(abb->der); printf("%i \n",abb->llave); }

}

(57)

Buscar

int buscar(ABBTree abb, int dato) { int resp=0; if (abb==NULL) { resp=0; }

Referencias

Documento similar

Fundación Ramón Menéndez Pidal / Universidad Autónoma de Madrid... Fundación Ramón Menéndez Pidal / Universidad Autónoma

Los activos financieros, distintos de aquellos valorizados a valor razonable a través de resultados, son evaluados a la fecha de cada estado de situación para

“Dejemos claro que en la Biblia la iglesia cristiana no veneraba imágenes, no daba culto a los cristianos muertos ni consideraba a Pedro el vicario de Cristo por lo tanto la

PREGUNTAS BASICAS: (UNICAMENTE PARA MUJERES) Para ayudarte a crecer y conocer a Dios mediante la verdad revelada en tu tiempo de meditación.. ¿Le has entregado tu corazón

Pero antes hay que responder a una encuesta (puedes intentar saltarte este paso, a veces funciona). ¡Haz clic aquí!.. En el segundo punto, hay que seleccionar “Sección de titulaciones

Esta posición, apreciable también, por ejemplo, en la pedagogía froebeliana de los jardines de la infancia 55 , implicaba la revalorización de los espacios no edifi- cados y

26 Cita elegida por Fangoria para Arquitectura efímera recogida de una conversación entre Crystal Connors y Nomi Malone en la película Showgirls.. Arquitectura Efímera sale a la

Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados