Fordův–Fulkersonův algoritmus

Příklad průběhu Ford-Fulkersonova algoritmu

Fordův-Fulkersonův algoritmus (pojmenovaný podle L. R. Forda, Jr. a D. R. Fulkersona) počítá maximální tok v síti. Název Ford-Fulkerson je také často používán pro Edmondsův-Karpův algoritmus, který je specializací Fordova-Fulkersonova algoritmu.

Myšlenka algoritmu je velmi jednoduchá: Dokud existuje cesta ze zdroje (výchozí bod) do spotřebiče (koncový bod), taková, že je možnost ještě zvětšit její tok, neboli, že každá hrana na této cestě muže ještě „propustit“ vyšší tok (není ve stavu saturace), tak na všech hranách této cesty zvýšíme tok o největší hodnotu, o kterou lze zvětšit tok ve všech hranách cesty. Poté celý postup opakujeme. Cesta s volnou kapacitou se nazývá zlepšující cesta.

Obecná teorie k algoritmu

Velikost toku nikdy nepřekročí kapacitu žádného řezu sítě. Toto tvrzení pouze naznačuje, že sítí není možno „protlačit“ vyšší tok než je maximální kapacita řezu sítě (toto je obsaženo v upozornění, že se to týká všech řezů sítě, tzn. i minimálního s jeho „maximální“ kapacitou).

Pro orientovaný graf s množinou hran a množinou vrcholů , funkci určující kapacitu hran, vrcholy a grafu , kde je zdroj a spotřebič platí: Tvrzení „tok je maximálním tokem v síti “ je ekvivalentní s tvrzením že neexistuje neorientovaná cesta , , taková, že pro každou dvojici platí:

  • , pokud hrana náleží
  • , pokud hrana náleží

Taková P by se nazývala zlepšující cestou.

Obecná implementace v pseudokódu

Ford-Fulkerson (S)
 for ( Edge (u,v) in E(G) )
  f(u,v) = 0; 
 while ( NajdiCestu(S) )
  ZvyšTok(S);
 return f;

Obecný popis implementace metod

boolean NajdiCestu(Node s) {
 for ( Node u in V(G) )
  stav[u] = FRESH;
 p[s] = +s;
 d[s] = ∞;
 stav[s] = OPEN;
 do  { 
  u = libovolný otevřený uzel;
  stav[u] = CLOSED;
  for (Node v in Nasl(u)) {
   if ((stav[v] == FRESH) && (f(u,v) < q(u,v))) { 
    stav[v] = OPEN;
    p[v] = +u;
    d[v] = min(d[u], q(u,v) – f(u,v));    
   } 
  }
  for (Node v in předch(u)) {
   if (stav[v] == FRESH) && (f(v,u) > 0)) { 
    stav[v] = OPEN;
    p[v] = -u;
    d[v] = min(d[u], f(v,u));
   }
  } 
 } while ((existuje otevřený uzel)  && (u != t));
 return (u == t);
}
void ZvyšTok(Node s) {
 x = t;
 delta = d[t];
 do {
  v = x;
  sgn = p[v];
  u = abs(sgn);
  if (sgn > 0)
   f(u,v) += delta;
  else
   f(v,u) -= delta;
  x = u;
 } while ( v != s );
}

Vysvětlení algoritmu

Tento algoritmus začíná tak, že všem hranám přiřadí tok hodnoty nula, neboli nic sítí na počátku neprotéká. Dále pak začne testovat nalezení zlepšující cesty, jestliže tato cesta bude nalezena tak se tok zvýší. Naopak jestliže cesta nalezená už nebude, to znamená že zlepšující cesta už neexistuje (viz obecná teorie k algoritmu) je nalezen maximální tok.

Funkce NajdiCestu(S) na počátku své implementace přiřadí všem uzlům grafu jako stav uzlu hodnotu FRESH. To znamená, že tyto uzly jsou čisté neboli ještě nepoužité. Uzlu S se přiřadí p[s] směr kterým jde hrana a poté ještě delta s jako nekonečno jelikož je to uzel předaný parametrem a tento uzel se otevře. Poté startuje cyklus který na svém začátku vybere uzel který je otevřený (stav uzlu == otevřeno ) a uzavře ho a poté pro všechny jeho následníky zjistí že jestliže je následník, uzel fresh a jeho tok je nižší než kapacita hrany jež spojuje uzel s tímto následníkem, tak ho otevře, přiřadí mu směr kterým je orientovaná hrana a vypočte pro něj delta. Delta se vypočítává právě pro to aby bylo možné zjistit o kolik se dá navýšit tok v hranách orientovaných směrem od zdroje k spotřebiči a snížit tok na hraně směřující od spotřebiče ke zdroji (bilance zůstává stejná). Když se takto projedou všechny následovníci tak se začnou procházet všichni předchůdci tohoto uzlu. U nich se zjišťuje zda jsou FRESH a zda hrana spojující tyto dva uzly má vyšší tok než nula. Když je tato podmínka splněna nastaví se předchůdce na stav OPEN nastaví se mu orientace hrany a určí delta. A toto celé se opakuje dokud existuje alespoň nějaký otevřený uzel či dokud testovaný uzel u se nebude rovnat spotřebiči. A také na základě této naposledy zmiňované rovnosti bude funkce vracet návratovou hodnotu true nebo false.

Odpověď na otázku jak je možné, že tok může "téci" i proti směru orientace hrany v síti?

Vysvětleme si to například na vodovodním potrubí. Existuje jedna trubka, která bude mít orientaci proti směru vodovodu to znamená od domácnosti do vodárny. Jak je možné, že by touto trubkou tekla voda proti její orientaci? Fyzicky to možné není, ale hodnota jejího toku tomu může ukazovat. Tuto hodnotu trubka má jen proto, že jestliže my potřebujeme touto opačně orientovanou trubkou poslat například 3 litry směrem vodárna→ domácnost, tak jestliže například 10 litru vody jí proteče ve směru domácnost→vodárna, tak ona svůj průtok zmenši třeba na 7 litrů a ty tři litry nechá protéct někde jinde..jinou trubkou..tím pádem navenek vypadá, že průtok směrem vodárna→ domácnost je 3.

Pro zadání s určeným minimálním tokem

V této variantě je pro každou hranu zadáno nejen horní omezení , ale i minimální požadavek na tok. Tok je přípustný, pokud každá hrana splňuje . Úlohou pak může být nalezení maximálního, minimálního, nebo libovolného přípustného toku sítí.

Nejprve se budeme zabývat hledáním libovolného přípustného toku. Úlohu převedeme na hledání maximálního toku v síti bez minimálních požadavků, která ze zadané sítě vznikne následujícími úpravami:

  • přidáme hranu ze stoku do zdroje s nekonečnou kapacitou
  • přidáme dva nové uzly, fiktivní zdroj a fiktivní stok , které budou v síti zdrojem a stokem
  • za každou hranu sítě s kladným minimálním požadavkem přidáme do hrany a , kterým nastavíme kapacity na ; minimální požadavek na hraně zrušíme a nastavíme jí kapacitu
  • pokud nyní ze zdroje vychází více hran do jednoho vrcholu, sloučíme tyto hrany do jedné o kapacitě rovné součtu kapacit původních hran; to samé uděláme, pokud do vchází více hran ze stejného vrcholu

V síti nalezneme maximální tok . Nejprve uvažujme případ, kdy každá hrana vycházející z je nasycena, a tedy i každá hrana vcházející do je nasycena. To znamená, že za každou hranu původní sítě s kladným teče tok velikosti z do a z do . Tento tok přesměrujeme, aby tekl hranou . Hranou tak teče tok velikosti , což nepřekračuje její kapacitu, protože . Po následném odstranění uzlů a hran nově přidaných do dostaneme přípustný tok sítí . V případě, kdy některá hrana vycházející z nasycena není, znamená to, že v neexistuje žádný přípustný tok. Pokud by totiž existoval, mohli bychom ho přeměnit na tok sítí , kde by každá hrana vycházející z nasycena byla a tento tok by byl větší než .

Tento přípustný tok můžeme následně zlepšovat přidáváním, nebo ubíráním toku po zlepšujících cestách. V případě hledání maximálního toku je cesta , zlepšující, pokud pro každou dvojici platí, že je hranou a , nebo je hranou a . Po této cestě můžeme tok zvětšit. V případě hledání minimálního toku je , zlepšující, pokud pro každou dvojici platí, že je hranou a , nebo je hranou a . Po této cestě můžeme tok zmenšit.

Implementace

Časová složitost

metoda NajdiCestu O(|V|+|E|)
metoda ZvyšTok O(|V'|)
celý algoritmus O(|V|·|E|2), O(|V|2·|E|) nebo O(|V|3)

Pokud algoritmus nenaimplementujeme chytrým způsobem, je jeho časová složitost nezávislá na velikosti vstupu – závisí na kapacitách jednotlivých hran:

  • Pro celočíselné kapacity hran to znamená, že algoritmus skončí v konečném čase s časovou složitostí O(součet kapacit všech hran) (horní mez je dána tím, že v každém kroku zvýšíme tok alespoň jednou hranou alespoň o 1 a maximální tok nikdy nemůže být vyšší než součet kapacit všech hran).
  • Pro neceločíselné kapacity hran algoritmus může být nekonečný (neplatí zde předchozí předpoklad o zvyšování toku alespoň o 1 v každém kroku).

Související články

Externí odkazy

Read other articles:

Carlson Travel Network Carlson Travel Network dapat dilacak asal usulnya ke belakang hingga ke sebuah agen perjalanan yang didirikan oleh Ward Foster di Amerika Serikat pada 1888 dan diberi nama Ask Mr. Foster. Ketika dibeli oleh Carlson Group, bisnis ini berkembang menjadi Carlson Travel Network. Compagnie Internationale des Wagons-Lits Gerbong makan di Austria pada 2003. la Compagnie Internationale des Wagons-Lits - Guide Continental, 1901 Orient Express 1883-1914 Georges Nagelmackers mend...

 

August Weismann Friedrich Leopold August Weismann (17 Januari 1834 – 5 November 1914) adalah seorang ahli biologi evolusi yang berkebangsaan Jerman.[1] Ernst Mayr menempatkannya sebagai ahli teori evolusi terpenting kedua abad ke-19 setelah Charles Darwin. Weismann menjadi Direktur Zoological Institute dan profesor pertama Zoologi di Universitas Freiburg. Kontribusi utamanya adalah teori plasma nutfah, yang menurut teori ini, pewarisan pada organisme mulitseluler hanya...

 

Mega MendoengPoster iklanSutradaraBoen Kim NamProduserAng Hock LiemPemeran Rd Soekarno Oedjang Boen Sofiati Soehaena PerusahaanproduksiUnion FilmsTanggal rilis 1942 (1942) (Hindia Belanda) NegaraHindia BelandaBahasaIndonesia Mega Mendoeng adalah film Hindia Belanda (sekarang Indonesia) tahun 1941 yang disutradarai Boen Kin Nam untuk Union Films. Alur Istri Winanta, Retnaningsih, pergi ke Batavia dan meninggalkan suaminya. Setelah mereka bercerai, Winanta menikahi sepupunya, Fatimah. ...

34°53′09″N 50°59′45″E / 34.8859°N 50.9958°E / 34.8859; 50.9958 جزء من سلسلة حولبرنامج إيران النووي المنشآت منشآت بوشهر Darkhovin Fordow IR-40 المنظمات منظمة الطاقة الذرية الإيرانية النسر 2 الوكالة الدولية للطاقة الذرية مجموعة 5+1 معاهدات دولية معاهدة الحد من انتشار Additional Protocol اتفاق جنيف الا�...

 

Union nurse and ambulance driver during the American Civil War Elizabeth Ann HyattHyatt, from an 1897 publicationOccupationDriver of a horse-drawn ambulanceKnown forNurse during the American Civil WarSpouseAsa W. Hyatt Elizabeth Ann Hyatt was a Union nurse and ambulance driver during the American Civil War. Civil War service Hyatt's service in the war began when her husband enlisted in 1861. He enlisted in the 4th Regiment of the Wisconsin Volunteers, and Hyatt found much work to do in t...

 

Main railway station in Odense, Denmark Odense StationOdense BanegårdOdense station at Østre StationsvejGeneral informationLocationØstre Stationsvej 27DK-5000 Odense[1][2]DenmarkOwned byDSB and BanedanmarkOperated byDSB[1]Arriva[2]Line(s)Copenhagen–FredericiaOdense–SvendborgPlatforms3Tracks6ConstructionArchitectNiels Peder Christian Holsøe (1865)[3]Heinrich Wenck (1914)HistoryOpened1865; 159 years ago (1865)Rebuilt1914; ...

Football club in East Sussex, England Football clubSeaford TownLogo of Seaford Town Football ClubFull nameSeaford Town Football ClubNickname(s)The BadgersFounded1888GroundThe Crouch, SeafordChairmanTom WebsterManagerPaul WiseLeagueSouthern Combination Division One2022–23Southern Combination Division One, 9th of 17WebsiteClub website Home colours Away colours Seaford Town Football Club are a football club based in Seaford, East Sussex, England. They are currently members of the Southern Comb...

 

Sahib Bibi Aur GulamSutradaraAbrar AlviProduserGuru DuttDitulis olehAbrar AlviBimal MitraBerdasarkanShaheb Bibi Golamoleh Bimal MitraPemeranMeena KumariGuru DuttWaheeda RehmanRehmanD.K. SapruMinoo MumtazPenata musikHemant KumarSinematograferV. K. MurthyPenyuntingY.G.ChawhanTanggal rilisDurasi155 menitNegaraIndiaBahasaHindi Sahib Bibi Aur Ghulam (Hindi: साहिब बीबी और ग़ुलाम; 'Sang Master, Sang Istri dan Sang Budak') adalah sebuah film Hindi India 196...

 

Polish politician and activist This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Julian Marchlewski – news · newspapers · books · scholar · JSTOR (December 2010) (Learn how and when to remove this message) Julian MarchlewskiBorn(1867-05-17)17 May 1867Włocławek, Congress Poland, Russian EmpireDied22 March 192...

此條目可参照英語維基百科相應條目来扩充。 (2021年5月6日)若您熟悉来源语言和主题,请协助参考外语维基百科扩充条目。请勿直接提交机械翻译,也不要翻译不可靠、低品质内容。依版权协议,译文需在编辑摘要注明来源,或于讨论页顶部标记{{Translated page}}标签。 约翰斯顿环礁Kalama Atoll 美國本土外小島嶼 Johnston Atoll 旗幟颂歌:《星條旗》The Star-Spangled Banner約翰斯頓環礁�...

 

Tari Topeng kelana yang dipentaskan di Area Wisata Batik Trusmi Cirebon Tari Topeng Cirebon (Bahasa Cirebon: beksan topeng Cerbon) adalah salah satu tarian di wilayah kesultanan Cirebon. Pada awalnya tari topeng bermula sejak era Jawa Kuno di Jawa Timur. Pada masa-masa selanjutnya berkembang dan menyebar ke Jawa Tengah, Cirebon, bahkan juga Banjar dan Kutai. Tari Topeng Cirebon, berkembang di daerah Cirebon, termasuk Subang, Indramayu, Jatibarang, Majalengka, Losari, dan Brebes. Disebut tari ...

 

2014 Asian Cycling ChampionshipsVenue Astana, KazakhstanDate(s) (2014-05-21 - 2014-06-01)21 May – 1 June 2014VelodromeSaryarka Velodrome← 20132015 → The 2014 Asian Cycling Championships took place at the Saryarka Velodrome in Astana and Karaganda, Kazakhstan from 21 May to 1 June 2014. Medal summary Road Men Event Gold Silver Bronze Individual road race Ruslan Tleubayev Kazakhstan Maxim Iglinskiy Kazakhstan Dmitriy Gruzdev Kazakhstan Individual time...

Salib Maria Logo Kerasulan Paus Yohanes Paulus II Salib Maria adalah sebuah nama informal yang diberikan pada sebuah rancangan salib Katolik Roma. Salib tersebut terdiri atas sebuah salib Latin tradisional dengan palangnya melintang hingga ke ujung kanan, dan sebuah huruf M (untuk Maria) di bagian kanan bawahnya. Tampilan terkenal Salib Maria yang pertama adalah pada gambar logo kerasulan Paus Yohanes Paulus II, dipajang dengan jelas di peti matinya pada saat upacara pemakamannya (Sri Paus te...

 

مستشفى الملك سلمان للقوات المسلحة معلومات عامة الموقع قيادة المنطقة الشمالية الغربية  الدولة السعودية  الاسم نسبة إلى سلمان بن عبد العزيز آل سعود  تاريخ الافتتاح الرسمي 12 أغسطس 1980  المالك القوات المسلحة السعودية  الاستعمال الحالي مستشفى عسكري  تعديل مصدري...

 

1936 film by Tom Cooper The DawnHandpainted poster from County DonegalDirected byTom CooperWritten byTom CooperD.A. MoriartyDonal O'CahillProduced byTom CooperStarringTom CooperDonal O'Cahill Eileen Davis Brian O'Sullivan James Gleeson Gerry O'Mahony Bill Murphy Marion O'ConnellMusic byPat Crowley's Dance BandProductioncompanyHibernia PicturesRelease date 19 January 1936 (19 January 1936) Running time89 minutesCountryIrish Free StateLanguageEnglish The Dawn is a 1936 film made in the Iri...

For the 2011 American action comedy, see The Worst Movie Ever! This is a dynamic list and may never be able to satisfy particular standards for completeness. You can help by adding missing items with reliable sources. Reefer Madness (1936), one of the earliest films to garner particularly negative contemporary reviews[1] The films listed below have been cited by a variety of notable critics in varying media sources as being among the worst films ever made. Examples of such sources in...

 

У этого термина существуют и другие значения, см. Марка. Эта статья или раздел нуждается в переработке.Пожалуйста, улучшите статью в соответствии с правилами написания статей. АО «Марка» Тип акционерное общество Основание 1857 Прежние названия Издательско-торговый центр �...

 

Place in Algiers, AlgeriaHussein DeyCountryAlgeriaProvinceAlgiersTime zoneUTC+1 (West Africa Time) Hussein Dey is a suburb of the city of Algiers in northern Algeria, named after Hussein Dey, the last of the Ottoman provincial rulers of Algiers. Notable people Mohamed Arkab (born 1966) References 36°44′N 3°06′E / 36.733°N 3.100°E / 36.733; 3.100 vte Algiers Province (Algiers)Zéralda District Zéralda Staouéli Souidania Rahmania Mahelma Sidi Abdellah Chéraga ...

Una caldaia a tubi d'acqua è un tipo di generatore di vapore in cui l'acqua circola in tubi riscaldati esternamente e sono utilizzate per la produzione di vapore acqueo ad alta pressione. Il combustibile è bruciato all'interno di una fornace producendo dei fumi caldi, che riscaldano l'acqua circolata nei tubi trasformandosi in vapore, che confluisce in un cilindro. In alcuni tipi il vapore rientra nel forno attraverso un surriscaldatore e il vapore surriscaldato viene poi utilizzato per azi...

 

Kerajaan BerniciaBeorniceAbad ke-6–654Ibu kotaBamburghBahasa yang umum digunakanBahasa Inggris Kuno, CumbricPemerintahanMonarkiEra SejarahAbad Pertengahan Awal• Didirikan Abad ke-6• Mahkota dibagi dengan Deira 604• digabungkan dengan Deira 654 Didahului oleh Digantikan oleh Sub-Britania Romawi Northumbria Sekarang bagian dari Britania Raya Inggris Skotlandia Sunting kotak info • Lihat • BicaraBantuan penggunaan templat ini Bernicia (Bahasa Inggri...