L'algoritme de Dinic és un algoritme de Temps polinòmic per a la computació d'un Fluix maximal en una ret de fluix, concebuda en 1970 pel científic de la computació Yefim Dinitz, israelita d'orige soviètic.[1] L'algoritme és eixecutat en un temps de O(V2E) i està basat en l'Algoritme d'Edmonds-Karp, el qual a la seua volta s'eixecuta en un temps O(VE2), i utilisa trayectòries d'aument més curtes. L'introducció dels conceptes nivell de grafo i bloqueig de fluix és lo que definix el rendiment de l'algoritme de Dinic.

Definició

Es té el grafo G=((V,E),c,s,t) que serà una ret de fluix en c(u,v) és la capacitat i f(u,v) el fluix de l'arc (u,v).

La capacitat residual és un mapage cf:V×V→R+ definit com,
  1. Si (u,v)∈E,
    cf(u,v)=c(u,v)−f(u,v)
    cf(v,u)=f(u,v)
  2. cf(u,v)=0 d'una atra manera.
El grafo residual és el grafo Gf=((V,Ef),cf|Ef,s,t), a on
Ef={(u,v)∈V×V:cf(u,v)>0}.
La trayectòria d'aument és una ruta s−t en el grafo residual Gf.
Es definix dist⁡(v) com la longitut del camí més curt des de s fins a v en Gf.Llavors el nivell del grafo de Gf és el grafo GL=(V,EL,cf|EL,s,t), a on
EL={(u,v)∈Ef:dist⁡(v)=dist⁡(u)+1}.
El bloqueig del fluix és un s−t fluix f de manera tal que el grafo G′=(V,EL′,s,t) en EL′={(u,v):f(u,v)<cf|EL(u,v)} no té cap ruta s−t.

Algoritme

Algoritme de Dinic

Entrada: Una ret G=((V,E),c,s,t).
Eixida: Un fluix s−t de valor f maximisat.
  1. Es té f(e)=0 per a cada e∈E.
  2. Construir GL des de Gf de G. Si dist⁡(t)=∞, detindre i retornar el resultat f.
  3. Trobar un bloqueig de fluix f′ en GL.
  4. Aumentar el fluix  f per f′ i tornar al pas 2.

Vore també

Referències

  1. ↑ Yefim Dinitz(1970).«Algorithm for solution of a problem of maximum flow in a network with power estimation».Doklady Akademii nauk SSSR.11: 1277–1280.Consultat el 22 d'abril de 2012.