tdt4120

Forelesning 5. November - Maksimal flyt

Pensum

Læringsmål

  1. Problemet
  2. Ideer
  3. Ford-fulkerson
  4. Minimalt snitt
  5. Matching

1:5 Problemet

Flytnett: Rettet graf $G = (V, E)$

Flyt: En funksjon $𝑓 : V × V \longrightarrow ℝ$

Flytverdi: $|𝑓| = Σ_v 𝑓 (s, v) - Σ_v 𝑓 (v, s)$

Input: Et flyttnetverk G

Output: En flyt $𝑓$ for $G$ med maks. $|𝑓|$

2:5 Ideer

Restnett

Residualnettverk

Forøkende sti

Flytforøkende sti

3:5 Ford-fulkerson

function ford_fulkerson_method(G, s, t)
  initialize flow 𝑓 to 0
  while there is an augm. path p to G_𝑓
    augment flow 𝑓 along p
  end
  return 𝑓
end

function ford_fulkerson(G, s, t)
  for each edge e  G.E
    e.f = 0
  end
  while there is a path p from s to t in G_𝑓
    c_𝑓(p) = min(c_𝑓(u, v) : (u, v) is in p)
    for each edge (u, v) in p
      if (u, v)  E
        (u,v).f = (u, v).f + c_𝑓(p)
      else
        (v, u).f = (v, u).f - c_𝑓(p)
      end
    end
  end
end

Alle nodene får et felt a (augmentation).

function edmonds_karp(G, s, t)
  for each edge (u,v)  G.E
    (u,v).f = 0
  end
  repeat #-> until t.a == 0
    for each vertex u  G.V
      u.a = 0 # flow reaching u in G.f
      u.π = NIL
    s.a = 
    Q = 
    enqueue(Q, s)
    while t.a == 0 && Q != 
      u = dequeue(Q)
      for all edges (u,v),(v,u)  G.E
        if (u,v)  G.E
          c_f(u,v) = c(u, v) - (u,v).f
        else
          c_f(u,v) = (v,u).f
        end
        if c_f(u,v) > 0 && v.a == 0
          v.a = min(u.a, c_f(u,v))
          v.π = u
          enqueue(Q, v)
        end
      end
    end
    u, v = t.π, t # at this point, t.a = c_f(p)
    while u != NIL
      if (u, v)  G.E
        (u,v).f = (u,v).f + t.a
      else
        (v,u).f = (v,u).f - t.a
      end
      u, v = u.π, u
    end
  until t.a == 0
Operasjoner  Antall Kjøretid    
 Finn forøkende sti  $O( 𝑓^* )$ $O(E)$
Operasjoner  Antall Kjøretid
 Finn forøkende sti  $O(|𝑓^{*}|)$ $O(E)$

Eksponesielt! Bruk BFS!

Operasjoner  Antall Kjøretid
 Finn forøkende sti  $O(VE)$ $O(E)$

4:5 Minimalt snitt

Snitt i flytnettverk: Partisjon $(S,T)$ av $V$

Lemma 26.5: $𝑓(S,T) = |𝑓|$

Input: Et flytnettverk $G = (V,E)$ med kilde $s$ og sluk $t$

Output: Et snitt $(S,T)$ med minst mulig kapasitet, dvs., der $c(S,T)$ er minimal

Maks. flyt = min. snitt

5:5 Matching

Matching: Delmengde $M ⊆ E$ for en urettet graf $G = (V,E)$

Input: En bipartitt urettet graf $G = (V,E)$

Output: En matching $M ⊆ E$ med flest mulig kanter, dvs., der $|M|$ er maksimal.

Heltallsteoremet (26.10): For heltallskapasiteter gir Ford-Fulkerson heltallsflyt