5. Estructuras no lineales est - PowerPoint PPT Presentation

1 / 77
About This Presentation
Title:

5. Estructuras no lineales est

Description:

Title: 5. Estructuras no lineales est ticas y din micas Author: as Last modified by: Mar a Luc a Barr n Estrada Created Date: 11/3/2005 12:30:03 PM – PowerPoint PPT presentation

Number of Views:92
Avg rating:3.0/5.0
Slides: 78
Provided by: as24
Category:

less

Transcript and Presenter's Notes

Title: 5. Estructuras no lineales est


1
5. Estructuras no lineales estáticas y dinámicas
  • Dra. María Lucía Barrón Estrada

2
  1. Conceptos de árbol
  2. Árboles binarios
  3. Árboles generales
  4. Operaciones básicas sobre árboles binarios
  5. Creación
  6. Inserción, eliminación y búsqueda
  7. Recorridos sistemáticos
  8. Balanceo
  9. Conceptos de grafos
  10. Grafos simples
  11. Grafos dirigidos
  12. Representación de grafos
  13. Operaciones básicas sobre grafos
  14. Creación
  15. Inserción, eliminación y búsqueda
  16. El camino mas corto

3
Conceptos de Árboles
  • Un árbol es una estructura de datos no lineal que
    representa una relación jerárquica de sus
    elementos.
  • Los árboles se utilizan para representar
    información ordenada, relaciones estructurales y
    para modelar situaciones que se expresan en
    términos de jerarquías.
  • Tipos de árboles
  • Generales
  • Binarios
  • Binarios de búsqueda
  • AVL, Rojo y Negro, B, etc.

4
Árboles binarios
  • Un árbol binario T es un conjunto finito de
    elementos llamados nodos, tal que
  • T es vacío (árbol nulo o vacío) No contiene
    elementos.
  • T contiene un nodo llamado Raíz de T y los nodos
    restantes de T forman un par ordenado de árboles
    binarios disjuntos T1 y T2.
  • Si T contiene una raíz R los 2 árboles T1 y T2 se
    llaman respectivamente subárbol izquierdo y
    derecho de la raíz R.

5
Ejemplo de estructuras que NO son árboles binarios
6
TERMINOLOGIA DE ÁRBOLES
  • Hijo Nodo que desciende de otro nodo.
  • Padre Nodo que tiene hijos (descendientes).
  • Raíz Único nodo que no tiene padre y tiene nivel
    0.
  • Hoja (Terminal) Nodo que sus árboles izquierdo y
    derecho están vacíos.
  • Camino Un camino entre dos elementos e1 y e2 de
    un árbol binario es una secuencia ltx1,x2,..,xngt
    donde x1 es e1 y xn es e2 y cada elemento xi es
    padre de xi1.
  • La longitud de un camino ltx1,x2,..,xngt es n-1
  • Rama Camino que termina en una hoja.
  • Subárbol es un árbol que depende de otro árbol.

7
  • Arista Línea que une a 2 nodos.
  • Nivel Es el número de aristas entre ese nodo y
    la raíz.
  • Profundidad (Altura) Máximo número de nodos de
    una rama desde la raíz ( Máximo Nivel 1 ).
  • Generación Todos los nodos que tienen el mismo
    número de nivel.
  • Ancestro de X Cualquier nodo del cuál X es
    descendiente.
  • Descendiente de X Cualquier nodo que se
    encuentre en el subárbol donde X es raíz.
  • Peso es el numero de elementos de un árbol.
  • Número de Sucesores de cualquier nodo en un árbol
    binario 0, 1, 2.

8
Ejemplo de Árbol y Sus Componentes.
raíz
Nivel 0
Subárbol derecho de Pedro
Nivel 1
arista
Nivel 2
Ancestro? Descendiente? de nodos? Altura? Genera
ción?
hermanos
hoja
9
  • Árboles Similares Son aquellos que tienen la
    misma estructura.
  • Árboles Copia Aquellos que son similares y
    tienen el mismo contenido en sus correspondientes
    nodos.

10
Aplicaciones de árboles
Estatuto if de un LP
11
Aplicaciones de árboles
(a-b)/((cd)e)
12/42 (5-1)
12
Representación Gráfica de AB
3) Grafo no dirigido
1) Diagrama de Venn
4)Notación Identada
2) Notación Decimal Dewey 1A 1.1B
1.1.1D 1.1.1.1H
1.1.2E 1. 2C 1.2.1 F
1.2.1.1I 1.2.1.2 J 1.2.2G
5) Anidación de paréntesis ( A ( B ( D ( H
),E ), C ( F ( I, J), G ) ) )
13
Árbol Binario de Búsqueda
  • Un árbol binario de búsqueda (ABB) es un árbol
    binario creado de manera especial para facilitar
    la localización de sus elementos.
  • Se pueden realizar eficientemente operaciones de
  • Inserción
  • Eliminación
  • Búsqueda
  • Recorrido
  • Un ABB cumple con las siguientes reglas para todo
    nodo T del árbol
  • Todos los valores de los nodos del subárbol
    izquierdo son menor o igual al valor del nodo T.
  • Todo los valores de los nodos del subárbol
    derecho son mayor o igual al valor del nodo T.

14
Inserción en un Árbol Binario de Búsqueda.
  • Si el árbol esta vacío, el elemento se inserta en
    la raíz.
  • Si el árbol no esta vacío el elemento se compara
    con la raíz si es menor se inserta en el subárbol
    izquierdo, si es mayor se inserta en el subárbol
    derecho.
  • El proceso de insertar un elemento es recursivo,
    ya que la inserción en el subárbol izquierdo o
    derecho sigue la misma filosofía.

15
Insertar elementos
Insertar 45 Insertar 23 Insertar 2 Insertar
7 Insertar 65 Insertar 38 Insertar 96 Insertar
52 Insertar 48
16
Eliminación de un Árbol Binario de Búsqueda.
  • Casos N- Nodo a eliminar
  • Si N es hoja (no tiene hijos) entonces N se
    elimina haciendo nulo el enlace del padre de N
    hacia N.
  • Si N tiene exactamente un hijo, N se elimina
    reemplazando el enlace del padre de N con el
    enlace del hijo de N.
  • Si N tiene 2 hijos, sustituir por el nodo que se
    encuentra mas a la izquierda en el subárbol
    derecho de N o por el nodo que esta mas a la
    derecha en el subárbol izquierdo.

17
Eliminación de un Árbol BB.
raíz
45
Caso 1 Eliminar 48 (enlace padre n null)
23
65
96
2
38
52
7
18
Eliminación de un Árbol BB.
Caso 3 Eliminar 65 (sustituir nodo por uno
de nodo Izq de subárbol derecho
nodo Der de subárbol izquierdo )
19
Árboles Binarios
  • Cuales son los elementos necesarios para definir
    un árbol binario?
  • Cuales son las operaciones asociadas a un árbol
    binario?
  • Será posible usar la misma implementación de las
    operaciones para todas las aplicaciones?

20
Interfase de un árbol binario
public interface IBinaryTree public
boolean buscar(int d) public void
insertar(int d) public int tamaño()
public void remover(int d) public boolean
vacio() // recorridos public void
inorden() public void postorden() public
void preorden()
21
public class SBinaryTree implements IBinaryTree
    private Nodo raiz   // constructor para un
arbol vacio   public void BinaryTree()    
raiz null   public boolean
busca(int d) public void inserta(int d)
public int tamaño() .. public
void remover(int d) public boolean
vacio() // recorridos public void
inorden() public void postorden()
public void preorden()
class Nodo     Nodo izquierdo     Nodo
derecho     int dato     Nodo(int d)      
izquierdo null       derecho null      
dato d      
22
Implementación usando recursión
  • Los árboles binarios son estructuras definidas
    recursivamente con dos reglas
  • Una raíz nula
  • Una raíz no nula que contiene dos subárboles que
    a su vez son también árboles binarios.
  • Cual es el caso base?
  • Como se podría definir el progreso de los métodos?

23
Implementación usando recursión
  • Las operaciones sobre un árbol inician siempre en
    la raíz.
  • Pero, el campo raíz de la clase esta declarado
    como privado, lo que indica que no esta
    disponible fuera de la clase.
  • Los métodos de la interfase sirven para
    establecer la forma de ejecución para los
    usuarios de la clase.
  • En la clase se pueden definir métodos recursivos
    que inicien el procesamiento desde la raíz.

24
Buscar un elemento en un ABB
// método para el usuario public boolean
busca(int d)     return busca(raiz, d)  
// metodo auxiliar para el procesamiento  
private boolean busca(Nodo nodo, int d)     if
(nodonull)      return false     if
(dnodo.dato)       return true     else
if (dltnodo.dato)      return
busca(nodo.izquierdo, d)        else      
return busca(nodo.derecho, d)
25
Obtener el número de elementos
// método para el usuario public int tamaño()
return tamaño(raiz) // metodo auxiliar para
el procesamiento private int tamaño(Nodo raiz)
if (raiz null) return 0 else
return 1 tamaño(raiz.izquierdo)
tamaño(raiz.derecho)
26
Insertar elementos en un ABB
public void insertar(int n) raiz
insertar(raiz, n) //método auxiliar private
Nodo insertar(Nodo r, int n) if (r null)
r new Nodo(n) else if
(nltr.dato) r.izquierda
insertar(r.izquierda, n) else
r.derecha insertar(r.derecha, n) return r
27
Recorridos de un AB
  • Inorden 2,7,23,38,45,48,52,65,96
  • Visitar el subarbol izquieredo en inorden
  • Visitar el nodo raiz
  • Visitar el subarbol derecho en inorden
  • Preorden 45,23,2,7,38,65,52,48,96
  • Visitar el nodo raiz
  • Visitar el subarbol izquieredo en preorden
  • Visitar el subarbol derecho en preorden
  • Postorden 7,2,38,23,48,52,96,65,45
  • Visitar el subarbol izquieredo en postorden
  • Visitar el subarbol derecho en postorden
  • Visitar el nodo raiz

28
Recorridos de un AB
  • Inorden D,G,B,A,H,E,I,C,F
  • Visitar el subarbol izquieredo en inorden
  • Visitar el nodo raiz
  • Visitar el subarbol derecho en inorden
  • Preorden A,B,D,G,C,E,H,I,F
  • Visitar el nodo raiz
  • Visitar el subarbol izquieredo en preorden
  • Visitar el subarbol derecho en preorden
  • Postorden G,D,B,H,I,E,F,C,A
  • Visitar el subarbol izquieredo en postorden
  • Visitar el subarbol derecho en postorden
  • Visitar el nodo raiz

raíz
A
B
C
F
D
E
G
H
I
29
Implementación de Inorden
public void inorden() inorden(raiz) System.
out.println() public void inorden(Nodo
r) if (r!null) inorden(r.izquierda) S
ystem.out.print (r.dato" ") inorden(r.derecha
)
30
Implementación de Preorden
public void preorden(Nodo r) if (r!null)
System.out.print (r.dato"
") preorden(r.izquierda) preorden(r.derech
a) public void preorden() preorden(ra
iz) System.out.println()
31
Implementación de Postorden
public void postorden() postorden(raiz) Sys
tem.out.println() public void
postorden(Nodo r) if (r!null)
postorden(r. izquierda) postorden(r.derec
ha) System.out.print (r.info" ")
32
Ejercicios para ABB
  • Escribe un método que regrese el número de hijos
    de n
  • Escribe un método que obtenga el padre de n
  • Escribe un método que obtenga para cada nodo su
    balance (nodos subárbol izquierdo - nodos
    subárbol derecho)
  • Escribe un método para Obtener los nodos de una
    generación
  • Escribe un método para Buscar el elemento mayor
    de un árbol binario
  • Escribe un método para encontrar el promedio de
    los elementos de un árbol que contiene datos
    enteros.

33
Arboles Generales
  • Un árbol general, es un conjunto finito no vacío
    T de elementos llamados nodos, tales que
  • T contiene un elemento R, llamado Raíz de T.
  • Los restantes elementos de T forman una
    colección ordenada de 0 o más a árboles disjuntos
    T1, T2, Tm.
  • Los árboles T1,T2,Tm son llamados subárboles de
    R.

34
Árboles binarios Vs Generales Un AB puede estar
vacío y el AG no. En un AB un nodo distingue
entre sus hijos como izquierdo y derecho en un
AG no hay distinción para hijos. Ejemplo Suponer
que existen 2 árboles
  • Si los 2 son AB son diferentes.
  • Si los 2 son AG son iguales.

35
Árboles Generales
  • Terminología
  • Padre Nodo del cual dependen otros nodos.
  • Hijo Nodo sucesor de otro nodo.
  • Grado de un árbol Máximo número de sucesores de
    un nodo.
  • Hermanos Nodos con el mismo padre.
  • Generación Todos los nodos de un mismo nivel.
  • Bosque es una colección de 0 o mas árboles
    distintos.

36
Bosque Es una colección de 0 o más árboles
distintos. Ejemplo Si se elimina la raíz R de un
árbol general T se obtiene un bosque que consiste
en los subárboles de R.
A
37
Conversión de un árbol en bosque
Arbol 1
Arbol 2
Arbol 3
38
Conversión de Árboles Generales a Árboles
Binarios.
  • 1.-Enlazar los hijos de cada nodo de forma
    horizontal de izquierda a derecha.
  • 2.-Enlazar de forma vertical el nodo padre con el
    hijo que se encuentra mas a la izquierda.
  • 3.-Eliminar los vínculos viejos entre hijos y
    padres.
  • 4.-Rotar el diagrama 45º.

39
(No Transcript)
40
  • Convertir un bosque a AB
  • Enlazar en forma horizontal las raíces de los
    distintos árboles generales.
  • Enlazar los hijos de cada nodo en forma
    horizontal.
  • Enlazar en forma vertical el nodo padre con el
    hijo mas a la izquierda.
  • Eliminar los vínculos del padre con los hijos.
  • Rotar el diagrama resultante.

41
L
42
Convertir un bosque a AB
43
AB
44
Representación en memoria de Árboles generales.
  • Los hijos de un nodo se pueden representar de
    diversas formas
  • Cada nodo contiene un campo de liga para cada
    hijo.
  • Cada nodo contiene un arreglo de hijos.
  • Cada nodo contiene un vector de hijos.
  • Cada nodo contiene una lista de hijos.

45
Representación gráfica
Cada nodo contiene un arreglo o vector de hijos
46
Aplicaciones de árboles generales
  • Directorio de archivos
  • Organigrama de una empresa
  • Contenido de un documento.
  • Diseño por componentes.
  • Juegos
  • Estructuras de un lenguaje de programación.

47
Recorridos de un arbol general
  • Inorden.
  • Recorrer en Inorden T1
  • Visitar la Raiz
  • Recorrer en Inorden T2
  • Recorrer en Inorden Tn
  • Preorden.
  • Visitar la Raiz
  • Recorrer en Preorden T1
  • Recorrer en Preorden T2
  • Recorrer en Preorden Tn
  • Postorden.
  • Recorrer en Postorden T1
  • Visitar la Raiz
  • Recorrer en Postorden T2
  • Recorrer en Postorden Tn

48
Otros árboles
  • Árboles balanceados
  • Por altura (AVL)
  • Por peso (perfectamente balanceados)
  • Rojinegros

49
Árboles Balanceados
  • Árboles balanceados son aquellos ABB que cumplen
    con una condición de equilibrio (que sus
    subárboles izquierdo y derecho tengan la misma
    profundidad)
  • Los árboles balanceados optimizan la búsqueda de
    elementos.
  • Árboles AVL (1962- Adelson, Velskii y Landis) la
    altura de los subárboles asociados a cada
    elemento no pueden diferir en más de 1 y los dos
    subárboles son también AVL.

50
Ejemplos de árboles AVL
51
Inserción en árboles balanceados
35
20
40
25
15
52
Inserción en árboles balanceados
Caso 1. Las ramas izquierda y derecha del
árbol tienen la misma altura. (HRI HRD )
35
20
40
53
Inserción en árboles balanceados
Caso 2. Las ramas izquierda y derecha del
árbol tienen altura diferente. (HRI ? HRD )
Caso 2.1 suponer HRI lt HRD
35
20
40
50
54
Inserción en árboles balanceados
Caso 2. (continuación) Las ramas izquierda y
derecha del árbol tienen altura diferente.
(HRI ? HRD )
Caso 2.2 suponer HRI gt HRD
55
Reestructuración
  • Factor de equilibrio Es la diferencia entre la
    altura de la rama derecha y la altura de la rama
    izquierda. FE HRD - HRI
  • Cada nodo tiene asociado un factor de equilibrio
    que se calcula para todos los elementos de la
    rama donde se realizó la inserción. Este se
    utiliza para saber si el árbol esta balanceado o
    debe reestructurarse.

-1
65
1
-1
45
70
-1
0
0
54
33
68
0
50
56
Rotaciones
Caso 1 Rotación simple por la rama izquierda
padre.izq hijo.der hijo.der padre padre hijo
padre.fe -2 hijo.fe -1
padre.der hijo.izq hijo.izq padre padre hijo
padre.fe 2 hijo.fe 1
57
Rotaciones
Caso 3 Rotación compuesta Derecha Izquierda
2
hijo.der n.izq n.izq hijo padre.izq
n.der n.der padre padre n
p h n
35
padre.fe 2 hijo.fe -1
-1
50
0
45
Caso 4 Rotación compuesta Izquierda Derecha
padre.fe -2 hijo.fe 1
25
58
5.3 Grafos
  • Un grafo es una estructura de datos no lineal que
    consta de
  • Un conjunto finito V de elementos llamados
    vértices (Nodos, Puntos).
  • Un conjunto E de aristas tales que cada arista e
    e E esta identificada por un único par
    (desordenado) u,v de nodos de V denotado como e
    u,v.

59
Un grafo se denota como G (V, E). NODOS VECINOS
O ADYACENTES Dos nodos son vecinos si existe una
arista que los una. E (u, v) los vértices u, v
son vecinos. EL GRADO DE UN NODO U es el número
de aristas que contienen a u. NODO AISLADO Son
aquellos nodos que tienen grado 0. GRAFO
ETIQUETADO Es un grafo donde cada arista tiene
un valor asignado.
60
V(G) Los Ángeles, Portland, Chicago, New York,
Las Vegas, Miami. E(G)(Los ángeles,
Chicago),(Los ángeles, New York), (Chicago, New
York), (Chicago, Las Vegas), (Las vegas, New
York), (Las Vegas, Miami)
61
Las aristas no están ordenadas lo que significa
que ( Los Ángeles, Chicago) ( Chicago, Los
Ángeles) ( u1, v2) (u2, v1) Grado (Los Ángeles)
2 Grado (Chicago) 3 Grado de Portland 0
62
Grafo dirigido
  • Un grafo dirigido es una estructura de datos no
    lineal que consta de
  • Un conjunto finito de elementos llamados
    vértices.
  • Un conjunto E de aristas con orientación
    (flechas) que conectan a 2 nodos.

Las Vegas
63
  • Terminología
  • Un camino P de longitud n desde U hasta V es una
    secuencia de n1 nodos escrita como P
    (V0,V1,,Vn).
  • Donde
  • U V0
  • Vi es adyacente a Vi-1 para toda i 1, 2, , n
  • V Vn
  • Bucle Conexión de un vértice consigo mismo.
  • Camino Cerrado Es un camino donde V0 Vn , el
    vértice inicial y el final son el mismo.
  • Camino Simple Es aquel donde todos los vértices
    son distintos (Solo V0 puede ser a Vn).

64
  • Ciclo Camino simple cerrado de longitud 3 o
    mayor.
  • K-Ciclo Es un ciclo de longitud K.
  • Grafo Convexo Grafo donde existe un camino entre
    cualesquiera dos de sus nodos.
  • Grafo Completo Un grafo es completo si cada nodo
    U de G es adyacente a todos los demás nodos de G.
  • Multigrafo Es una generalización de un grafo
    que
  • Contiene bucles y /o
  • Contiene aristas múltiples que conectan a los
    mismos extremos.

65
G1
G2
Grafo Completo G3
Grafo Completo Dirigido G4
66
  • Máximo Numero De Aristas
  • GRAFO
  • Gn n ( n - 1 ) G3 4(3) 12 6
  • 2 2 2
  • GRAFO DIRIGIDO
  • GDn n ( n 1 ) G4 4 (3)
    12
  • G1 CICLO A, B, C, A
  • GRAFO ACICLICO Es un grafo que no contiene
    ciclos.
  • (Un árbol es un grafo aciclico).

F
A
B
E
C
D
67
Un Subgrafo S1 de un grafo G se define como V
(S1) ? V (G) E (S1) ? E (G) S1 es un
subconjunto de G si y solo si V (S1) ? V (G) y E
(S1) ? E (G). Ejemplo Grafo G Subgrafo S1
Subgrafo S2 Subgrafo S3
68
Grafo débilmente conectado Para cada par de
vértices (u,v) existe un camino de u a v tal que
vo u y vn v y para cada componente de la ruta
(vi, vi1) existe en E(G) el componente (vi,
vi1) o (vi1,vi). El camino quizá no puede
recorrerse debido a la orientación de sus aristas.
69
  • Representación secuencial de grafos
  • Se basa en una matriz de adyacencia.
  • Suponga que G es un grafo dirigido simple de m
    nodos y que los nodos de G han sido ordenados y
    llamados V1, V2, , Vn. La matriz de adyacencia
    para G es de tamaño m x m definiendo cada
    elemento como
  • aij 1 si Vi es adyacente a vj. Existe e
    (vi, vj)
  • 0 en caso contrario.
  • Ejemplo 1

V1 X V2 Y V3 Z V4 W
A1
70
Para un grafo no dirigido, la matriz de
adyacencia es una matriz simétrica ai,j aj,i
X Y Z W
X
Y
0 1 1 1 1 0 1 1 1 1 0 2 1
1 2 0
X Y Z W
Z
W
71
Considere las potencias A1, A2, A3 de la matriz
de adyacencia ak(i,j) la entrada i,j de la
matriz Ak. A1 Representa el número de caminos
de longitud 1 desde el nodo vi hasta vj. Ak
Representa el número de caminos de longitud k
desde el nodo vi hasta el nodo vj.
0 0 1 1 2 0 2 3 1 0 1 2 1 0
1 1
1 0 0 1 1 0 2 2 1 0 1 1 0 0
1 1
A4
A3
Caminos de long. 3
Caminos de long. 4
Caminos de long. 2
72
  • Representación en memoria dinámica
  • Un grafo se puede representar con una LISTA DE
    ADYACENCIA.
  • Una lista de adyacencia para un vértice a es una
    lista ordenada de todos los vértices adyacentes a
    a.
  • Si el Número de nodos es fijo se pueden
    almacenar en un arreglo.
  • Ejemplo

Lista de nodos adyacentes a cada nodo.
Arreglo de nodos
73
Si el número de nodos puede variar, se deben
almacenar en una lista.
Lista de Nodos
a
b
d
c
74
Operaciones sobre grafos
  • Buscar un vértice/arista.
  • Insertar un vértice/arista.
  • Eliminar un vértice/arista.
  • Recorrer el grafo.
  • Número de vértices
  • Vacío.
  • Los vértices se mantienen en una lista de
    vértices. No pueden existir vertices repetidos.
  • Los aristas se mantienen en una lista ordenada
    para cada vértice.

75
  • Búsqueda de el camino más corto
  • Encontrar el camino más corto desde A (nodo
    inicial) hasta I (nodo final)
  • Marcar todos los nodos con infinito, y
    seleccionar nodo inicial (iniciar con 0) como
    nodo actual
  • Calcular los caminos del nodo actual a los nodos
    adyacentes, reemplazar el camino actual por el
    nuevo solo si este es menor.
  • Marcar el nodo actual como visitado.
  • Seleccionar como nodo actual el nodo con camino
    de valor mínimo.
  • Repetir para el nodo actual seleccionado los
    pasos 2, 3, 4 hasta llegar al nodo final o hasta
    agotar todos los nodos.

76
Ejemplo
(3,A)
(5,A, B)
8
8

2

B
E
3
2
1

5
8
A
3
(7,A, B, E)
8
G
C
7
1


8
(5,A)
8
4
2

F
I
2
5
D
8

1
(8, A, B, E, G)
(8, A, B, E, G)
8

H
(5,A, D)
(4,A)
8

(10,A, D, H)
77
Ejemplo 2. Encontrar el camino mas corto de A a Z
Write a Comment
User Comments (0)
About PowerShow.com