Académique Documents
Professionnel Documents
Culture Documents
CLASIFICACIÓN
Los grafos se clasifican en grafos dirigidos y no dirigidos y son
modelos naturales de relaciones arbitrarias.
Impresora
Modem
PC1
Servidor
PC2
GRAFO REPRESENTANDO UNA RED DE COMUNICACIÓN
2
Departamento de Computación y Simulación de Sistemas
CONCEPTOS BÁSICOS
Un grafo consiste en un conjunto de vértices o nodos V y conjunto de
arcos o aristas A. Se representa por G = {V, A}
1 4
5 MODELO 1
7 9
C E MODELO 2
F
D H
3
Departamento de Computación y Simulación de Sistemas
DEFINICIONES:
Bucle o lazo: es una arista que conecta un vértice consigo mismo, es
decir si tiene los extremos idénticos.
Grado de un Vértice: es el número de aristas que tienen al vértice v
como extremo. Si el grado (v) = 0 (v no tiene aristas) se dice que v es
un nodo aislado. En el modelo 2, el grado del vértice E = 3
C E MODELO 2
F
D H
4
Departamento de Computación y Simulación de Sistemas
A B C
D E F
Modelo 4
P2 = (A, E, B, F, A) es un grafo dirigido que forma un ciclo de longitud 4
3 5
2 7
Modelo 5
5
Departamento de Computación y Simulación de Sistemas
5 8
Modelo 6
Un grafo dirigido es conexo si existe una cadena que une cualquier par
de vértice.
A
H B
MODELO 7
H B
# Aristas = n(n-1)/2
D
6
Departamento de Computación y Simulación de Sistemas
# Aristas = 4(3)/2 =6
MODELO 8
Grafo árbol: Se dice que una gráfica G es del tipo árbol si G es una
gráfica conexa sin ciclos. En el grafo del Modelo 3, P1 es un grafo
árbol.
8
C E MODELO 2
10
4
F
D H
2
7
Departamento de Computación y Simulación de Sistemas
MATRIZ DE ADYACENCIA:
Es una matriz booleana de orden n, donde n indica el número de
vértices de G. Los renglones y columnas de la matriz representan a los
vértices y su contenido la existencia o no de arcos entre ellos. Por lo
tanto cada elemento i, j de la matriz almacenada tendrá un 1 si existe
un arco o un 0 si no existe un arco entre los vértices i, j.
criterios:
1 si vi es adyacente a vj o sea si existe una arista
a ij = (vi, vj)
0 en caso contrario
8
Departamento de Computación y Simulación de Sistemas
Veamos un Ejemplo:
Considere el siguiente grafo dirigido. Suponga que los nodos se
guardan en memoria en un arreglo lineal DATOS tal como sigue:
DATOS:
Y X
Z W
Asumimos que el orden de los nodos es el siguiente:
V1 = X, V2 = Y, V3 = Z, V4 = W.
X Y Z W
X 0 0 0 1
Y 1 0 1 1
DATOS = Z 1 0 0 1
W 0 0 1 0
9
Departamento de Computación y Simulación de Sistemas
MATRIZ DE CAMINOS
Esta operación sobre los grafos puede obtenerse de dos formas:
Mediante la Potencia de Matrices y Sumatoria de Matrices
Mediante el Algoritmo de Warshall
Potencia de Matrices
Considere las siguientes potencias de la matriz de adyacencia A 1, A2,
A3,… Ak. De un grafo dado “G”. Sea:
X Y Z W
X 0 0 0 1
Y 1 0 1 1
A = Z 1 0 0 1
W 0 0 1 0
10
Departamento de Computación y Simulación de Sistemas
A2 = A X A X Y Z W
X 0 0 1 0
Y 1 0 1 2
A2 = Z 0 0 1 1
W 1 0 0 1
A3 = A 2 X A X Y Z W
X 1 0 0 1
Y 1 0 2 2
A3 = Z 1 0 1 1
W 0 0 1 1
A4 = A 3 X A X Y Z W
X 0 0 1 1
Y 2 0 2 3
A4 = Z 1 0 1 2
W 1 0 1 1
Bk = A1+A2+A3+... Ak.
11
Departamento de Computación y Simulación de Sistemas
Matriz de camino: Sea “G” un grafo dirigido simple con m nodos V1,
V2, ....Vm. La matriz de caminos o matriz de alcance de G es la matriz
m-cuadrada definida por:
RELACION ENTRE P Y B:
Sea A la matriz de adyacencia y P la matriz de camino del grafo,
entonces una entrada de matriz de camino pij será igual a 1 si y solo
si, existe un entero positivo en la entrada ij de la matriz Bk.
1 0 1 1
1 0 1 1
Matriz de camino
P = 1 0 1 1 Encontrada
1 0 1 1
12
Departamento de Computación y Simulación de Sistemas
ALGORITMO DE WARSHALL
Partiendo de la matriz de adyacencia se puede tener la matriz de
camino sin tener que calcular las distintas matrices de adyacencias.
Para ello utilización los conceptos del Algoritmo de Warshall.
0 en otro caso
13
Departamento de Computación y Simulación de Sistemas
0 en otro caso
Procedimiento:
Transferimos a la matriz Pk a todas los entradas de la matriz P k-1
Listar todas las localidades p1, p2, p3...pk de la columna k de la
matriz Pk-1 donde la componente sea igual a 1 y las localidad q1,
q2, q3,... qk, del renglón k de la matriz Pk-1 donde donde la
componente sea igual a 1
Acomodar unos en todas las posiciones (pi, qj) de la matriz P k si
todavía no los tiene.
Veamos el ejemplo:
0 0 0 1
1 0 1 1
A= 1 0 0 1
0 0 1 0
0 0 0 1 qk
1 0 1 1
P0 = 1 0 0 1
0 0 1 0
0 0 0 1
1 0 1 1 qk
P1 = 1 0 0 1
0 0 1 0
14
Departamento de Computación y Simulación de Sistemas
..
...
1 0 1 1
1 0 1 1
P4 = 1 0 1 1
1 0 1 1
Sea “G” un grafo dirigido con “m” nodos, v1, v2, v3,.....vm. Para cada
arista “e” del grafo se tiene un asignado un número no negativo w (e)
llamado peso o longitud de la arista “e”. Entonces el grafo “G” se
puede mantener en memoria por la matriz de sus pesos W = [wij]
definida de la siguiente forma:
Para ello se define una secuencia de matrices Q0, Q1, Q2,..Qm cuyas
entradas vienen dada por:
Mas exactamente:
15
Departamento de Computación y Simulación de Sistemas
7 R 4 U
5 7 2 1
S T
3
7 5 α α qk
7 α α 2
Q0 = α 3 α α
4 α 1 α
16
Departamento de Computación y Simulación de Sistemas
pk-1 = 1, 2, 4 y la qk-1 = 1, 2
7 5 α α
7 12 α 2 qk
Q1 = α 3 α α
4 9 1 α
7 5 8 7
7 11 3 2
Qm = 9 3 6 5
4 4 1 6
17
Departamento de Computación y Simulación de Sistemas
PRACTICA
Concepto Generales de Grafos, Algoritmo de Warshall y
Caminos Mínimos
DATOS : X, Y; S, T
X 5 Y
2 3 1 6 7
4
S T
8
18
Departamento de Computación y Simulación de Sistemas
B C
Como primer punto mostramos una tabla que representa a cada nodo del
grado “G” seguida por una lista de nodos adyacentes, también llamados
sucesores o vecinos.
19
Departamento de Computación y Simulación de Sistemas
A Nil
Principio
B Nil
C Nil
D Nil
E NIL Nil
Los nodos mismos estarán organizad como una lista enlazada y por tanto
habrá una variable puntero:
ENL: Enlazará juntas las aristas con el mismo nodo inicial, o sea los
nodos con las misma lista de adyacencia.
20
Departamento de Computación y Simulación de Sistemas
EJEMPLO: ADISP
2
Principio
NODO SIG ADY DEST ENL
1 3 1 2(C) 7
4
2 C 9 0 2 5
3 8 3 7(B) 10
4 A 7 3 4 9(D) 0
NDISP
5 1 5 8
6 E 0 11 6 2(C) 0
5
7 B 2 6 7 6(E) 0
8 10 8 9
9 D 6 1 9 12
10 0 10 2(C) 4
11 2(C) 0
12 0
REPRESENTACIÓN EN PASCAL
Type
PtrDir = ^NodoDir
PtrAdy = ^NodoLy
NodoDir = record
Vert : String; (indentificador del Vértice)
Lady : PtrAdy;
Sgte : PtrDir
end;
NodoLy = record
PtrV : PtrDir;
Sgte : PtrAdy
end;
21
Departamento de Computación y Simulación de Sistemas
RECORRIDO DE UN GRAFO
Muchos de los algoritmos de grafos requieren que se examine
sistemáticamente los nodos y las aristas de un grafo “G”. Esto puede ser
realizado de dos formas estándar. Una forma llamada búsqueda en anchura
y la otra búsqueda en profundidad. Las búsqueda en anchura usará una cola
como una estructura auxiliar para mantener los nodos que se vayan a
procesar posteriormente y análogamente, la búsqueda en profundidad usará
una pila.
Durante la ejecución de estos algoritmos cada nodo “N” del grafo “G” estará
en un estado, lo cual se llama estado del nodo “N”, tal como sigue.
EJEMPLO:
22
Departamento de Computación y Simulación de Sistemas
Suponga que el grafo “G” representa los vuelos diarios entre ciudades de
alguna compañía aérea y suponga que deseamos volar de la ciudad A a la
ciudad C. Con el mínimo número de paradas. En otras parabras se desea el
Camino Mínimo “P” desde A hasta C. (Longitud Aristas (1 KM).
A E
NODOS SUCESORES
D A B,D,E
B
C B
C D B,C
B E C,D
FRENTE = 1 COLA = A
FINAL = 1 ORIG = 0
FRENTE = 2 COLA = A B D E
FINAL = 4 ORIG = 0 A A A
FRENTE = 3 COLA = A B D E
FINAL = 4 ORIG = 0 A A A
FRENTE = 4 COLA = A B D E C
FINAL = 5 ORIG = 0 A A A D
23
Departamento de Computación y Simulación de Sistemas
BÚSQUEDA EN PROFUNDIDAD
A E NODOS SUCESORES
D A B,D,E
B
C B
C D B,C
B E C,D
24
Departamento de Computación y Simulación de Sistemas
INSERCIÓN EN UN GRAFO
1) Inserción de un nodo
tipo
enlace = ^puntero
nodo = registro
info :string;
sig : enlace;
ady : enlace
fin;
arista record
dest : enlace;
enl : enlace
end;
25
Departamento de Computación y Simulación de Sistemas
RETORNAR
SI ADISP = NILL
ENTONCES
INDIC := FALSE “DESBORDAMIENTO
DE OTRO MODO
NUEVO ADISP
ADISP ADISP^ENL
NUEVO^DEST POSB
NUEVO^ENL POSA^ADY
POSA ^ADY NUEVO
RETORNAR
VEAMOS EL EJEMPLO
PRINCIPIO = 1 NDISP = 5
NODO A B E D C
SIG 7 4 0 6 8 0 2 3
ADY 1 2 5 7 6
ADISP = 8
DEST 2 6 4 6 7 4 4 6
ENL 10 6 0 0 0 3 0 4 0 0
PRINCIPIO = 5 NDISP = 8
NODO F
SIG 1
ADY NIL
El nodo queda al inicio de la lista nodo. Y el resto de lista nodo queda igual.
Adicionalmente la lista de arista no sufre cambios.
PRINCIPIO = 5 NDISP = 8
26
Departamento de Computación y Simulación de Sistemas
NODO A B E F D C
SIG 7 4 0 6 1 0 2 3
ADY 1 2 5 NIL 7 6
ADISP = 8
DEST 2 6 4 6 7 4 4 6
ENL 10 6 0 0 0 3 0 4 0 0
PRINCIPIO = 5 NDISP = 8
NODO A B E F D C
SIG 7 4 0 6 1 0 2 3
ADY 8 2 5 NIL 7 6
ADISP = 4
DEST 2 6 4 6 7 4 5 4 6
ENL 10 6 0 0 0 3 0 1 0 0
Para el proceso de inserción de la arista, esta queda al inicio de la lista de
sucesores del nodo fuente.
ELIMINACIÓN EN UN GRAFO
1) Eliminación de una Arista
Suponga que se va a eliminar una Arista (A, B) de un grafo “G” dados. Para
realizar este procedimiento hay que encontrar primero la posición de inicio de
la Arista POSA para el nodo “A”. Y la posición destino de la Arista POSB
para el nodo “B”. Luego simplemente se elimina la posición destino de la
arista POSB de la lista de sucesores del nodo “A” , que esta siendo
direccionado por el puntero POSA^ÂDY. En el proceso se usará una
variable lógica “INDIC” que indica si no existe la arista en el grafo.
Adicionalmente se utiliza una variable “PTR” que indica la arista que será
eliminada.
VEAMOS EL EJEMPLO:
PRINCIPIO = 5 NDISP = 8
NODO A B E F D C
SIG 7 4 0 6 1 0 2 3
ADY 8 2 5 NIL 7 6
ADISP = 4
27
Departamento de Computación y Simulación de Sistemas
DEST 2 6 4 6 7 4 5 4 6
ENL 10 6 0 0 0 3 0 1 0 0
PRINCIPIO = 5 NDISP = 8
NODO A B E F D C
SIG 7 4 0 6 1 0 2 3
ADY 8 2 5 NIL Nil 6
ADISP = 1
DEST 6 4 6 7 5 4 6
ENL 7 6 0 0 0 3 4 10 0 0
a) POSA = 6 b) POSA = 1
POSB = 4 POSB = 2
PTR = 7 PTR = 1
ANT = 8
Las inserción de las Aristas liberadas se hacen al inicio de ADISP.
2) Eliminación de un Nodo
Suponga que deseamos eliminar un nodo “N” del grafo “G”. Está operación es
más complicada que las operaciones de búsquedas e inserción de nodos y
aristas, y que la eliminación de aristas, ya que debemos eliminar todas las
aristas que contengan al nodo “N”.
28
Departamento de Computación y Simulación de Sistemas
PRINCIPIO = 1 NDISP = 6
NODO A B C D E
SIG 2 3 4 5 0 7 8 0
ADY 1 4 7 9 13
ADISP = 15
DEST 2 3 4 1 4 5 1 4 1 2 3 5 2 4
ENL 2 3 0 5 6 0 8 0 10 11 12 0 14 0 16 0
ELIMINAR EL NODO B
POSN = 2; ARISTA LLEGAN PTR = 1,10,13 COM = 4
ARISTA QUE SALEN PTR = 4,5,6 FIN = 6
PRINCIPIO = 1 NDISP = 2
NODO A C D E
SIG 2 6 4 5 0 7 8 0
ADY 1 7 9 14
29
Departamento de Computación y Simulación de Sistemas
ADISP = 4 1 4 5 6 2 3
DEST 3 4 1 4 1 3 5 4
ENL 15 3 0 5 6 13 8 0 11 1 12 0 10 0 16 0
POSN^ANT^SIG POSN^SIG
POSN^SIG NDISP
NDISP POSN
PRACTICA
MANTENIMIENTO DE LOS GRAFOS
PRINCIPIO = 6 NDISP = 5
NODO A C E D B
SIG 4 0 8 0 7 3 2 1
ADY 6 1 10 2 9
ADISP = 3
DEST 8 8 1 4 3 3 6 3
ENL 5 7 0 0 0 0 0 0 4 0
Nota: Para cada caso debe tomarse como grafo inicial el dado.
PRINCIPIO = 1 NDISP = 8
NODO A B C D E
30
Departamento de Computación y Simulación de Sistemas
SIG 2 3 4 5 0 0 6 7
ADY 11 14 3 2 1
ADISP = 5
DEST 4 2 1 4 5 3 4 5 2 3 5
ENL 13 0 6 0 7 4 12 0 10 0 9 0 0 8
a) Dibujar el Grafo
b) Insertar la arista (A, C)
c) Eliminar la arista (B, C)
d) Insertar el nodo (F)
e) Insertar la arista (B, F) y (F, D)
f) Eliminar el nodo (E)
g) Dibujar el grafo
Conceptos
Ordenar significa permutar estos elementos de tal forma que los mismos
quedan de acuerdo con un orden pre-establecido:
Ascendente: A1 <= A2 <= A3 <=....... <=An
Descendente: A1 >= A2 >= A3 >=....... >=An
ORDENACIÓN DE ARREGLOS
Recibe el nombre también de ordenación “interna”, ya que los elementos o
componentes del arreglo se encuentra en la memoria principal de la
computadora.
31
Departamento de Computación y Simulación de Sistemas
ORDENACIÓN DE ARCHIVOS
Recibe también el nombre de ordenación “externa” ya que los elementos se
encuentran almacenados en dispositivos de almacenamiento secundario
como lo son los disco, cintas, etc.
ORDENACIÓN INTERNA
Para la aplicación delos métodos de ordenación interna se utilizan arreglos
unidimensionales aunque también pueden utilizarse otros tipos de arreglos
por ejemplos: bidimensionales y tridimensionales. Cabe destacar que se
trabajará con métodos de ordenación que no requieren de arreglos auxiliares
para su ordenación ya que estos además de ineficientes, son intrínsecamente
de menor interés.
Los métodos de ordenación logarítmica son más complejos que los directos,
usan menos comparaciones y movimientos para ordenar sus elementos pero
su elaboración y compresión resulta más sofisticada y abstracta.
Para los métodos de ordenación interna puede decirse que cuando “n” es
pequeño debe utilizarse métodos directos y cuando “n” es medio o grande
deben emplearse los métodos logarítmicos.
32
Departamento de Computación y Simulación de Sistemas
Ejemplo
Supóngase que se desean ordenarse las siguientes claves del arreglo A,
transportando en cada pasada el menor elemento hacia la izquierda del
arreglo.
A 15 67 08 16 44 27 12 35
PRIMERA PASADA
A 08 15 67 12 16 44 27 35
SEGUNDA PASADA
33
Departamento de Computación y Simulación de Sistemas
C = (n – 1) + (n - 2) + ..... + 2 + 1 = n * (n -1)
2
que es igual a:
C = n * (n -1)
2
Respecto al número de movimientos estos dependen de que si el arreglo está
ordenado, desordenado o en un orden inverso. Los movimientos para cada
uno son los siguientes.
Ejemplo
Se tiene que ordenar un arreglo que contiene 500 elementos. Determine el
número de comparaciones y movimientos a realizar si:
34
Departamento de Computación y Simulación de Sistemas
2 2
MMax= 1.5*(n2 – n ) = 1.5 * ( 5002 – 500) = 374,250 Movimientos
Ejemplo:
Supóngase que se desea ordenar las siguientes claves del arreglo A
utilizando el método de inserción directa.
A 15 67 08 16 44 27 12 35
PRIMERA PASADA
A 15 67 08 16 44 27 12 35
SEGUNDA PASADA
A 08 15 67 16 44 27 12 35
TERCERA PASADA
A 08 15 16 67 44 27 12 35
35
Departamento de Computación y Simulación de Sistemas
Cmin = n – 1
Cmax = (n2 – n)
2
Por lo tanto:
Cmed = ( (n - 1) + ( n2 – n) / 2 ) / 2
Cmed = ( n2 + n – 2) / 4
Por lo tanto:
Mmin = 0
que es igual a:
Mmax = ( n2 – n ) / 2
36
Departamento de Computación y Simulación de Sistemas
Por lo tanto:
Mmed = ( 0 + ( n2 – n ) / 2) /2
Que es igual a:
Mmed = ( n2 – n ) / 4
Ejemplo:
Si se tiene que ordenar un arreglo que contiene 500 elementos cuanto se
será el numero de comparaciones y movimientos a realizar si:
37
Departamento de Computación y Simulación de Sistemas
Ejemplo
Supóngase que se desea ordenar las siguientes claves del arreglo A
utilizando el método de selección directa.
A 15 67 08 16 44 27 12 35
PRIMERA PASADA
A 08 12 15 16 44 27 67 35
A 08 12 15 16 44 27 67 35
A 08 12 15 16 44 27 67 35
A 08 12 15 16 27 44 67 35
A 08 12 15 16 27 35 67 44
A 08 12 15 16 27 35 44 67
Por lo tanto:
C = (n –1 ) + ( n – 2) + ......+ 2 + 1 = n * (n – 1)
2
C = n2 – n
2
38
Departamento de Computación y Simulación de Sistemas
Por lo tanto:
M=n–1
EJEMPLO:
Se tiene que ordenar un arreglo que contiene 500 elementos
C = 124,750 comparaciones
M = 499 Movimiento
39
Departamento de Computación y Simulación de Sistemas
EJEMPLO
Suponga que se desea ordenar los elementos que se encuentran en una
arreglo A utilizando el método de quicksort.
A 15 67 08 16 44 27 12 35
X= 15
A 12 67 08 16 44 27 15 35
A 12 67 08 16 44 27 15 35
A 12 15 08 16 44 27 67 35
A 12 15 08 16 44 27 67 35
A 12 08 15 16 44 27 67 35
X = 12 X = 44
A 08 12 15 16 35 27 67 44
A 08 12 15 16 35 27 44 67
X = 35
A 08 12 15 16 27 35 44 67
40
Departamento de Computación y Simulación de Sistemas
En este caso, el peor caso ocurre cuando los elementos del arreglo ya se
encuentran ordenados, o bien cuando los mismos se encuentran en orden
inverso.
A 67 36 60 28 21 56 44 27 16 15 08 35
41
Departamento de Computación y Simulación de Sistemas
Claves 15 60 08 16 44 27 12 35
a) inserción : clave 15
15
A 15
b) Insertar :clave 60
15 60
60 15
A 15 60
A 60 15
MONTÍCULO FINAL
A 60 44 27 35 16 08 12 15
ELIMINACIÓN DE UN MONTÍCULO
El proceso para obtener los elementos ordenados se efectúa eliminando la
raíz del montículo en forma repetida. Los pasos necesarios para lograr la
eliminación de la raíz del montículo son las siguientes:
Ejemplo:
Supóngase que se desea eliminar la raíz del montículo presentado en el
arreglo en formas repetidas.
A 67 56 60 44 21 28 36 15 35 16 13 08 27 12 07 10
Para poder ordenar un arreglo utilizando el método del montículo cabe aclarar
que al reemplazar la raíz por el último elemento del montículo, esta se coloca
en la posición de este. Es decir, la primera vez en la posición n, la segunda
vez en la posición (n -1), la tercera vez en la posición (n - 2) y así
sucesivamente hasta que quede colocada en las posiciones dos(2) y luego en
la uno(1).
A 67 56 60 44 21 28 36 15 35 16 13 08 27 12 07 10
Primera Pasada
A 60 56 36 44 21 28 12 15 35 16 13 08 27 10 07 67
Segunda Pasada
42
Departamento de Computación y Simulación de Sistemas
A 56 44 36 35 21 28 12 15 07 16 13 08 27 10 60 67
Tercera Pasada
A 44 35 36 15 21 28 12 10 07 16 13 08 27 56 60 67
Y así sucesivamente....
Ejercicio.
Si queremos ordenar un arreglo de 500 elementos demuestre cual de los
cinco método es más eficiente y porque en cuanto al tiempo de ejecución de
cada uno de ellos.
43