La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Presentaciones similares


Presentación del tema: ""— Transcripción de la presentación:

86 Algoritmo de Dijkstra Supóngase un grafo dirigido G=(V, A) en el cual cada arco tiene una etiqueta no negativa, y donde un vértice se especifica como origen. El problema es determinar el costo del camino más corto del origen a todos los demás vértices de V, donde la longitud de un camino es la suma de los costos de los arcos del camino. FCC-BUAP Primavera 2015 MC Beatriz Beltrán Martínez

87 Algoritmo de Dijkstra El algoritmo de Dijkstra opera a partir de un conjunto de S de vértices cuya distancia más corta desde el origen ya es conocida. Inicialmente S sólo contiene al origen. En cada paso se integra un nuevo vértice, cuya distancia al origen es la más corta posible. En cada paso se utiliza un arreglo D para registrar el camino más corto. FCC-BUAP Primavera 2015 MC Beatriz Beltrán Martínez

88 Algoritmo de Dijkstra Se supone que se tiene un grafo dirigido G=(V, A) en el que V={1, 2, …, n}. C es un arreglo bidimensional de costos, donde C[i, j] es el costo de ir del vértice i al j. En caso de que no exista dicho arco, C[i, j] es ∞. D[i] contiene la longitud del camino más corto al vértice i. P[v] contiene el vértice inmediato anterior a v en el camino más corto. FCC-BUAP Primavera 2015 MC Beatriz Beltrán Martínez

89 Algoritmo de Dijkstra Inicio S{1} Para i2 hasta n hacer D[i]C[1,i]
Fin_para Para i1 hasta n-1 hacer Elige un vértice w en V-S tal que D[w] es mínimo. Agrega w a S Para cada vértice v en V-S hacer Si D[w]+C[w, v]<D[v] entonces P[v] w D[v] D[w]+C[w, v] Fin_si Fin FCC-BUAP Primavera 2015 MC Beatriz Beltrán Martínez

90 Algoritmo de Floyd Se tiene un grafo y se desea obtener el camino más corto entre cualesquiera dos pares de vértices. Se tiene un grafo dirigido G=(V, A) en el cual cada arco tiene un costo no negativo. El Algoritmo de Floyd obtiene una matriz en la que se calculan los costos de los caminos más cortos. Inicialmente A[i, j]=C[i, j] para toda i≠j. Si no hay arco de i a j se supone C[i, j]=∞. FCC-BUAP Primavera 2015 MC Beatriz Beltrán Martínez

91 Algoritmo de Floyd Inicio Para i1 hasta n hacer
Para j1 hasta n hacer A[i, j]C[i, j] Fin_para A[i, i]0 Para k1 hasta n hacer Si A[i, k]+A[k, j]<A[i, j] entonces A[i, j]A[i, k]+A[k, j] Fin_si FCC-BUAP Primavera 2015 MC Beatriz Beltrán Martínez Fin_para Fin

92 Árbol abarcador de costo mínimo
Sea G=(V, A) un grafo conexo, con un costo en las aristas. Sea U algún subconjunto propio del conjunto de vértices V. Si (u, v) es una arista de costo mínimo, tal que uU y vV-U, existe un árbol abarcador de costo mínimo que incluye (u, v) entre sus aristas. FCC-BUAP Primavera 2015 MC Beatriz Beltrán Martínez

93 Algoritmo de Prim Supóngase que V={1, 2, …, n}.
El algoritmo de Prim comienza cuando se asigna a un conjunto U un valor inicial {1}, en el cual crece un árbol abarcador, arista por arista. En cada paso se localiza la arista más corta (u, v) que conecta a U con V-U, agregando vV-U a U. Esto se repite hasta que V=U. FCC-BUAP Primavera 2015 MC Beatriz Beltrán Martínez

94 Algoritmo de Prim Prim T U{1} Mientras UV hacer
Sea (u, v) una arista de costo mínimo tal que uU y vV-U. TT{(u,v)} UU {v} Fin_mientras Fin FCC-BUAP Primavera 2015 MC Beatriz Beltrán Martínez

95 Algoritmo de Kruskal Supóngase que se tiene el grafo G=(V, A) con V={1, 2, …, n}. Se inicia con el grafo T=(V, ) constituido solo por los vértices de G sin aristas. Por lo tanto, cada vértice es un componente conexa. Conforme el algoritmo avanza, se conectan dos componente conexas distintas. Se repite hasta tener una única componente. FCC-BUAP Primavera 2015 MC Beatriz Beltrán Martínez

96 Algoritmo de Kruskal Se utilizan las siguientes operaciones:
COMBINA(A, B, C): Se combinan las componentes A y B en C. ENCUENTRA(v, C): Devuelve la componente C, del cual el vértice v es miembro. INICIAL(A, v, C): Para que A sea el nombre de una componente que pertenece a C, y que inicialmente contiene solo el vértice v. FCC-BUAP Primavera 2015 MC Beatriz Beltrán Martínez

97 Algoritmo de Kruskal comp_sig0 comp_nnúmero de miembros en V
Para cada v en V hacer comp_sigcomp_sig+1 INICIAL (comp_sig,v,componentes) Fin_para Para cada a en A hacer INSERTA(a, aristas) Mientras comp_n>1 hacer aSUPRIME_MIN(aristas) Sea a=(u, v) comp_uENCUENTRA(u,componente) comp_vENCUENTRA(v,componente) FCC-BUAP Primavera 2015 Si comp_u  comp_v entonces COMBINA(comp_u,comp _v,componentes) INSERTA(a, T) comp_ncomp_n-1 Fin_si Fin_Mientras Fin MC Beatriz Beltrán Martínez


Descargar ppt ""

Presentaciones similares


Anuncios Google