Přejít na obsah
Odkaz na web organizace Teiresiás

Adaptace Matematických ALGoritmů

Ford-Fulkersonův algoritmus

messages.homepage.accessibility

Ford-Fulkersonův algoritmus

1. Popis standardní metody algoritmu

Ford-Fulkersonův algoritmus slouží k vyhledání maximálního toku v síti (Síť je orientovaný graf, kde ohodnocení každé hrany znamená maximální množství energie, které skrze hranu může procházet). Pracujeme tedy se sítí G = (V, E), kde V je množina vrcholů včetně zdroje S a stoku T, E je množina orientovaných hran. Návěští každé hrany zapisujeme ve formátu F/C, kde C značí její kapacitu a F tok, tj. množství energie, které v ní proudí.

  1. Na počátku algoritmu nastavíme u všech hran nulový tok.
  2. Opakovaně hledáme nenasycenou cestu od zdroje ke stoku. Jakmile ji nalezneme, zjistíme minimální rezervu kapacity všech jejích hran, o kterou následně navýšíme tok v síti.

Při běžném provedení algoritmu pracujeme s vizuální reprezentací sítě, u níž měníme návěští hran. Na Obrázku 1 je znázorněna síť N o sedmi vrcholech s aktuálním tokem 1 (viz cesta S → A → C → T). Je zvýrazněna nenasycená cesta S → B → D → T, u níž je minimální rezerva kapacity hran rovna 1. Můžeme tedy v dalším kroku zvýšit tok v síti a upravit návěští hran nenasycené cesty, tj. modifikovat 0/1 na 1/1 v případě hran S → B, B → D a 0/3 na 1/3 u hrany D → T.

Příklad 1: síť N
Obrázek 1: Síť N s tokem 1 a vyznačenou nenasycenou cestou S → B → D → T

Pro názornost uvádíme i konkrétní příklad sítě a Animaci 1 naznačující výpočet maximálního toku pomocí Ford-Fulkersonova algoritmu.

Příklad 2: síť N
  • https://www.teiresias.muni.cz/amalg/www/images/animation/FordFulkerson/Maximum_flow_problem_norm24_1.jpg
  • Počátek algoritmu – síť N o sedmi uzlech S, A, B, C, D, E, T
  • S: S1A S1B S5E
    A: A1C A1E
    B: B1D
    C: C3T
    D: D3T
    E: E1B E2C E2D E1T
    TNezobrazovat tento popisek
Animace 1: Výpočet maximálního toku pomocí Ford-Fulkersonova algoritmu

2. Návrh možných adaptací

1. Práce se sítí v jednom listu tabulkového procesoru:

Síť je opět nabízena ve formě tabulky a organizována podobným způsobem jako v případě 1. metody adaptace Dijkstrova algoritmu. V prvním sloupci jsou vypsány uzly sítě, do dalších buněk na stejném řádku pro daný uzel X zapisujeme všechny hrany, které začínají v uzlu X. Uvádíme je ve formátu  YF/C, kde Y je uzel, ve kterém orientovaná hrana z X končí, F je aktuální tok skrze hranu a C je její kapacita. Uvažujme tutéž síť N, jakou jsme znázornili na Obrázku 1. Následující Tabulka 1 zachycuje fázi algoritmu, při níž jsme již nalezli jednu nenasycenou cestu S → A → C → T.

Příklad 3: síť N
S *A1/1 B0/1 E0/5
A *C1/1 E0/1
B D0/1
C T1/3
D T0/5
E B0/1 C0/2 D0/2 T0/1
T
Tabulka 1: Síť N formou tabulky po nalezení a zpracování první nenasycené cesty S → A → C → T

Nevidomý student nejprve najde nenasycenou cestu od zdroje S ke stoku T. Prochází postupně tabulkou a pamatuje si posloupnost uzlů, kterými cesta vede, i aktuální minimální rezervu jejích hran. Ve druhém průchodu již upravuje tok a nasycené hrany označuje hvězdičkou.

2. Organizace hran pod sebou na jednotlivých řádcích v běžném textovém editoru:

Každou hranu zapisujeme na samostatném řádku ve formátu XF/CY, kde X je počáteční uzel hrany, Y koncový uzel hrany, F aktuální tok skrze hranu a C její kapacita. Hrany řadíme abecedně dle uzlu, ze kterého vycházejí. Pracujeme s nimi obdobným způsobem jako u první metody, tj. procházíme hrany vždy dvakrát, poprvé, abychom nalezli nenasycenou cestu od zdroje ke stoku, podruhé, abychom upravili tok na této cestě.

3. Diskuze nad výhodami a nevýhodami

V tomto případě u nevidomých studentů zvítězila 1. metoda. Nebylo příliš složité se orientovat v tabulce a hledat nenasycenou cestu (Poznamenejme, že problém nastává ve chvíli, kdy je k nalezení maximálního toku nutné některé hrany procházet proti směru toku.). Nevýhodou druhé metody je fakt, že při hledání nenasycené cesty musí nevidomý často projít mnoha řádky s údaji, které jsou pro něj v tu chvíli nepodstatné. U obou nabízených adaptací se jeví jako vhodné poznamenat si zpracovávanou nenasycenou cestu např. do textového editoru (stačí vypsat posloupnost vrcholů od zdroje ke stoku).