1 / 27

Kostra grafu Prohledávání grafu

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

azizi
Télécharger la présentation

Kostra grafu Prohledávání grafu

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kostra grafuProhledávání grafu

  2. 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?

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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/

  9. 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’

  10. 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.

  11. 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í

  12. 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

  13. 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

  14. 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

  15. (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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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.

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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.

More Related