Teorie grafů Radim Farana Podklady pro výuku pro akademický rok 013/014 Obsah Kostra grafu. Tahy,. Úloha čínského pošťáka. Zdroj: Vítečková, M., Přidal, P. & Koudela, T. Výukový modul k předmětu Systémová analýza [on-line]. Dostupný z webu: <URL:http://books.fs.vsb.cz/SystAnal/Uvod.htm> Kostra grafu Kostra grafu podgraf původního grafu, který obsahuje všechny jeho uzly, a současně je stromem. Minimální kostra grafu je taková kostra grafu, která má minimální součet ohodnocení hran. 1
Minimální kostra grafu Zařazovací algoritmus Označovaný také jako Jarníkův algoritmus (v zahraničí známý jako Primův algoritmus případně Dijkstrův vojtech_jarnik.html algoritmus) Hrany seřadíme podle ohodnocení od do neklesající posloupnosti. Vezmeme diskrétní podgraf původního grafu obsahující pouze vrcholy. Procházíme seřazený seznam hran, pokud hrana připojuje další nepřipojený uzel, zařadíme ji do kostry. Vojtěch Jarník *. 1. 1897, Praha +. 9. 1970, Praha http://inserv.math.muni.cz/biografie/ Zařazovací algoritmus Borůvkův algoritmus. 1. V celém grafu se vyberou dvě hrany s nejnižším ohodnocením. +. 7. 1995, Brno. V dalších krocích se vždy vybere další hrana s minimálním ohodnocením tak, aby netvořila cyklus s již dříve vybranými hranami. 3. Krok se opakuje až do vybrání celkového počtu (n 1) hran, které budou tvořit hledanou minimální kostru grafu. Otakar Borůvka * 10. 5. 1899, Ostrožské Předměstí http://inserv.math.muni.cz/biografie/otakar_boruvka.html
Eulerovský tah je takový tah, který obsahuje všechny hrany právě jednou. Orientované grafy obsahují orientované tahy a neorientované grafy obsahují neorientované tahy. Uzavřené jsou takové tahy, u kterých je počáteční a koncový uzel totožný. Neuzavřené jsou takové tahy, které nemají totožný počáteční a koncový uzel. Jednotažky jsou všechny hrany nakresleny jedním tahem. Leonhard Paul Euler * 15. 4. 1707 Basilej, Švýcarsko + 18. 9. 1783 Petrohrad, Rusko http://www.converter.cz/fyzici/euler.htm Neuzavřená jednotažka Uzavřená jednotažka Typy úloh Rozhodnout, zda v daném grafu existuje otevřený nebo uzavřený Eulerovský tah. V daném grafu sestrojit otevřený nebo uzavřený Eulerovský tah. V daném grafu najít nejmenší počet tahů, nikoli Eulerovských, které pokrývají všechny hrany grafu. V daném souvislém grafu (mezi každými dvěma uzly existuje hrana), jehož hrany jsou ohodnoceny kladnými čísly, máme za úkol najít nejkratší uzavřený sled, který obsahuje každou hranu alespoň jednou. (Úloha čínského pošťáka). Věta 1: Nechť graf G je neorientovaný, pak v grafu existuje neorientovaný uzavřený Eulerovský tah právě tehdy, když každý uzel grafu je sudého stupně. Věta : Nechť graf G je orientovaný, pak v grafu G existuje orientovaný uzavřený Eulerovský tah právě tehdy, když pro každý uzel grafu platí, že počet hran vstupujících do uzlu je roven počtu hran z uzlu vystupujících. 3
Algoritmus pro hledání uzavřeného Eulerovského tahu Musí být zajištěna platnost věty 1 nebo. V algoritmu se pak střídavě prodlužují dvě fáze: Existující tah prodlužujeme, dokud se nestane uzavřeným. Uzavřený tah kontrolujeme, zda je Eulerovský. Při kontrole procházíme podél tahu a v každém uzlu x testujeme, zda v okolí uzlu x existuje hrana, která dosud neleží v tahu. Jestliže ano, pak přerušíme kontrolu, tah v uzlu x rozpojíme a začneme jej prodlužovat. Prodlužování skončí v uzlu x. Po rozpojení nového a starého tahu pokračujeme v kontrole počínaje uzlem x a postupujeme podél nové části tahu. Takto je zajištěno, že jak při prodlužování, tak i při kontrole postupujeme podél každé hrany pouze jednou. Celý postup je tedy velmi rychlý. Věta 3: Nechť G je neorientovaný souvislý graf, který obsahuje k uzlů lichého stupně, pak nejmenší počet neorientovaných tahů pokrývajících všechny hrany grafu je k/. Počet uzlů lichého stupně v grafu: k = 4 tahy. Věta 4: V souvislém orientovaném grafu je právě jeden Eulerovský tah neuzavřený právě tehdy, když graf je souvislý a existují-li v něm dva uzly u 1, u, pro které platí: d u1 d u1 1, d u d u 1, kde je: d + ( u 1 ) - počet hran vstupujících do uzlu u 1, d - ( u ) - počet hran vystupujících z uzlu u. Pak uzel u 1 je počáteční uzel a uzel u je koncový uzel neuzavřeného Eulerovského tahu. Pro ostatní uzly platí d + (u) = d - (u). u 1 = 4 3 1 4 = u 4
Algoritmus čínského pošťáka Pošťák musí při roznášce pošty alespoň jedenkrát projít každou ulicí svého rajónu. Jak má postupovat, aby ušel co nejméně kilometrů, to znamená, aby kratší cesty procházel vícekrát? 1. Zjistit, zda jsou všechny uzly sudého stupně.. Není-li tomu tak, musíme přidat hrany, abychom tuto podmínku splnili a to provedeme tak, že spojíme uzly s lichým stupněm nejkratší cestou. 3. Provedeme kontrolu, zda cesta pošťáka je opravdu nejkratší. 5