140 likes | 322 Views
MAKS FLYT. Rikke Amilde Løvlid lovlid+undass@fysmat.ntnu.no. Flytnettverk. Et flytnettverk G=(V,E): en rettet graf hver kant har kapasitet c(u,v) ≥0 ingen kant betyr at kapasiteten er null. to spesielle noder, kilden s og sluket t. Flyt. En flyt i G er en funksjon.
E N D
MAKS FLYT Rikke Amilde Løvlid lovlid+undass@fysmat.ntnu.no
Flytnettverk • Et flytnettverk G=(V,E): • en rettet graf • hver kant har kapasitet c(u,v)≥0 • ingen kant betyr at kapasiteten er null. • to spesielle noder, kilden s og sluket t.
Flyt En flyt i G er en funksjon • slik at følgende krav er oppfylt: • Kapasitet: For alle , krever vi • Symmetri: For alle , krever vi • Bevaring av flyt: For alle , krever vi
Eksempel • a/b betyr at flyten er a og kapasiteten er b • Hvis det bare står et tall c, betyr dette 0/c • og DETTE PUNKTET ER FEIL! Nettverket oppfyller ikke krav to, dvs f(v1,f2)!=-f(v2,v1). Se neste foil.
Notasjon av flyt i grafen NY! • Når vi implementerer maks flyt og vil se om man kan sende mer fra u til v, skal man bare trenge å sjekke om f(u,v)<c(u,v). • Dvs. vi ønsker ikke å måtte gjøre den utregninga som står i siste punkt på forrige slide.) • Legg merke til at hvis flyten er negativ og kapasiteten er 0, er flyten mindre enn kapasiteten, så man kan sette på mer flyt. • Dette forutsetter at når f(u,v) opdateres, må vi og oppdatere f(v,u). • De tallene som står på grafen skal være de samme som ville stått i flyt- og kapasites-matrisa. • Eks: Hvis f(u,v)=3 i følge flytmatrisa og c(u,v)=5 i følge kapasitetsmatrisa, skal det på pila fra u til v i grafen stå 3/5. Siden f(u,v)=3, er f(v,u)=-3. Dvs. at på pila fra v til u, skal det stå -3/c(v,u), men det er vanlig å droppe å skrive den negative flyten. • Send en mail hvis dette er uklart!
Flere kilder/Flere sluk • Hvis vi har flere kilder, lager vi en superkilde med kant til hver av kildene. Kapasiteten fra superkilden til kildene settes til uendelig. • Tilsvarende hvis vi har flere sluk.
Residual-nettverket, - består av kanter som tillater mer flyt
Flytforøkende vei • En flytforøkende vei er en vei fra kilden s til sluket t i residual-nettverket, . • Vi kan sende en enhet i den flytforøkende veien.
Snitt • Et snitt (S,T) til et flytnettverk G=(V,E) er en partisjon av nodene V i S og T=V-S slik at kilden s ligger i S og sluket t ligger i T
Maks flyt, minimalt snitt • Hvis f er en flyt i et flytnettverk G=(V,E) med kilde s og sluk t, har vi at • f er en maksimal flyt i G. • Residualnettverket har ingen flytforøkende vei. • Verdien på flyten fra kilde til sluk, | f | er lik kapasiteten til et eller annet snitt, det minimale snittet. betyr det samme.
Ford-Fulkerson • For hver kant, sett flyten til null • Finn en flytforøkende vei vha. residualnettverket. • Sett på all den flyten veie kan tåle. • Oppdater flyten. • Gå til 2. • Når det ikke finnes flere flytforøkende veier, har vi oppnådd maks flyt. • Ford-Fulkerson bruker dybde-først-søk for å finne flytforøkende vei.. • Man oppnår bedre kjøretid med bredde-først-søk (Edmonds-Karp).
Merkelappmetoden • Merkelappen: [Inn/Ut, nabo, (flyt fra s til n)] • Algoritmen • Sett f(u,v)=0 for alle kanter u,v • Startnoden s får merkelapp [- , - , ] I = {s} (I er mengden merkede noder) s er ubehandlet, setter s til n (skal behandles) • n merket og ubehandlet node i I, for alle j gjør: • Hvis (n,j) element i kantlista L, j er umerket og f(n,j)<c(n,j) får j merkelappen [Inn , n , min( , c(n,j)-f(n,j)) = ] I = I U {j} • Hvis (j,n) element i kantlista L, j umerked og f(j,n)>0, får j merkelappen [Ut, n, min( , f(n,j)) = ] • I = I U {j} • Hvis n != t, og eksisterer ubehandlet n i I: gå til 3. • Hvis n != t: f(i,j) er optimal, avslutt! • Flytforøkende vei funnet, oppdater flyten. • Fjern merkelappene. Gå til 2.