Title: Dise
1Diseño y análisis de algoritmos
Revisión de estructuras de datos
2Introducción
- Revisión de estructuras de datos
- Grafos
- Listas
- Arboles binarios
- Heaps
- Definición tarea 1
- Definición formal de Arboles, Listas, Heaps
- Fecha entrega 31 agosto
3Estructuras de datos
- Definición abstracta de red o grafo
Def1. Un grafo (concreto o físico) es una
colección de segmentos o líneas rectas y puntos
en un espacio tridimensional. Def2. Los
segmentos o líneas se llamarán arcos y los puntos
vértices Prop1. Dos arcos se pueden intersectar
sólo en un punto o tienen un solo vértice en
común Prop2. Todo arco de un grafo tiene dos
vértices asociados. Prop3. Si los vértices de un
grafo son conocidos, entonces, la red puede ser
completamente especificada exhibiendo aquellos
pares de vértices que son puntos terminales de
cada arco no conectado completamente.
4Estructuras de datos
- Definición Formal abstracta de un grafo
completamente conectado
- Un grafo está especificado por un conjunto de
vértices V , y ciertos conjuntos del tipo a,b
tales que a e V y b e V y a dist b es un
elemento de (VV). Esto lleva a la descripción de
un grafo como un par ordenado de conjuntos (V,A)
tales que A dde (VV). - Cualquier conjunto V será suficiente para
conformar un conjunto de vértices - Siendo V finito y no vacío . En el extremo de
esta definición el conjunto A puede ser vacío
(Grafo completamente desconectado o puntos sin
relación alguna) - Finalmete una definición abstracta de grafo es
- (V,S) es un grafo ssi
- 1) V es finito y V
- 2) S d (VV)
5Estructuras de datos
Ejemplo
0
Grafo G
1
2
3
4
5
V(0,1,2,3,4,5) A(0,1,1,2,1,3,2,4,3,4,
4,5,1, 0,2,1,3,1,4,2,4,3,5,4)
G ((0, 0,1), (1, 1,2), (1,
1,3),............), nodos terminales (0,5)
6Estructuras de datos
- Grafos
- Def 1 Adyacencia, dos vértices Vi, Vj
- son adyacentes si w Aiji,j tal que los una
dichos vértices. - Def 2 Vecindad, dos vértices Vi, Vj son
vecinos ssi Def1. - Def 3 Grado de Vi, es la cantidad de arcos que
inciden en el vértice - Def 4 Grafo completamente conectado, si i,j
w arcos que unen Vi, Vj - Def 5 Grafo dirigido es u G(N,A) donde Aij es
un elemento diferente de Aji
7Estructuras de datos
Grafos Ejemplo de un grafo dirigido
0
A01 ltgt A10 A13 ltgt A31
1
2
- Vértice o nodo 0 es adyacente con 1
- Vecinos de 1 0 2 3
- Grado de 4 3
3
4
5
V(0,1,2,3,4,5) A(0,1,1,2,1,3,2,3,2,4,
3,4,4,5,1, 0,3,1)
8Estructuras de datos
- Grafos
- Def 5 Camino, o ruta de G(V,A), puede
representarse sólo por la secuencia de sus Vi - (v1, v2,...... Vn ) o por los arcos utilizados en
la senda, Aij (1,2 , 2,8 ,....., i,j ) - Prop 1 Largo de una ruta, k si hay k Aij en la
ruta - Prop 2 Ruta simple, si todos los vértices (v1,
v2,...... Vn ) son distintos - Prop 3 Ruta cíclica, si es simple y v1 Vn
- Def 6Conectividad, los nodos Vi y Vj estan
conectados si y sólo si el grafo contiene al
menos una ruta simple entre estos dos vérices. - Def 7Un Grafo es Conexo, si y sólo si todos sus
pares de nodos están conectados.
9Estructuras de datos
- Grafos Parte final
- Representación
- Si suponemos que el grafo G(V,A) podemos
representarlo en una matriz, donde las filas i y
las columnas j corresponden a nodos y la celda
Gi,j 1 corresponde un arco.
1
n
0
C1n
Nodos o vértices
Grafo no dirigido
0
Cn1
Estructura Mc (ejemplo 7 vertices)
0
n
C1n 21 Cn1 21 Diag7 S497 Es decir matriz
cuadrada de 7x7
struct arcos int origen int destino
Diagonal en cero implica que no hay arcos Sobre
un nodo
2
struct costos int infonodoNODOS
struct arcos VNODOS struct costos
mcostosCIUDADES
10Estructuras de datos
- Grafos Parte final
- Representación
- Ejemplo1 Sea G(V,A) un grafo no dirigido,
AijAji, Aij0
0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0
0 1 0 0 0 0 1 0 1 1 0 0 0 0 0 1 1 0 0 1 0 0 1
0 0 0 0 0 0 1 0 0 0 0 0 0
Ejemplo2 para el grafo dirigido
anterior Vértice 0 está conectado con 5 Si por
ruta0-1-2-4-5 Ruta cíclica1-2-3-1
11Estructuras de datos
- Listas simples
- Definciónla lista enlazada es una estructura de
los datos dinámica muy flexible. - En una lista enlazada, cada dato se asigna a un
campo del nodo de una lista. Un puntero se guarda
con cada nodo, apuntando al próximo nodo de la
lista. - No es necesario saber de antemano (ni nunca)
cuántos nódos tendrá la lista. - Esto permite escribir programas robustos que
requieren menos mantención - Desventaja crecimiento no esperado de la lista
puede copar la memoria.
12Estructuras de datos
- Listas
- Operaciones básicas
- Insertar nodo
- Eliminar nodo
- Recorrer lista en forma secuencial
- EstructuraCada nodo de la lista tiene dos
elementos - Una estructura de datos es un campo de la lista
- un puntero es un campo obligatorio que apunta al
próximo nodo en la lista - El último nodo en la lista contiene un indicador
NULO para indicar que es el fin o trail de la
lista.
struct list void item
struct node next
13Estructuras de datos
- Variantes
- Listas circulares
- Asegurando que el final de la lista siempre está
apuntando a la cabeza, nosotros podemos construir
una lista circularmente unida. - Esta estructura permite generar operaciones tipo
LIFO o FIFO . - Aplicación en algoritmo de itineración de SO
round-robin" para procesos.
14Estructuras de datos
- Variantes
- Doble lista enlazada
- Las listas doblemente enlazadas tienen un
indicador - al nodo precedente así como uno al próximo
struct t_node void item struct
t_node previous struct t_node next
node
15Estructuras de datos
- Arboles binarios
- Arboles binariosLa variedad de árboles más
simple de árbol es un árbol binario. Un árbol
binario consiste de - un nodo (llamado el nodo de la raíz) y
- De este nodo se proyectan un sub-árbol izquierdo
y un subárbol derecho. - Ambos subárboles - son los árboles binarios.
- Esta es una definición recursiva de árbol (una
lista también puede definirse en forma recursiva)
16Estructuras de datos
Arboles binarios
TYPE ptr POINTER TO node
TYPE node RECORD
itemdatos leftptr
rightptr
END
17Estructuras de datos
Arboles binarios propiedades Los nodos a los
niveles más bajos del árbol se llama las hojas.
En un árbol binario ordenado, cuya aplicación
es manejar datos rápidamente encontrables
mediante algoritmos de búsqueda binaria que
pueden hacer tres recorridos distintos (según el
cual se deben ordenar los nodos) 1.
Preordenvisita el nodo raiz, luego el sub-árbol
izquierdo y el sub-árbol derecho. 2. En
ordenvisita el sub-árbol izquierdo, luego el
nodo raiz y el sub-árbol derecho. 3.
Postorden visita el sub-árbol izquierdo, luego
sub-árbol derecho y finalmente el nodo raíz.
18Estructuras de datos
Ejemplo 1árbol binario que representa una
expresión matemática
- Recorriendo en
- Preorden - a / b c d e f
- En eorden a b / c d e f
- Postorden a b c / d e f -
-
a
/
d
b
c
e
f
Ejemplo 2a partir de los siguientes datos
construya un arbol binario Tal que su recorrido
en orden entregue los datos ordenados en forma
ascendente 3 1 5 4 7
5
3
7
1
4
19Estructuras de datos
- Heaps
- DefinciónLos heaps están basados en la noción de
un árbol binario completo. - Def1 altura o profundidad de un árbol binario h
corresponde al número de cortes horizontales que
se pueden realizar desde el nodo - inicial o padre hasta las hojas
terminales. - Def 2Ssi un árbol binario tiene (2 1) nodos,
entonces esta totalmente completo - En todo caso se podría decir informalmente que
un árbol binario es completo ssi , - Está vacío o,
- Hasta el nivel h-1 esta totalmente completo
- El nivel h (último nivel) puede no estar lleno en
su totalidad pero si de izquierda a derecha
h1
20Estructuras de datos
- Heaps
- Def 3 un árbol binario es considerado un heap
ssi es completo y - Está vacío o,
- la llave en la raíz es más grande que que en
cualquier hijo y ambos ambos subárboles tienen la
propiedad del heap. - Aplicación un heap puede ser usado como lista
de priorides Un heap puede usarse como una cola
de prioridad el dato de prioridad más alto está
en la raíz y se extrae trivialmente. Pero si la
raíz se elimina, se crean dos sub-árboles,entonce
s se debe recrear un solo árbol eficazmente con
la propiedad del heap ya definida.
21Estructuras de datos
Ejemplo árboles y heaps
80
65
80
65
73
15
73
65
73
53
15
68
49
80
53
68
49
53
68
49
8
15
8
8
Arbol Heap
No se heap, no cumple propiedad de orden
No se heap, no cumple propiedad de árbol completo