5 Minimální kostry, Hladový algoritmus Kromě teoretických hrátek mají kostry grafů(oddíl 4.4) následující důležité praktické použití: Dříve jsme uvažovali spojení v grafech cestami jdoucími z jednoho místa do druhého, ale nyní se podíváme na jiný způsob propojování všech vrcholů grafu najednou. Vezměme si třeba požadavky propojení domů elektrickým rozvodem, propojení škol internetem, atd. Zde nás ani tak nezajímají délky jednotlivých cest mezi propojenými body, ale hlavně celková délka či cena vedení/spojení, které musíme postavit. Našim cílem je tedy najít minimální souvislý podgraf daného grafu, tedy minimální způsob propojení(v daných podmínkách), ve kterém existují cesty mezi každou dvojicí vrcholů. Stručný přehled lekce Řešení problému minimální kostry v grafu hladový a Jarníkův algoritmus. Obecné pojetí hladového algoritmu. Matroidy struktury, na nichž hladový algoritmus vždy funguje. Petr Hliněný, FI MU Brno FI: MA00: Kostry, Hladový algoritmus
5. Hledání minimální kostry Problém 5.. Problém minimální kostry(mst) Jedán(souvislý)váženýgraf G, wsnezápornýmohodnocenímhran w.otázkouje najít kostru T v G, která má nejmenší možné celkové ohodnocení. Formálně MST = min w(e). kostra T G e E(T) Kostra daného grafu je minimální podgraf, který zachovává souvislost každé komponenty původního grafu. Proto nám vlastně ukazuje minimální propojení daných vrcholů, ve kterém ještě existují cesty mezi všemi dvojicemi, které byly propojeny i původně. Petr Hliněný, FI MU Brno 2 FI: MA00: Kostry, Hladový algoritmus
Praktickou formulací problému je třeba propojení domů elektrickým rozvodem, škol internetem,atd.jednásetadyozadání,vekterýchnászajímápředevšímcelkovádélkačicena propojení, které je třeba vytvořit. Příklad je uveden na následujícím obrázku i s vyznačenou minimální kostrou vpravo. 4 4 2 2 2 2 2 2 4 2 4 2 Algoritmus5.2. Hladový prominimálníkostru. Jedánsouvislýváženýgraf G, wsnezápornýmohodnocenímhran w. Seřadíme hrany grafu G vzestupně podle jejich ohodnocení, tj. w(e ) w(e 2 )... w(e m ). Začnemesprázdnoumnožinouhran T= prokostru. Pro i=,2,...,mvezmemehranu e i apokud T {e i }nevytváříkružnici, přidáme e i do T.Jinak e i zahodíme. Na konci množina T obsahuje hrany minimální kostry váženého grafu G, w. Petr Hliněný, FI MU Brno FI: MA00: Kostry, Hladový algoritmus
Pro ilustraci si ukážeme postup hladového algoritmu pro vyhledání kostry výše zakresleného grafu.hranysinejprveseřadímepodlejejichvah,,,,2,2,2,2,,,,4,4. V obrázku průběhu algoritmu používáme tlusté čáry pro vybrané hrany kostry a tečkované čáry pro zahozené hrany. Hrany teď postupně přidáváme do kostry/ zahazujeme... 4 4 2 2 2 4 2 2 2 2 4 2 4 4 2 2 2 4 2 2 2 2 4 2 Získámetakminimálníkostruvelikosti+2+2++++2=2,kterájevtomtopřípadě (náhodou) cestou, na posledním obrázku vpravo. Poznamenáváme, že při jiném seřazení hran stejné váhy by kostra mohla vyjít jinak, ale vždy bude mít stejnou velikost 2. Petr Hliněný, FI MU Brno 4 FI: MA00: Kostry, Hladový algoritmus
Důkaz správnosti Algoritmu??: Nechť T jemnožinahranzískanávalgoritmu??anechťhranyjsoujižseřazené w(e ) w(e 2 )... w(e m ).Vezměmemnožinuhran T 0 téminimálníkostry(může jichbýtvícesestejnouhodnotou),kterásestshodujenaconejvíceprvníchhranách. Pokud T 0 = T,algoritmuspracovalsprávně. Předpokládejmetedy,že T 0 T,aukážemespor,tj.žetotonemůževeskutečnosti nastat.označme j >0takovýindex,žesemnožiny T 0 a T shodujínaprvních j hranách e,..., e j,aleneshodujísena e j.toznamená,že e j T,ale e j T 0. (Jistěnemůženastat e j T,ale e j T 0.) PodleDůsledku4.5obsahujegrafnahranách T 0 {e j }právějednukružnici C.Kružnice Cvšaknemůžebýtobsaženavnalezenékostře T,aprotoexistujehrana e k v C,která e k Tazároveň k > j.potomvšakje w(e k ) w(e j )podlenašehoseřazeníhran,a tudížkostranahranách ( T 0 \ {e k } ) {e j }(vzniklánahrazenímhrany e k hranou e j ) neníhoršínež T 0 amělijsmejivnašíúvazezvolitmísto T 0.Tojehledanýspor. Správný pohled na předchozí důkaz by měl být následovný: Předpokládali jsme, že nalezená kostra Tsesněkterouoptimálníkostroushodujeaspoňnaprvních j hranách.potéjsme ukázali,ženěkteroudalšíhranu e k v(předpokládané)optimálníkostřelzezaměnithranou e j,atudíždosáhnoutshoduaspoňnaprvních jhranách.dalšímiiteracemizáměnukážeme úplnou shodu naší nalezené kostry T s některou optimální kostrou. V našem důkaze jsme se vlastně zaměřili na fakt, že ta poslední iterace záměn nemůže selhat. Nakreslete si tento důkaz obrázkem! Petr Hliněný, FI MU Brno 5 FI: MA00: Kostry, Hladový algoritmus
Základní hladový algoritmus pro hledání minimální kostry grafu byl poprvé explicitně popsán Kruskalem, ale už dříve byly objeveny jeho podobné varianty, které zde jen stručně zmíníme. Algoritmus 5.. Jarníkův pro minimální kostru. Hrany na začátku neseřazujeme, ale začneme kostru vytvářet z jednoho vrcholu a v každém kroku přidáme nejmenší z hran, které vedou z již vytvořeného podstromu do zbytku grafu. Poznámka: Tento algoritmus je velmi vhodný pro praktické výpočty a je dodnes široce používaný. Málokdo ve světě však ví, že pochází od Vojtěcha Jarníka, známého českého matematika ve světové literatuře se obvykle připisuje Američanu Primovi, který jej objevil až skoro 0 let po Jarníkovi. Avšak historicky vůbec první algoritmus pro problém minimální kostry(z roku 928) byl nalezen jiným českým(brněnským) matematikem: Algoritmus 5.4. Borůvkův pro minimální kostru(náznak). Toto je poněkud složitější algoritmus, chová se jako Jarníkův algoritmus spuštěný zároveň ze všech vrcholů grafu najednou. Petr Hliněný, FI MU Brno 6 FI: MA00: Kostry, Hladový algoritmus
5.2 Hladový algoritmus v obecnosti Asi nejprimitivnějším možným přístupem při řešení diskrétních optimalizačních úloh je postupovatstylem beruvždytonejlepší,cosezrovnanabízí... Tento postup obecně v češtině nazýváme hladovým algoritmem, i když lepší by bylo použít správnější překlad anglického greedy, tedy nenasystný algoritmus. A ještě hezčí české spojení by bylo algoritmus hamouna. Jednoduše bychom jej nastínili takto: Postupněvkrocíchvybervždytonejlepší,cosedá(nabízí). To vyžaduje zvolit uspořádání na objektech, ze kterých vybíráme. Průběh a úspěch algoritmu silně závisí na tomto zvoleném uspořádání. Jak asi každý ví, nenasystnost či hamounství nebývá v životě tím nejlepším postupem, ale kupodivu tento princip perfektně funguje v mnoha kombinatorických úlohách! Jedním známým příkladem je výše uvedené hledání minimální kostry. Jiným příkladem je třeba jednoduchý problém přidělování(uniformních) pracovních úkolů, na němž si obecné schéma hladového algoritmu ilustrujeme. Petr Hliněný, FI MU Brno 7 FI: MA00: Kostry, Hladový algoritmus
Problém 5.5. Přidělení pracovních úkolů Uvažujeme zadané pracovní úkoly, které mají přesně určený čas začátku i délku trvání. (Jednotlivé úkoly jsou tedy reprezentovány uzavřenými intervaly na časové ose.) Cílem je takové přidělení úkolů pracovníkům, aby jich celkově bylo potřeba co nejméně. Všichni pracovníci jsou si navzájem rovnocenní uniformní, tj. každý zvládne všechno. Pro příklad zadání takové problému si vezměme následující intervaly úkolů: 4 2 2 Kolik je k jejich splnění potřeba nejméně pracovníků? Asi sami snadno zjistíte, že 4 pracovníci stačí, viz zobrazené očíslování. Ale proč jich nemůže být méně? Poznámka: Uvedené zadání může být kombinatoricky popsáno také jako problém optimálního obarvení daného intervalového grafu(vrcholy jsou intervaly úkolů a hrany znázorňují překrývání intervalů). Petr Hliněný, FI MU Brno 8 FI: MA00: Kostry, Hladový algoritmus
Algoritmus 5.6. Hladový algoritmus rozdělení pracovních úkolů. Problém?? je vyřešen následující aplikací hladového postupu:. Úkoly nejprve seřadíme podle časů začátků. 2. Každému úkolu v pořadí přidělíme volného pracovníka s nejnižším číslem. Důkaz: Nechť náš algoritmus použije celkem k pracovníků. Dokážeme jednoduchou úvahou, že tento počet je optimální nejlepší možný. V okamžiku, kdy začal pracovat pracovníkčíslo k,všichni,2,...,k taképracovali(jinakbychomvzaliněkterého znich).vtomokamžikutedymáme kpřekrývajícíchseúkolůakaždýznichvyžaduje vlastního pracovníka. Příklad neoptimálního přidělení pracovních úkolů dostaneme například tak, že na začátku úkoly seřadíme podle jejich časové délky.(tj. čím delší úkol, tím dříve mu hladově přiřadíme pracovníka.) 5 2 2 4 Jak vidíme na obrázku, nalezené řešení není optimální vyžaduje 5 místo 4 pracovníků. Je tedy velmi důležité, podle jakého prinicipu seřadíme objekty(úkoly) na vstupu. Petr Hliněný, FI MU Brno 9 FI: MA00: Kostry, Hladový algoritmus
5. Pojem matroidu Definice5.7. Matroid namnožině X,značený M=(X, N), je takový systém N podmnožin nosné množiny X, ve kterém platí následující:. N 2. A Na B A B N. A, B Na A < B y B \ A: A {y} N Množinám ze systému N říkáme nezávislé množiny. Těm ostatním pak říkáme závislé. Nezávislým množinám, do kterých již nelze přidat žádný prvek tak, že zůstanou nezávislé, říkáme báze matroidu. Nejdůležitější částí definice matroidu je zvýrazněný třetí bod. Přímo ukázkový příklad matroidu nám dává lineární algebra všechny lineárně nezávislé podmnožiny vektorů tvoří matroid. Odtud také pocházejí pojmy nezávislosti a báze matroidu, které přímo odpovídají příslušným pojmům vektorového prostoru. Lema 5.8. Všechny báze matroidu obsahují stejně mnoho prvků. Důkaz: Toto přímo vyplývá z třetí vlastnosti definice matroidu: Pokud nezávislá množina Amáméněprvkůnežbáze B,takdo Alzevždypřidatdalšíprvek xtak,že zůstane A {x} nezávislá. Petr Hliněný, FI MU Brno 0 FI: MA00: Kostry, Hladový algoritmus
Nyní uvedeme několik poznatků o stromech, které jsou relevantní pro zavedení grafových matroidů. Lema5.9.Lesna nvrcholechsckomponentamisouvislostimápřesně n chran. Důkaz: Každý vrchol lesa L náleží právě jedné komponentě souvislosti z definice. Jak známo,každýstrom,tj.komponentalesa L,máojednuhranuméněnežvrcholů.Ve sjednocení c komponent tak bude právě o c méně hran než vrcholů. Definice: Řekneme, že podmnožina hran F E(G) je acyklická, pokud podgraf s vrcholy V(G)ahranamizFnemákružnici. Lema5.0.Nechť F, F 2 jsouacyklicképodmnožinyhrangrafu Ga F < F 2.Pak existujehrana f F 2 \ F taková,že F {f}jetakéacyklickápodmnožina. Důkaz:Jelikož F < F 2 aplatílema??,mápodgraf G tvořenýhranamizf více komponentnežpodgraf G 2 tvořenýhranamizf 2.Potomvšakněkteráhrana f F 2 musíspojovatdvěrůznékomponentypodgrafu G,atudížpřidáním fdo F nevznikne kružnice. Petr Hliněný, FI MU Brno FI: MA00: Kostry, Hladový algoritmus
Definice: Podle Lematu?? tvoří systém všech acyklických podmnožin hran v(libovolném) grafu G matroid. Tento matroid nazýváme matroidem kružnic grafu G. V analogií s grafy používáme název kružnice pro minimální závislé množiny matroidu. Dva příklady matroidu jsou hezky ilustrovány v následujícím obrázku, který ukazuje, jak hrany grafu K 4 vlevo odpovídajívektorůmvmatroidukružnicvpravo.čáry(zvané přímky )v pravém schématu vyznačují lineární závislosti mezi vektory; tj. nezávislé jsou ty trojice bodů, které neleží na žádné společné přímce. [ f 00 ] K 4 a f d e b [ 0 [ 0 ] d ] [ 0 ] e [ ] c 0 a c [ 0 ] b 0 Petr Hliněný, FI MU Brno 2 FI: MA00: Kostry, Hladový algoritmus
Abstraktní hladový algoritmus V praxi se matroid obvykle nezadává výčtem všech nezávislých množin, protože těch jepřílišmnoho(až2 n pro n-prvkovoumnožinu X). Místo toho bývá dána externí funkce pro testování nezávislosti dané podmnožiny. Algoritmus 5.. Nalezení minim. báze matroidu hladový algoritmus. vstup:množina Xsváhovoufunkcí w: X R, matroid na X určený externí funkcí nezavisla(y); setříditx=(x[],x[2],...,x[n])tak, aby w[x[]]<=...<=w[x[n]]; B = ; for (i=; i<=n; i++) if (nezavisla(b {x[i]})) B = B {x[i]}; výstup: báze Bdanéhomatroidusmin.součtemohodnocenívzhledemkw. Poznámka: Pokud X v tomto algoritmu je množina hran grafu, w váhová funkce na hranách a nezávislost znamená acyklické podmnožiny hran(matroid kružnic grafu), pak Algoritmus?? je přesně instancí Algoritmu??. Petr Hliněný, FI MU Brno FI: MA00: Kostry, Hladový algoritmus
Věta 5.2. Algoritmus??(hladový algoritmus) pro danou nosnou množinu X s váhovoufunkcí w:x Raprodanýmatroid N na X správněnajdebázivn s nejmenším součtem vah. Důkaz:Zdefinicematroidujejasné,žekvýslednémnožině Bjižnelzepřidatdalší prvek,abyzůstalanezávislá,protoje B báze.seřaďmesiprvky X podlevahjako valgoritmu w(x[])... w(x[n]).nechťindexy i, i 2,...,i k určujívybranou k- prvkovoubázi Bvalgoritmuanechťindexy j, j 2,...,j k vyznačují(třebajinou?)bázi {x[j ],..., x[j k ]}snejmenšímmožnýmsoučtemvah. Vezměmenejmenší r takové,že w(x[i r ]) w(x[j r ]).Potomnutně w(x[i r ]) < w(x[j r ]),protoženášalgoritmusje hladový abralbymenší w(x[j r ])jiždříve.na druhoustranu,pokudbydruhábáze {x[j ],..., x[j k ]}dávalamenšísoučetvah,muselobyexistovatjiné s takové,že w(x[i s ]) > w(x[j s ]).Nynívezměmenezávislé podmnožiny A = {x[i ],..., x[i s ]}aa 2 = {x[j ],...,x[j s ]},kde A 2 máojeden prvekvícenež A avšechnyprvky A 2 majídlepředpokladumenšíváhunež w(x[i s ]). Podledefinicematroiduexistuje y A 2 \ A takové,že A {y}jenezávislá.přitom samozřejmě y=x[l]pronějaké l.aletonenímožné,protože,jakjevýšenapsáno, w(y) < w(x[i s ]),takžebynášhladovýalgoritmusmusel y= x[l], l < i s vzítdřívedo vytvářenébáze Bnežvzal x[i s ].Protojinábázesmenšímsoučtemvahnežnalezená B neexistuje. Petr Hliněný, FI MU Brno 4 FI: MA00: Kostry, Hladový algoritmus
5.4 Kdy hladový algoritmus(ne)pracuje správně Jak ukážeme, funkčnost hladového algoritmu je přímo svázána s matroidy. Věta 5.. Nechť X je nosná množina se systémem nezávislých podmnožin N splňujícípodmínky(,2)definice??.pokudprojakoukolivváhovoufunkci w: X R najde Algoritmus?? optimální nezávislou množinu z N, tak N splňuje také podmínku (),atudížtvořímatroidna X. Důkaz: Tvrzení dokazujeme sporem. Předpokládejme, že vlastnost() neplatí pro dvojicinezávislýchmnožin A, B,tj.že A < B,aleprožádnýprvek y B \ Anení A {y}nezávislá.nechť A =a, B =b,kde2b >2a+.Zvolímenásledující ohodnocení w(x)= 2bpro x A, w(x)= 2a pro x B \ A, w(x)=0jinak. Hladovýalgoritmuspřirozeněnajdebázi B obsahující AadisjunktnísB \ Apodle našehopředpokladu.jejíohodnoceníje w(b )= 2ab.Avšakoptimálníbázíjev tomtopřípadějiná B 2 obsahujícícelé Bamajícíohodnocenínejvýše w(b 2 ) ( 2a )b = 2ab b < w(b ).Tojevesporusdalšímpředpokladem,žeipřinámi zvoleném ohodnocení w nalezne hladový algoritmus optimální bázi. Proto je sporný nášpředpokladomnožinách A, Bapodmínka()jesplněna. Petr Hliněný, FI MU Brno 5 FI: MA00: Kostry, Hladový algoritmus
Příklad 5.4. Nakonec uvádíme dvě ukázky, ve kterých hladový algoritmus výrazně selže: Obarvení grafu. Problém obarvení grafu žádá přiřazení co nejméně barev vrcholům tak, aby sousední dvojice dostaly různé barvy. Obecně hladově barvíme graf tak, že ve zvoleném pořadí vrcholů každému následujícímu přidělíme první volnou barvu. 2 Třeba v nakreslené cestě délky můžeme barvit hladově v pořadí od vyznačených krajních vrcholů, a pak musíme použít barvy místo optimálních dvou. Vrcholové pokrytí. Problém vrcholového pokrytí se ptá na co nejmenší podmnožinu Cvrcholůdanéhografutakovou,žekaždáhranamáalespoňjedenkonecvC. Přirozeným hladovým postupem by bylo vybírat od vrcholů nejvyšších stupňů ty, které sousedí s doposud nepokrytými hranami. Bohužel tento postup také obecně nefunguje. Petr Hliněný, FI MU Brno 6 FI: MA00: Kostry, Hladový algoritmus