arboles[1]

35
La estructura de datos Árboles

Upload: henry-tamayo

Post on 03-Jul-2015

296 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: arboles[1]

La estructura de datos Árboles

Page 2: arboles[1]

Árboles - 2

ÍNDICE DE CONTENIDOS Concepto de árbol Terminología básica Árboles multicamino o genéricos Árboles binarios Árboles de búsqueda

Árboles binarios de búsquedaABB equilibradosAVL Árboles B, B+ y B*

Page 3: arboles[1]

Árboles - 3

Concepto de árbol Estructura JERÁRQUICA no lineal Relaciones padre-hijo entre nodos Ejemplos: sistema de ficheros, estructura de un

libro, diagrama de clases JAVA, diagrama organizativo...

MiEmpresa

Ventas I+DProducción

Portátiles SobremesaES Internacional

Europa Asia América

Page 4: arboles[1]

Árboles - 4

Concepto de árbol Un árbol se caracteriza por estar formado por

una serie de nodos conectados por una serie de aristas que verifican que:

hay un único nodo raízcada nodo, excepto la raíz, tiene un único padrehay un único camino (desde la raíz hasta cada nodo)

Page 5: arboles[1]

Árboles - 5

Concepto de árbol Un árbol de tipo base T es:

la estructura vacía, oun nodo de tipo T con un número finito de estructuras árbol de tipo base T disjuntas llamadas subárboles

<arbol> ::= <<nulo>> | <nodo>

<nodo> ::= <info> {<arbol>}

Puede estar ordenado o nó

Page 6: arboles[1]

Árboles - 6

Terminología básica

subárbol

A

B DC

G HE F

I J K

Raíz: único nodo sin padre Nodo interno: tiene al

menos un hijo Nodo hoja (externo): no

tiene hijos Descendiente directo:

hijo Descendientes: hijo,

nieto... Subárbol: árbol formado

por un nodo y sus descendientes

Page 7: arboles[1]

Árboles - 7

Terminología básica

Grado de un nodo: número de descendientes directos

Grado del árbol: mayor grado de sus nodos Árbol binario: árbol de grado 2

Cada nodo tiene como mucho dos descendientes directos

Árbol multicamino: Cada nodo puede tener n descendientes directos

Lista= árbol degenerado de grado 1

Page 8: arboles[1]

Árboles - 8

Terminología básica

Profundidad de un nodo: número de predecesores

Altura del árbol: profundidad máxima de cualquier nodo

A

B DC

G HE F

I J K

profundidad(A)=0profundidad(H)=2altura=3

Page 9: arboles[1]

Árboles - 9

Terminología básica

Camino: existe un camino del nodo X al nodo Y, si existe una sucesión de nodos que permitan llegar desde X a Y.

camino(A,K)={A,B,F,K}

camino(C,K)={}

A

B DC

G HE F

I J K

Page 10: arboles[1]

Árboles - 10

Árboles multicamino Árboles n-arios o Multicamino (NIST):

Árbol en el que cualquier nodo puede tener cualquier número de hijos

Árboles con grado 2

Page 11: arboles[1]

Árboles - 11

Árboles multicamino Implementación 1

Hijos como array de referenciasDesaprovecha memoria si el número de hijos es muy variableNo puede usarse si el número de hijos es ilimitado

class Nodo{Object info;Nodo[] hijos;..........

}class ArbolMulticamino {

Nodo raiz;......

}

...A

...B

...C

...D

...E

...F

...G

...H

...I

...J

Page 12: arboles[1]

Árboles - 12

Árboles multicamino Implementación 2

Hijos como un VectorNecesitamos dimensionar el vector al crearlo

class Nodo{Object info;Vector hijos;...

}class ArbolMulticamino{

Nodo raiz;...

}

...A

...B

...C

...D

...E

...F

...G

...H

...I

...J

Page 13: arboles[1]

Árboles - 13

Árboles multicamino Implementación 3

Hijos como una lista enlazada

class Nodo{Object info; ListaEnlazada hijos;...

}class ArbolMulticamino{

Nodo raiz;...

}class ListaEnlazada{

NodoLE inicio;}class NodoLE{

Nodo nodoLista;NodoLE siguiente;

}

AB

C

hijos

F

E

D

siguiente

hijos

hijos

G

siguientesiguiente

hijos

siguiente

Hhijos

I

siguiente

J

siguiente

hijos

hijos

hijos

hijos

hijos

Page 14: arboles[1]

Árboles - 14

Árboles multicamino Implementación 4 (first child-next sibling binary

tree)Una referencia por cada tipo de relación: hijo/hermano

class Nodo{Object info;Nodo hijo; Nodo hermano;...

}class ArbolMulticamino{

Nodo raiz;...

}

Page 15: arboles[1]

Árboles - 15

Árbol multicamino: operaciones del TAD

asignarInfo(referenciaNodo, valorInformacion)

añadirHijo(referenciaNodo, valorInfo)

quitarHijo(referenciaNodo, valorInfo)

Modificación de los nodos

info(referenciaNodo) InformacionprimerHijo(referenciaNodo) enlacehijos(referenciaNodo) {enlace}eshoja(referenciaNodo) Booleano

Acceso a los nodos

recorrer(nombreArbol,tipoRecorrido)Recorrido del árbol

buscar(nombreArbol, dato) informacionbuscar(nombreArbol, información)referenciaNodo

borrar(nombreArbol, valorInfo) Borrado de nodos

insertar(padre, valorInfo, posicion)

insertar(padre, valorInfo)

arbolVacio(nombreArbol) BooleanoComprobación del estado

crearArbol (nombreArbol)Creación de un árbol

Inserción de nodos

Búsqueda de un nodo

Page 16: arboles[1]

Árboles - 16

Árbol multicamino: operaciones del TAD Tipos de recorridos:

Pre-ordenPost-orden

Por niveles o primero en anchura (level-order traversal)

Page 17: arboles[1]

Árboles - 17

Árbol multicamino: operaciones del TAD Recorrido en pre-orden:

se visita primero la raíz del árbol y luego se visitan recursivamente los subárboles que empiezan en sus hijos

Make Money Fast!

1. Motivations References2. Methods

2.1 StockFraud

2.2 PonziScheme

1.1 Greed 1.2 Avidity2.3 BankRobbery

1

2

3

5

4 6 7 8

9

preOrden(arbol)procesar(arbol)Para cada hijo h de arbol

preorden(hijo)

Page 18: arboles[1]

Árboles - 18

Árbol multicamino: operaciones del TAD Recorrido en post-orden:

los nodos se visitan después de haber visitado a sus hijos

postOrden(arbol)Para cada hijo h de arbol

postOrden(hijo) procesar(arbol)

cs16/

homeworks/todo.txt

1Kprograms/

DDR.java10K

Stocks.java25K

h1c.doc3K

h1nc.doc2K

Robot.java20K

9

3

1

7

2 4 5 6

8

Page 19: arboles[1]

Árboles - 19

Árbol multicamino: operaciones del TAD Recorrido por niveles

se visita por profundidad, de forma descendente y de izquierda a derecha

cs16/

homeworks/todo.txt

1Kprograms/

DDR.java10K

Stocks.java25K

h1c.doc3K

h1nc.doc2K

Robot.java20K

1

2

5

3

6 7 8 9

4

Page 20: arboles[1]

Árboles - 20

Árbol multicamino: aplicación de recorridos

Listar el contenido de un documento estructurado pre-orden

Calcular el espacio en disco que ocupa un directorio post-orden

Page 21: arboles[1]

Árboles - 21

Ejercicio Implementar la estructura de datos que

representa un sistema de ficheros

Algunas operaciones:Cambiar de directorio actualCrear directorioCrear archivoListar el contenido de un directorio

Page 22: arboles[1]

Árboles - 22

Árbol binario

Es un árbol de grado 2 Cada nodo tiene de 0 a 2 descendientes

directos: el hijo izquierdo y el derecho

<arbol> ::= <<nulo>> | <nodo>

<nodo> ::= <info> <izq> <der>

<izq> ::= <arbol>

<der> ::= <arbol>

A

B C

F GD E

H I

Page 23: arboles[1]

Árboles - 23

Árbol binario

Aplicación: expresiones aritméticas, árboles de decisión, búsqueda (ABB)

En algunos casos se exige que el árbol sea completo = todo nodo interno tiene dos descendientes.

Árbol binario completo Árbol binario no completo

Page 24: arboles[1]

Árboles - 24

Árbol binario

Ejemplo: expresiones aritméticasnodo interno: operadoresnodos hoja: operandos

2(a-1))+3b

2

a 1

3 b

Page 25: arboles[1]

Árboles - 25

Árbol binario

Ejemplo de aplicación: árboles de decisiónnodo interno: preguntas con respuesta si/nonodos hoja: decisiones

¿Dónde cenamos?

¿Cómida rápida?

¿Con café? ¿Cara?

Starbucks McDonalds Zalacaín VIPS

Sí No

Sí No Sí No

Page 26: arboles[1]

Árboles - 26

Árbol binario: propiedades

Notaciónn: número de nodose: número de nodos hojai: número de nodos internosh: altura del árbol

Propiedades

e 2h h i 2h-1log2(n+1)-1 h (n-1)/2

2h+1 n 2h+1-1

Si es completo:

eh+1e=i+1

Page 27: arboles[1]

Árboles - 27

Árbol binario: operaciones del TAD

asignarInfo(referenciaNodo, valorInformacion)

asignarIzq(referenciaNodo, valorEnlace)

asignarDer(referenciaNodo, valorEnlace

Modificación de los nodos

info(referenciaNodo) Informacionizq(referenciaNodo) enlaceder(referenciaNodo) enlaceeshoja(referenciaNodo) Booleano

Acceso a los nodos

recorrer(nombreArbol,tipoRecorrido)Recorrido del árbol

buscar(nombreArbol, dato) informacionbuscar(nombreArbol, información)referenciaNodo

borrar(nombreArbol, valorInfo) Borrado de nodos

insertar(padre, valorInfo, posicion)

arbolVacio(nombreArbol) BooleanoComprobación del estado

crearArbol (nombreArbol)Creación de un árbol

Inserción de nodos

Búsqueda de un nodo

Page 28: arboles[1]

Árboles - 28

Árbol binario: recorridos

Hay tres tipos de recorrido en un árbol binario

in-Orden

pre-Orden

post-Orden

Page 29: arboles[1]

Árboles - 29

Árbol binario: recorridos

Recorrido IN-ORDENcada nodo se visita tras visitar su subárbol izquierdo y antes de visitar el derecho

(izq, raiz, der)

Ejemplo:

h

i

e

m

a

in-orden: (i, e, h, a, m)

Page 30: arboles[1]

Árboles - 30

Árbol binario: recorridos

Recorrido PRE-ORDENprimero se visita cada nodo, luego su subárbol izquierdo y finalmente el derecho

(raiz, izq, der)

Ejemplo:

h

i

e

m

a

pre-orden: (h, i, e, m, a)

Page 31: arboles[1]

Árboles - 31

Árbol binario: recorridos

Recorrido POST-ORDENcada nodo se visita después de visitar su subárbol izquierdo y después de visitar el derecho

(izq, der, raiz)

Ejemplo:

h

i

e

m

a

post-orden: (e, i, a, m, h)

Page 32: arboles[1]

Árboles - 32

Ejemplo de recorrido de AB Ejemplo: Recorridos en las expresiones

aritméticas pre-orden: notación prefija (polaca) in-orden: notación normal (sin paréntesis) post-orden: notación polaca inversa

2

a 1

3 b

pre-orden: + x 2 - a 1 x 3 bin-orden: 2 x a - 1 + 3 x bpost-orden: 2 a 1 - x 3 b x +

• Ejercicio: escribir el pseudocódigo para que el recorrido en in-orden incluya los paréntesis

Page 33: arboles[1]

Árboles - 33

Árbol binario: aplicación de recorridos Dibujar un árbol binario in-orden

x(v) = rango en in-orden de vy(v) = profundidad de v

Imprimir una expresión aritmética in-orden Evaluar una expresión aritmética post-

orden Imprimir el índice de un documento pre-

orden Calcular espacio total ocupado por post-

ordenuna carpeta en sistema de ficheros

Page 34: arboles[1]

Árboles - 34

Árbol binario: Estructura estática Función p de numeración

por niveles:Si v es raíz de T, p(v) = 0Si v es hijo izquierdo de u, p(v)=2·p(u)+1Si v es hijo derecho de u, p(v)=2·p(u)+2

(Recorrido en anchura) Representar el árbol con

un array donde cada nodo v se almacena en la posición p(v) del array

9

3

1

10

0

5 6

2

4

Page 35: arboles[1]

Árboles - 35

Árbol binario: Estructura dinámica Cada nodo contiene:

ElementoNodo hijo izquierdoNodo hijo derecho[Nodo padre]

Árbol = ref. al nodo raíz

B

DA

C E

B

A D

C E