270 likes | 553 Views
Kostra grafu Prohledávání grafu. Opakování z minulé přednášky. Co je to AVL strom a jak funguje? Co je to prioritní fronta a prioritní strom? Jak funguje řazení haldou?. Osnova dnešní přednášky. Prohledávání obecného grafu do hloubky a do šířky Definice kostry počet koster grafu
E N D
Opakování z minulé přednášky • Co je to AVL strom a jak funguje? • Co je to prioritní fronta a prioritní strom? • Jak funguje řazení haldou?
Osnova dnešní přednášky • Prohledávání obecného grafu • do hloubky a do šířky • Definice kostry • počet koster grafu • Růst stromu – souvislost koster a prohledávání • Algoritmy hledání minimální kostry • Hledání mostů a artikulací • Bloudění v bludišti
Prohledávání grafu • Systematické navštívení / zpracování všech uzlů v grafu • narozdíl od stromů prohledávání komplikují cykly • Prohledávání do šířky • datová struktura fronta • Prohledávání do hloubky • datová struktura zásobník
Obecný algoritmus prohledávání • Vstup: Souvislý graf G • Výstup: Posloupnost všech uzlů grafu G • Inicializace: Libovolný uzel označkuj a vlož do D • Dokud je D neprázdné, opakuj • Vyber uzel, který je na řadě • Zpracuj / vypiš jej • Všechny jeho neoznačkované následovníky • označkuj a vlož do D • D = fronta / zásobník podle způsobu prohledávání • Díky značkování zpracujeme každý uzel právě jednou
Kostry a jejich vlastnosti • Kostra souvislého neorientovaného grafu je takový faktor, který je stromem • U hranově ohodnoceného grafu je velikost (délka, cena) kostry dána součtem ohodnocení hran kostry. • Minimální kostra je kostra s nejmenší možnou velikostí • Každý souvislý graf má kostru • Každý souvislý acyklický podgraf grafu G je součástí nějaké kostry grafu G • Každá kostra a každý hranový řez mají společnou alespoň jednu hranu
Počet koster grafu • Snadlo lze počet koster určit pouze pro speciální typy grafů: • Strom má jedinou kostru – sebe sama • Cyklický graf Cn má n koster • Počet koster v úplném grafu Kn je roven nn-2 • Cayleyho formule • Počet koster úplného bipartitního grafu Kp,q je roven pq-1.qp-1
Počet koster obecného grafu I. • Počet koster obecného grafu získáme takto: • artikulacemi rozdělíme graf na části, které • vždy obsahují všechny hrany mezi danými uzly • jsou buď stromy, cykly nebo úplné grafy • určíme počty koster jednotlivých podgrafů • vynásobíme počty koster mezi sebou Zdroj: http://teorie-grafu.elfineer.cz/
Počet koster obecného grafu II. • Postup pomocí rozdělování na podgrafy je těžko algoritmizovatelný • Obecný postup pro neorientované grafy: • Laplaceova matice grafu G LG = (lij): lij = • dG(vi) pro i = j • -1 pokud (vi,vj) je hrana • 0 jinak • Matici L’ získáme vypuštěním libovolného řádku a libovolného sloupce z matice L. • Počet koster grafu G = determinant matice L’
Růst stromu I. • Je dán graf G a jeho podgraf T, který je stromem. • Hraniční hranou nazveme takovou hranu, jejíž jeden uzel leží ve stromu T a druhý ne. • Věta: Jestliže ke stromu T přidáme hraniční hranu spolu s incidujícím uzlem, výsledný graf bude opět strom. • Důkaz: Přidání hraniční hrany nemůže vytvořit cyklus, protože koncový uzel je mimo strom.
Růst stromu II. • T := libovolný uzel grafu G • Opakuj dokud existují hraniční hrany • vyber hraniční hranu • přidej ji ke stromu T • Výběr hraniční hrany lze provést mnoha způsoby • podle toho, jaký výsedek požadujeme • Uzly stromu lze uspořádat podle pořadí přidávání
Růst lesa v nesouvislém grafu • Iterativní přidávání hraničních hran vytvoří kostru komponenty • V nesouvislém grafu je třeba budovat strom pro každou komponentu • nejsou-li žádné hraniční hrany, přidáme některý z dosud nepřidaných uzlů • ten určitě leží v jiné komponentě • výsledkem je tedy les
Růst stromu a prohledávání grafu • Prohledávání do šířky • růst stromu, při němž přidáváme hrany incidentní s nejdříve přidaným uzlem • Prohledávání do hloubky • růst stromu, při němž přidáváme hrany incidentní s nejpozději přidaným uzlem
Hledání minimální kostry grafu • Jarníkův-Primův-Dijkstrův algoritmus • růst stromu • Kruskalův hladový algoritmus • postupné spojování komponent lesa do jediného stromu • Borůvkův-Sollinův algoritmus • postupné spojování komponent lesa do jediného stromu
(Jarníkův-)Primův(-Dijkstrův) algoritmus • Růst stromu, při němž přidáváme vždy nejkratší z hraničních hran • Vyber libovolný uzel • Dokud existují nevybrané uzly • Vyber nejkratší hranu spojující některý vybraný uzel s nevybraným • Přidej vybranou hranu a nevybraný incidentní uzel • Důkaz minimality: • indukcí přes počet uzlů • v každém kroku platí, že na daných uzlech není možné najít menší kostru
Kruskalův hladový algoritmus • Množinu hran seřadíme vzestupně podle hranového ohodnocení • Postupně budujeme nový graf • začínáme pouze s uzly (tj. „diskrétní faktor“) • přidáváme hrany dle pořadí délek • pokud by přidáním hrany vznikla kružnice, hranu nepřidáváme • spojujeme tedy jen uzly ležící v různých komponentách • pokusíme se přidat všechny hrany
Borůvkův-Sollinův algoritmus • Je dán souvislý graf G = (U, H) • s hranami různé délky • T := • Dokud (U, T) není souvislý graf, opakuj: • E := • Pro všechny komponenty (U, T) • Do E přidej nejkratší hranu spojující uzel dané komonenty s uzlem mimo komponentu • T := T E • (U, T) je minimální kostra grafu G
Další užitečné kostry grafů • Maximální kostra • Všechny uvedené algoritmy lze použít pro hledání maximální namísto minimální kostry • K čemu jsou maximální kostry dobré? • Minimální kostra s omezeným stupněm uzlů • Kostra s maximem listů • Kostra s minimem listů • úzce souvisí s hledáním Hamiltonovské kružnice • Kostra s minimálním průměrem
Hledání mostů • Připomenutí: Most je hrana, po jejímž odstranění se zvýší počet komponent grafu. • V souvislém grafu se poruší souvislost • Jednoprvkový hranový řez • Most je součástí kritické cesty • je obsažen v každé kostře • každá cesta spojující uzly “na různých stranách mostu” vždy prochází přes most • Odhalení slabých / zranitelných hran v síti / procesu / struktuře
Hledání mostů: pomocné pojmy • Uzel při DFS nazveme dokončený, jestliže všichni jeho sousedé již byli navštíveni • potřeba backtrackingu • Nechť H je podgrafem grafu G. Kontrakcí H do uzlu nazveme graf vzniklý z grafu G nahrazením celého podgrafu H jediným uzlem.
Hledání mostů: algoritmus • Vstup: Souvislý graf G • Výstup: Seznam mostů v grafu G • Inicializace: Nastav H := G • Opakuj dokud |UH| > 1 • buduj DFS-cestu tak dlouho, dokud nedosáhne dokončeného vrcholu t • jestliže stupeň t je roven 1 • označ hranu incidentní s t jako most • H := H – t • jinak (uzel t a všichni jeho sousedé leží na cyklu C) • Proveď kontrakci cyklu C
Hledání artikulací • Připomenutí: Artikulace je uzel, po jehož odstranění se zvýší počet komponent grafu. • V souvislém grafu se poruší souvislost • Jednoprvkový uzlový řez • Artikulace je součástí kritické cesty • je obsažena v každé kostře • každá cesta spojující uzly “na různých stranách” vždy prochází přes artikulaci • Odhalení slabých / zranitelných uzlů v síti / procesu / struktuře
Hledání artikulací: algoritmus • Vstup: Souvislýgraf G • Výstup: Množinaartikulací K • Inicializace: K := • Vyberlibovolnýuzel r grafu G • Prohledejgraf do hloubkyzačínaje v uzlu r • Výsledkembudestrom T s kořenem r • Pro každýuzel u známedfnum(u) = pořadínavštíveníuzlu • Pro každýuzel u spočítej low(u) jako minimum z • dfnum(u) • dfnum(v) všechsousedůuzlu u přeshranuneležícívestromu • low(v) pro každéhopotomka v uzlu u • Má-li kořen r více, nežjednohopotomka • K := K {r} • Pro všechny uzly u kromě r • pokud má potomka v takového, že low(v) dfnum(u) • K := K {u} • Vrať množinu K
Tarryho algoritmus: úvod • Hledání cesty z bludiště pomocí prohledávání do hloubky • Bludiště je tvořeno místnostmi, z nichž vedou dveře do chodeb spojujících jednotlivé místnosti • Nemáme k dispozici mapu • V každé místnosti je kousek křídy • můžeme uchovávat lokální informaci
Tarryho algoritmus: popis • Založen na značkování dveří podle následujících pravidel: • vstoupíš-li do místnosti, kde žádné dveře nejsou označeny, označkuj vstupní dveře “IN” • jsi-li v místnosti s alespoň jedněmi neoznačkovanými dveřmi, vyber si libovolné, označ je “OUT” a projdi chodbou za nimi do následující místnosti • jsi-li v místnosti, kde jsou všechny dveře označeny, vstup do dveří označených “IN” • vstoupíš-li do místnosti, kde jsou všechny dveře označeny “OUT”, z bludiště není východ
Tarryho algoritmus: vlastnosti • Nemá-li bludiště východ, po skončení bude každý tunel projítý právě dvakrát • jednou tam a jednou zpátky • nikdy nejdeme stejným tunelem stejným směrem dvkarát • Backtracking nastává teprve tehdy, není-li jiná alternativa • Existuje-li východ, po konečném počtu kroků je najdeme
K zamyšlení • Je dán úplný graf Kn, n >1 a v něm hrana e. V kolika různých kostrách leží? • Uveďte příklad grafu G a jeho kostry T takové, že T nemůže odpovídat žádnému prohledávání do šířky, ani do hloubky. Zdůvodněte.