Un problema maloliente  Alguien dejó pescado podrido en todas las casas. ¿Dónde está?
Ruta mas corta Dado un grafo G=(V,E) y un vértice s, encuentre el camino más corto desde s a todos los demás nodos en V Existen dos variantes: Los arcos no tienen distancia. En este caso, la longitud de una ruta es simplemente la cantidad de aristas incluidas en el camino. Los arcos tienen asociada una medida de distancia. Este caso es mas complicado en particular si se permiten distancias negativas. En caso de ciclos con costo negativo no existe solución
Consideraremos grafos dirigidos con peso, G(V,E), función de peso w: E ---  Reales El peso de un grafo es la suma de los pesos de sus lados p=<v0,v1,v2,v3,v4,v5> W(p)= ∑w(vi-1,vi) Ruta mas corta: sin costos
Definicion:  del peso de la ruta mas corta Ζ (u,v)= min(w(p)) :u--  v si hay una ruta entre u y v Infinito de otra manera.
Definicion de ruta mas corta La ruta mas corta entre el vertice u y v es definida como cualquier ruta p con peso w(p)=  Ζ (u,v)
variantes Problema de una fuente y su ruta mas corta. Problema de trayectorias mas cortas y un solo destino. Problema de la ruta mas corta entre dos puntos. Problema de ruta mas corta entre todos los pares de nodos.
Pesos negativos Dijkstra asume todos > 0 3 -1 0 5 11 3 -4 6 -3 5 8 3 -6 7 4 ∞ ∞ ∞ ∞
Optima subestructura de la ruta mas corta Propiedad: rutas mas cortas entre dos vértices contiene otra rutas mas cortas entre ellos. Propiedad de la Relajación Consiste en probar si un lado (u,v) pude mejorar la ruta mas corta a v, visitando u y actualizando la distancia a v y  los predecesores a v.
Relajar!!!! 5 9 6 5 2 7 5 6 2 u v u v 2 2 2 Relaja(u,v) D[v]>=d[u]+w(u,v) D[v]<=d[u]+w(u,v) No relajar
Inicializa una fuente For cada vertice v  ε  V[G] do d(v)  ---∞ Л [v]  -NIL d(s)  --0
ALGORITMO DIJKSTRA(G,w,s) 1 inicializa el punto de inicio (G,s) 2  S   vacio 3  Q    V[G] 4 while Q ! = vacio 5  do u   extrae-minimo(Q) 6  S    S U {u} 7  for cada vertice v  ε  adjacente[u] 8  do relaja(u,v,w)
Veamos
Eficiencia de los algoritmos El algoritmo de ruta mas corta sin costos es O( |E| + |V| ). El costo del algoritmo de Dijkstra depende de cómo se implemente la lista de vértices: Si se recorre la lista de vértices en secuencia cada vez que se busca el v.dist mínimo el algortimo es O(|E|+|V| 2 ) Si se use una cola de prioridad el algoritmo es O(|E|log |V|) o O(|V|log |V|). Si se permiten costos negativos el algoritmo es O(|E|·|V|)
Ruta mas corta: grafos aciclicos En el caso de grafos sin ciclos el algoritmo de Dijkstra se puede simplificar si los vértices se procesan en orden topológico. Se puede hacer el calculo en un paso en la medida en que se produce el ordenamiento ya que una vez calculada la distancia a un nodo esta no cambia. La eficiencia del algoritmo modificado es O(|E|+|V|). La aplicación mas común es en la determinación de rutas criticas (mas larga) en proyectos de actividades (PERT/CPM)
Problemas de flujo en redes En los problemas de flujo se asocia a cada arista una capacidad de flujo y/o un costo. Además, algunos vértices tienen flujos entrantes o salientes. Algunos problemas típicos son: Flujo máximo: determinar la máxima cantidad de flujo que puede circular desde un nodo inicial  s  hasta un nodo final  t . Flujo a costo mínimo: determinar el flujo en los arcos para satisfacer los flujos entrantes y salientes en los vértices con un mínimo costo.
Flujo Máximo Se tiene un grafo dirigido G=(V,E) en donde c v,w  es capacidad de la arista v,w. Se usará un grafo auxiliar R=(V,E R ) llamado el grafo residual. Inicialmente R=G. En la etapa  k  se escoge una ruta entre  s  y  t ; se determina el máximo flujo  f k  que puede pasar por ella. Se resta  f k  de la capacidad todos los arcos de R que van en el sentido de la ruta y se suma  f k  a los que van en sentido contrario (si estos no existen se agregan a R). Si no existe ninguna ruta de  s  a  t  termina el algoritmo. El flujo máximo es     f i .
Análisis de Flujo Maximo El método para seleccionar la ruta en cada etapa determina el tiempo de ejecución del algoritmo. Si el flujo total es f y cada ruta aumenta el flujo en al menos 1 entonces el algoritmo es O(f·|E|) Si siempre se selecciona la ruta con el mayor flujo (esto puede lograrse modificando una línea del algoritmo de Dijkstra) entonces flujo maximo es O(|E| 2  log |V| log cap max ). Si siempre se escoge la ruta con el menor número de arcos, entonces el algoritmo es O(|E| 2 ·|V|) Se han encontrado algoritmos de orden O(|E||V|log(|V| 2 /E) y O(|E||V|+|V| 2+  )

Rutamascorta1

  • 1.
    Un problema maloliente Alguien dejó pescado podrido en todas las casas. ¿Dónde está?
  • 2.
    Ruta mas cortaDado un grafo G=(V,E) y un vértice s, encuentre el camino más corto desde s a todos los demás nodos en V Existen dos variantes: Los arcos no tienen distancia. En este caso, la longitud de una ruta es simplemente la cantidad de aristas incluidas en el camino. Los arcos tienen asociada una medida de distancia. Este caso es mas complicado en particular si se permiten distancias negativas. En caso de ciclos con costo negativo no existe solución
  • 3.
    Consideraremos grafos dirigidoscon peso, G(V,E), función de peso w: E ---  Reales El peso de un grafo es la suma de los pesos de sus lados p=<v0,v1,v2,v3,v4,v5> W(p)= ∑w(vi-1,vi) Ruta mas corta: sin costos
  • 4.
    Definicion: delpeso de la ruta mas corta Ζ (u,v)= min(w(p)) :u--  v si hay una ruta entre u y v Infinito de otra manera.
  • 5.
    Definicion de rutamas corta La ruta mas corta entre el vertice u y v es definida como cualquier ruta p con peso w(p)= Ζ (u,v)
  • 6.
    variantes Problema deuna fuente y su ruta mas corta. Problema de trayectorias mas cortas y un solo destino. Problema de la ruta mas corta entre dos puntos. Problema de ruta mas corta entre todos los pares de nodos.
  • 7.
    Pesos negativos Dijkstraasume todos > 0 3 -1 0 5 11 3 -4 6 -3 5 8 3 -6 7 4 ∞ ∞ ∞ ∞
  • 8.
    Optima subestructura dela ruta mas corta Propiedad: rutas mas cortas entre dos vértices contiene otra rutas mas cortas entre ellos. Propiedad de la Relajación Consiste en probar si un lado (u,v) pude mejorar la ruta mas corta a v, visitando u y actualizando la distancia a v y los predecesores a v.
  • 9.
    Relajar!!!! 5 96 5 2 7 5 6 2 u v u v 2 2 2 Relaja(u,v) D[v]>=d[u]+w(u,v) D[v]<=d[u]+w(u,v) No relajar
  • 10.
    Inicializa una fuenteFor cada vertice v ε V[G] do d(v)  ---∞ Л [v]  -NIL d(s)  --0
  • 11.
    ALGORITMO DIJKSTRA(G,w,s) 1inicializa el punto de inicio (G,s) 2 S  vacio 3 Q  V[G] 4 while Q ! = vacio 5 do u  extrae-minimo(Q) 6 S  S U {u} 7 for cada vertice v ε adjacente[u] 8 do relaja(u,v,w)
  • 12.
  • 13.
    Eficiencia de losalgoritmos El algoritmo de ruta mas corta sin costos es O( |E| + |V| ). El costo del algoritmo de Dijkstra depende de cómo se implemente la lista de vértices: Si se recorre la lista de vértices en secuencia cada vez que se busca el v.dist mínimo el algortimo es O(|E|+|V| 2 ) Si se use una cola de prioridad el algoritmo es O(|E|log |V|) o O(|V|log |V|). Si se permiten costos negativos el algoritmo es O(|E|·|V|)
  • 14.
    Ruta mas corta:grafos aciclicos En el caso de grafos sin ciclos el algoritmo de Dijkstra se puede simplificar si los vértices se procesan en orden topológico. Se puede hacer el calculo en un paso en la medida en que se produce el ordenamiento ya que una vez calculada la distancia a un nodo esta no cambia. La eficiencia del algoritmo modificado es O(|E|+|V|). La aplicación mas común es en la determinación de rutas criticas (mas larga) en proyectos de actividades (PERT/CPM)
  • 15.
    Problemas de flujoen redes En los problemas de flujo se asocia a cada arista una capacidad de flujo y/o un costo. Además, algunos vértices tienen flujos entrantes o salientes. Algunos problemas típicos son: Flujo máximo: determinar la máxima cantidad de flujo que puede circular desde un nodo inicial s hasta un nodo final t . Flujo a costo mínimo: determinar el flujo en los arcos para satisfacer los flujos entrantes y salientes en los vértices con un mínimo costo.
  • 16.
    Flujo Máximo Setiene un grafo dirigido G=(V,E) en donde c v,w es capacidad de la arista v,w. Se usará un grafo auxiliar R=(V,E R ) llamado el grafo residual. Inicialmente R=G. En la etapa k se escoge una ruta entre s y t ; se determina el máximo flujo f k que puede pasar por ella. Se resta f k de la capacidad todos los arcos de R que van en el sentido de la ruta y se suma f k a los que van en sentido contrario (si estos no existen se agregan a R). Si no existe ninguna ruta de s a t termina el algoritmo. El flujo máximo es  f i .
  • 17.
    Análisis de FlujoMaximo El método para seleccionar la ruta en cada etapa determina el tiempo de ejecución del algoritmo. Si el flujo total es f y cada ruta aumenta el flujo en al menos 1 entonces el algoritmo es O(f·|E|) Si siempre se selecciona la ruta con el mayor flujo (esto puede lograrse modificando una línea del algoritmo de Dijkstra) entonces flujo maximo es O(|E| 2 log |V| log cap max ). Si siempre se escoge la ruta con el menor número de arcos, entonces el algoritmo es O(|E| 2 ·|V|) Se han encontrado algoritmos de orden O(|E||V|log(|V| 2 /E) y O(|E||V|+|V| 2+  )