Stromy a kostry
Definice stromu Souvislý (neorientovaný) graf – mezi každými dvěma vrcholy existuje (alespoň jedna) cesta Strom je souvislý graf, který neobsahuje kružnice
Další možné definice stromu Strom je souvislý graf, který má |V|-1 hran Strom je graf bez kružnic, který má |V|-1 hran Strom je graf, kde mezi každou dvojicí různých vrcholů existuje právě jedna cesta
Podgraf, kostra Graf G’=(V’,E’) je podgrafem grafu G=(V,E), pokud V’ je podmnožina V a E’ je podmnožina E. Graf K je kostrou grafu G, pokud – K je podgrafem G – K obsahuje všechny vrcholy G – K je strom
Existence koster Nesouvislé grafy nemají kostru Každý souvislý graf má kostry Stromy mají právě jednu kostru Úplné grafy mají |V| |V|-2 koster.
Graf a jeho kostry
Hledání minimální kostry Pokud je graf hranově ohodnocený aditivní veličinou má smysl hledat minimální kostru Jak ji hledat? – Vygenerovat všechny kostry, spočítat jejich délku a vybrat nejkratší. – To není dobrý postup, neboť počet koster roste exponenciálně.
Borůvkův algoritmus Otakar Borůvka ( )
Borůvkův algoritmus 1.Seřaď hrany grafu podle jejich délky 2.Vezmi nejkratší hranu grafu 3.Pokud neuzavře kružnici, zařaď ji do kostry 4.Pokud kostra neobsahuje n-1 hran, pokračuj bodem 2.
Příklad ABCDEFGH A B C D E F G H Nalezněte nejlevnější kostru v neorientovaném grafu, který je dan touto maticí:
Příklad ABCDEFGH A B C D E F G H Nejkratší hrana je A-C, ta neuzavírá kružnici AC
Příklad ABCDEFGH A B C D E F G H Druhá v pořadí hrana B-E AC B E
Příklad ABCDEFGH A B C D E F G H Hrana E-G je stejně dlouhá a také neuzavírá kružnici, je to třetí hrana kostry AC B E G
Příklad ABCDEFGH A B C D E F G H Čtvrtá hrana je G-H AC B E G H
Příklad ABCDEFGH A B C D E F G H Teď je na řadě B-C, také neuzavírá kružnici, je to pátá hrana kostry A C B E G H
Příklad ABCDEFGH A B C D E F G H F-C je šestá hrana kostry A C B E G H F
Příklad ABCDEFGH A B C D E F G H Hrana A-G by uzavřela kružnici, proto ji přeskočím a do kostry nezařadím A C B E G H F
Příklad ABCDEFGH A B C D E F G H Z téhož důvodu nepoužiji ani hranu B-H ani hranu C-H A C B E G H F
Příklad ABCDEFGH A B C D E F G H Hrana D-E kružnici neuzavírá, je to sedmá a poslední hrana kostry, kostra je hotova a její celková cena je = 16. A C B E G H F D
Časová složitost algoritmu Graf s n vrcholy má maximálně n 2 hran. V první fázi Borůvkova algoritmu musím hrany srovnat do posloupnosti dle délky. To vyžaduje n 2. logn 2 operací. V druhé fázi vždy vezmu hranu a zjistím, zda do kostry patří, či ne. V nejhorším možném případě budu muset otestovat všech n 2 hran. Celkem tedy potřebuji maximálně n 2 + n 2. logn 2 = n 2 (1+2.logn) operací To je přijatelné číslo, např. pro n=10000, vychází operací.
Výpočetní složitost Odhlédneme-li od realizace algoritmu na konkrétním hardwaru a v konkrétním prostředí informačního systému, lze časovou složitost hodnotit počtem kroků, které algoritmus musí provést, než problém rozhodne.
Průměrná a pesimistická složitost Je zřejmé, že u téhož algoritmu i při stejném rozsahu zpracovávaných dat může výpočet trvat různou dobu v závislosti na konkrétních hodnotách vstupních dat. Bude totiž pro různá data potřeba provést různý počet kroků. Je tedy třeba rozlišovat – Pesimistickou výpočetní složitost – definovanou jako složitost, které je dosaženo v „nejhorším možném případě“ pro daný rozsah zpracovávaných dat. – Průměrnou výpočetní složitost – definovanou jako aritmetický průměr složitostí pro různé vstupy daného rozsahu s přihlédnutím k pravděpodobnostnímu rozložení těchto možných vstupů.
Funkce časové složitosti Je zřejmé, že sledovaná doba výpočtu nezávisí pouze na algoritmu, ale velmi výrazně i na rozsahu dat, s kterými algoritmus pracuje. Tomuto údaji budeme říkat rozměr vstupu charakterizován přirozeným číslem. Časovou složitost lze měřit pouze zobecněným měřením, kde mírou složitosti je funkce, která rozměru vstupu přiřazuje čas, respektive počet operací potřebných pro provední výpočtu.
Asymptotická složitost U těchto funkcí se zajímáme především o jejich růst v závislosti na růstu rozměru vstupu. Tedy o tak zvané asymptotické chování této funkce při neomezeném růstu rozměru vstupu. Toto chování posuzujeme porovnáním s chováním běžně známých funkcí, o jejichž růstu máme určitou představu.
Typické třídy výpočetní složitosti Θ (1) – růst nezáleží na rozměru vstupu Θ (n) – lineární růst (složitost je přímo úměrná rozměru dat) Θ (n × log n) – tento růst dosahují „chytré“ algoritmy řazení („třídění“) Θ (n 2 ) – kvadratický růst, například Dijskrův algoritmus Θ (n 3 ) – kubický růst typický pro některé operace s maticemi a algoritmy řešení soustav lineárních rovnic Θ (n k ) pro nějaké přirozené číslo k z N – polynomiální růst Θ (2 n ), exponenciální růst Θ (n!) – faktoriální růst.
Srovnání doby výpočtu log 2 nN N log 2 n n2n2 n3n3 n4n4 2n2n n!n! 2 10 s20 s 40 s80 s160 s40 s20 s 5 23,1 s50 s116 s250 s 1,25ms6,25ms 320 s 1,2ms 10 33,2 s100 s332 s 1ms10ms100ms10,2 ms1,17s 15 39,1 s150 s587 s 2,25ms33,8ms507ms328ms 15,1 days 20 43,2 s200 s864 s 4ms80ms1,6s10,5s years 25 46,4 s250 s 1,16ms6,25ms156ms3,91s5,59min 30 19,1 s300 s 5,73ms9ms270ms37,5s2,98h 50 56,4 s500 s 28,2ms25ms1,25s1,04min357years ,4 s 1ms6,64ms100ms10s16,7min ,4 s 2ms15,3ms400ms1,34min4,47h 50089,4 s5ms44,4ms2,5s4,17min13,9h
Srovnání doby výpočtu Původ ní 2-krát5-krát10-krát 100- krát krát (n)(n) (n2)(n2) (n3)(n3) (2 n ) (n!)
Úloha obchodního cestujícího TSP (Travel Salesman Problem) Hledání nejkratší Hamiltonovské cesty
sir Wiliam Rowan Hamilton ( )
Hamiltonovská cesta Hamiltonovská cesta je cesta procházející všemi vrcholy neorientovaného grafu. Je-li graf hranově ohodnocen aditivní veličinou, má smysl mluvit o nejkratší Hamiltonovské cestě. V úplném grafu je n! Hamiltonovských cest, metoda generování všech cest je tedy prakticky nepoužitelná. Bohužel lidstvo nezná žádný algoritmus, který by pracoval s výrazně lepší časovou složitostí A navíc se zdá, že podobný algoritmus ani neexistuje.
Littlův algortimus Algoritmus pro hledání nejkratší Hamiltonovské cesty. Pesimistická výpočetní složitost algoritmu je n! Algoritmus tedy nezaručuje nalezení řešení v „rozumném čase“. Průměrná výpočetní složitost je ale podstatně menší. V mnoha případech algortimus „rozumně zafunguje“ Algoritmus patří mezi tzv. heuristiky
Příklad ABCDEFG A B C D E F G
Příklad ABCDEFG A B C D E F G AG CF B D 6 E 7 Vygeneruji minimální kostru, v tomto případě má délku =23
Příklad Kdyby nejlevnější kostra byla cesta, tj. kdyby neobsahovala vrcholy stupně >= 3, musela by to být nejkratší Hamiltonovská cesta. Pokud nejlevnější kostra není cesta, víme alespoň, že délka nejkratší Hamiltonovské cesty bude větší nebo rovna délce nejkratší kostry. V našem případě bude tedy nejkratší Hamiltonovská cesta dlouhá alespoň 23.
Příklad Pokud nejkratší kostra není cesta, obsahuje alespoň jeden vrchol stupně alespoň 3. V našem případě je to vrchol B. Pokud by bylo takových vrcholů více, vybereme (náhodně) jeden z nich. Ve výsledné HC určitě nebudou zároveň všechny tři hrany BA,BC a BE. Rozdělíme tedy úlohu na 3 pod úlohy, hledání nejkratší HC v grafu bez hrany BA,
Příklad Rozdělíme tedy úlohu na 3 pod úlohy, – hledání nejkratší HC v grafu bez hrany BA, – hledání nejkratší HC v grafu bez hrany BC, – Hledání nejkratší HC v grafu bez hrany BE. Výsledky všech tří úloh porovnáme a nejkratší řešení bude i řešením původní úlohy.
Hledání nejkratší HC v grafu bez hrany BA ABCDEFG A B C D E F G AG CF B D 6 E 7 Opět hledám minimální kostru. Graf se rozpadl na dvě komponenty, musím najít nejkratší hranu, která propojí komponentu A,D,G s komponentou B,C,E,F a nebude to hrana AB
Hledání nejkratší HC v grafu bez hrany BA ABCDEFG A B C D E F G AG CF B D 6 E 7 Z 11 hran, které přicházejí do úvahy je nejkratší hrana EG. Ta mne vytvoří kostru (nikoli cestu) o ceně 28. 9
Schéma řešení Původní úloha Min 23 Podúloha bez AB Podúloha bez BC Podúloha bez BE Min 28
Hledání nejkratší HC v grafu bez hrany BC ABCDEFG A B C D E F G AG CF B D 6 E 7 Je třeba propojit komponentu C,F s komponentou A,B,D,E,G některou z devíti možných hran.
Hledání nejkratší HC v grafu bez hrany BC ABCDEFG A B C D E F G AG CF B D 6 E 7 Nejkratší hrana je hrana CD dlouhá 10. Ta mi dává vznik minimální kostře dlouhé =30. Tato kostra je Hamiltonovskou cestou a je tedy konečným řešením podúlohy. Zároveň vím, že řešení celé původní úlohy bude maximálně 30 (a minimálně 23). 10
Schéma řešení Původní úloha Min 23 Max 30 Podúloha bez AB Podúloha bez BC Podúloha bez BE Min 28 30
Hledání nejkratší HC v grafu bez hrany BE ABCDEFG A B C D E F G AG CF B D 6 E Vrchol E je třeba připojit někam jinam, než na B.
Hledání nejkratší HC v grafu bez hrany BE ABCDEFG A B C D E F G AG CF B D 6 E Nejlevnější možnost je připojit ho na G, tím mi vznikne kostra (nikoli cesta) o celkové délce 25. Nyní tedy vím, že hodnota řešení původní úlohy se bude pohybovat mezi 25 a 30. 9
Schéma řešení Původní úloha Min 25 Max 30 Podúloha bez AB Podúloha bez BC Podúloha bez BE Min Min 25
Heuristika Varianta bez hrany BE má menší dolní odhad, než varianta bez hrany AB. Budu tedy pokračovat v jejím rozvíjení. Minimální kostra v této variantě obsahuje vrchol G stupně 3. Opět tedy vygeneruji 3 podúlohy, v nichž budou kromě hrany BE zakázány ještě postupně hrany AG,DG a EG.
Schéma řešení Původní úloha Min 25 Max 30 bez AB bez BC bez BE Min Min 25 bez BE a AG bez BE a DG bez BE a EG
Hledání nejkratší HC v grafu bez hran BE a AG ABCDEFG A B C D E F G AG CF B D 6 E Je třeba propojit komponenty A,B,C,F a D,E,G jinou hranou, než BE, nebo AG. V úvahu připadá 10 hran. 9
Hledání nejkratší HC v grafu bez hran BE a AG ABCDEFG A B C D E F G AG CF B D 6 E Nejkratší mezi nimi je hrana CD, ta vede ke kostře (nikoli cestě) délky
Schéma řešení Původní úloha Min 25 Max 30 bez AB bez BC bez BE Min Min 25 bez BE a AG bez BE a DG bez BE a EG Min 33
Prořezávání stromu (princip mezí) Ve variantě bez hran BE a AG je nejlepší možné dosažitelné řešení s hodnotou 33. Ale my již jinde ve stromě umíme najít řešení za 30. Proto můžeme celou větev „bez BE a AG“ odříznout a dále nezkoumat.
Schéma řešení Původní úloha Min 25 Max 30 bez AB bez BC bez BE Min Min 25 bez BE a AG bez BE a DG bez BE a EG Min 33
Hledání nejkratší HC v grafu bez hran BE a DG ABCDEFG A B C D E F G AG CF B D E Vrchol D je třeba připojit někam jinam, než na G. 9
Hledání nejkratší HC v grafu bez hran BE a DG ABCDEFG A B C D E F G AG CF B D E Nejlépe to půjde na C. Vznikla kostra (nikoli cesta) s celkovém délkou 29. Tu zatím nelze odříznout, pravděpodobně ji budeme muset dále rozvětvit. 9 10
Schéma řešení Původní úloha Min 25 Max 30 bez AB bez BC bez BE Min Min 25 bez BE a AG bez BE a DG bez BE a EG Min 33 Min 29
Hledání nejkratší HC v grafu bez hran BE a DG ABCDEFG A B C D E F G AG CF B D 6 E Vrchol E je třeba připojit někam jinam než na B, či G
Hledání nejkratší HC v grafu bez hran BE a DG ABCDEFG A B C D E F G AG CF B D 6 E Nejlépe bude použít hranu EF. Tím vznikne Hamiltonovská cesta délky
Schéma řešení Původní úloha Min 25 Max 30 bez AB bez BC bez BE Min Min 25 bez BE a AG bez BE a DG bez BE a EG Min 33 Min 29 28
Závěr Nově vzniklá Hamiltonovská cesta je lepší, než dosavadní minimum 30. Zároveň nám toto nově nalezené minimum umožní odříznout větev „bez AB“ s dolním odhadem též 28 (maximálně bychom mohli získat druhé stejně dobré řešení). A také mohu odříznout větev „bez BE a DG“ s dolním odhadem 29. Ve schématu řešení již nezůstala žádná neprozkoumaná větev.
Schéma řešení Původní úloha Min 25 Max 30 bez AB bez BC bez BE Min Min 25 bez BE a AG bez BE a DG bez BE a EG Min 33 Min 29 28
Hledání nejkratší HC v grafu bez hran BE a DG ABCDEFG A B C D E F G AG CF B D 6 E Řešení E-F-C-B-A-G-D s délkou 28 je tedy minimální Hamiltonovská cesta. 12