TGH09 - Barvení grafů Jan Březina Technical University of Liberec 15. dubna 2013
Problém: Najít obarvení států na mapě tak, aby žádné sousední státy neměli stejnou barvu.
Motivační problém Problém: Najít obarvení států na mapě tak, aby žádné sousední státy neměli stejnou barvu. Příslušný graf: vrcholy trojmezí, hrany části hranic, stěny státy Nakreslení grafu: vrcholům přiřadíme body v R 2, každé hraně přiřadíme konkrétní spojitou křivku spojující vrcholy-body hrany Graf je rovinný, pokud existuje nakreslení s neprotínajícími se křivkami (disjunktními). Pro rovinné grafy budeme dále uvažovat toto nakreslení. Stěny rovinného grafu - souvislé množiny, které zbudou z roviny po odstranění hran a vrcholů nakreslení
Duální graf Duální graf rovinného grafu G = (V, E) je graf G = (S, E ), kde S jsou stěny grafu G a stěny S a a S b jsou spojeny hranou pokud sousedí přes nějakou hranu e E. Tvrzení: Duální graf je opět rovinný. Poznámka: Duální graf obecně může obsahovat smyčky a násobné hrany (dále neuvažujeme), ale ne pokud je duální k mapě. (graf s vrcholy stupně alespoň 3).
Barvící pojmy k-obarvení vrcholů grafu je zobrazení b vrcholů V do barev {1,..., k} takové, aby vrcholy spojené hranou měli různou barvu, tj. b(x) b(y) pokud (x, y) E. Chromatické číslo grafu χ(g) je minimální počet barev nutný k obarvení grafu G. Chromatický polynom χ(g, k) je počet různých obarvení max. k barvami. Složitost: rozhodnutí zda graf má χ(g) = k je NP-úplný problém pro k > 2 nalezení chromatického čísla χ(g) je NP-hard problém pokud graf nemá nějakou speciální strukturu používají se aproximativní algoritmy.
Věta o čtyřech a pěti barvách. Problém: Jaké je chromatické číslo (duálního) rovinného grafu? Odpověd : 4 tzv. věta o čtyřech barvách, těžké, dlouho otevřený problém, dokázáno s použitím počítače v roce 1976 lehčí věta o pěti barvách: Theorem Každý rovinný graf G lze obarvit pěti barvami, tj. χ(g) 5
Eulerův vzorec Theorem (Eulerův vzorec) Pro rovinný graf s S stěnami platí: V E + S = 2. Důkaz: G neobsahuje kružnici strom S = 1, platí. G obsahuje kružnici. Odeberem z ní hranu E 1 a S 1 přetnutím kružnice muslo dojít ke spojení nějakých dvou stěn. Vztah zachován. Opakujeme. Nebo to chápeme jako matematickou indukci podle počtu hran.
Příprava munice na χ(g) 5 Lemma Pro rovinný graf G = (V, E) s alespoň 3 vrcholy platí E 3 V 6. Důkaz: 1. Přidáváme hrany dokud to jde (maximální rovinný graf). 2. Výsledný graf (V, E ) má pouze trojúhelníkové stěny 3 S = 2 E. 3. Eulerův vztah dává 3 E = 3 V 6 + 2 E E E = 3 V 6. Důsledek: V rovinném grafu existuje vrchol stupně nejvýše 5. (Jinak E 3 V E + 6, spor.) Kontrakce hrany e grafu G: vznikne graf G.e s vrcholy hrany e spojenými v jeden. Pokud je G rovinný tak kontrahovaný G.e bude vždy také rovinný.
Důkaz věty o pěti barvách. Theorem K obarvení rovinného grafu stačí 5 barev. (χ(g) 5) Důkaz: Pokud je V 5 jsme hotovi, jinak snižujeme počet vrcholů. Pokud je v grafu vrchol stupně d(v) < 5: obarvit G \ v a pak obarvit v jinak než sousedy. Jinak je v grafu vrchol v stupně 5 (lemma). Některé dva jeho sousedy x a y nespojuje hrana protože K 5 není rovinný graf. Kontrahujeme hrany (x, v) a (y, v) do vrcholu w. Výsledný graf obarvíme. Obarvení b přeneseme do původního grafu. Obarvíme odebrané vrcholy x, y, v : b(x) = b(y) = b (w) a b(v) = {1, 2, 3, 4, 5} \ {b(x), b(t), b(u), b(z)}, t, u, z jsou ostatní sousedi v Důkaz dává návod k rekurzivnímu algoritmu...
Algoritmus barvení roviného grafu - 5 barev I Uložení grafu: Pole uzlů. Každý uzel má kruhový spojový seznam svých sousedů. Struktury: zásobník S 4 uzlu d(v) 4, zásobník S 5 uzlů d(v) = 5, zásobník S r provedených redukcí 1) Redukce grafu: Projdi všechny vrcholy, naplň zásobníky S 4, S 5 ; while V G > 1 do while v = pop(s 4 ) do if v V G then odstraň v a jeho hrany z G; případně přidej sousedy {s i } na S 4 nebo S 5 ; přidej (v, s 1,... ) na S r while v = pop(s 5 )) do if v V G then najdi sousedy x, y tak, že (x, y) / E G ; kontrahuj hrany (v, x) a (v, y) pro výsledný vrchol w použij v; případně přidej v = w a zbylé sousedy {t, u, z} na S 4 nebo S 5 ; přidej (v, x, y, t, u, z) na S r ;
Algoritmus barvení roviného grafu - 5 barev II 2) Obarvení zbylému vrcholu v přiřad barvu b(v) = 1 while záznam = pop(s r ) do if velikost zázamu 6 then záznam (v, x, y, t, u, z); b(x) = b(v), b(y) = b(v); b(v) jiná než b(x), b(t), b(u), b(z); else záznam (v, x, y, z, u) // nebo kratší b(v) jiná než b(x), b(y), b(z), b(u)
- reálné problémy Skladování nebezpečných látek. Některé dvojice látek nemějí být skladovány v jedné místnosti. Kolik minimálně potřebujeme místností? Podávání léků. Některé léky nesmějí být podávány najednou. Minimalizovat počet skupin léků, které se najednou brát mohou. Plánování procesů. Některé dvojice úloh nemohou běžet současně, protože potřebují stejný prostředek. Minimalozovat počet skupin současně běžích procesů. Rozvrh. Předměty p 1,... p l ; kroužky s 1,... s m ; učitelé u 1,... u n ; Rozvrh dán trojcemi (p i, s j, u k ). Minimální počet hodin pro odučení rozvrhu. alokace registrů sudoku
Alokace registrů Alokace registrů. Vrcholy = proměnné, hrana (u, v) pokud se lifetime proměnných u, v překrývá, barvy = registry
Sudoku Sudoku.
Hladové barvení Aproximativní algoritmus. for v V do přiřad v minimlní barvu b(v) nevyskytující se u jeho sousedů Jak volit pořadí vrcholů v cyklu: Náhodně. Uspořádat sestupně podle stupně vrcholu. Stupeň nasycení deg s (v) vrcholu v je dosavadní počet barev jeho sousedů. Desaturační heuristika (Brèlaz) hledá v každém kroku cyklu vrchol s maximálním nasycením. Existuje backtracking verze algoritmu, která najde optimální χ(g).
Vliv pořadí vrcholů Pořadí vrcholů (heuristika) má zásadní vliv na kvalitu obarvení (zda použitá počet barv je bĺızký χ(g)).
Algoritmus přes kontrakce I Motivační věta: Theorem χ(g) = min{χ(g/(x, y), χ(g + (x, y)} kde (x, y) jsou dva nesousedící vrcholy. G/(x, y) je kontrekce vrcholů x a y, G + (x, y) je přidání hrany (x, y) Důkaz: Chromatické číslo je minimum počtu barev b přes všechna obarvení b: χ(g) = min{min{ b : b(x) = b(y)}, min{ b : b(x) b(y)} což je rovno tvrzení věty.
Algoritmus přes kontrakce II Algoritmus hledá nespojené vrcholy a aplikuje pouze kontrakce. while G není úplný do najdi nespojenou dvojici (x, y); proved kontrakci x a y; každý vrchol redukovaného úplného grafu obarvi jednou barvou; zpětně rozpojuj kontrahované vrcholy a davej jim stejné barvy; heurisitka: Voĺım dvojici s maximálním počtem společných sousedů, tj. snažím se mít co nejřidčí graf. poznámka: Pokud vezmu pevné x a za y beru všechny nesousední vrcholy, najdu nezávislou množinu s vrcholem x a tím následující algoritmus.
Nezávislé množiny Nezávislá množina je množina vrcholů, kde žádné dva nejsou spojeny hranou. Barvení jinak: Najít rozdělení vrcholů do minimálního počtu nezávislých množin. (nebezpečné látky, léky) Algoritmus se strategíı hledat nezávislé množiny postupně. for k=1,... do M = ; Y =všechny neobarvené vrcholy; while Y do zvol v vrchol z Y ; přidej v do M; odstraň z Y sousedy v; obarvi vrcholy v M barvou k;
Volba vrcholů při konstrukci nezávislé množiny 1. náhodně 2. vzestupně podle stupňů vrcholů (vrcholy s malým stupněm zmenšují nejméně množinu Y ) 3. vrchol s minimálním stupněm na indukovaném podgrafu G Y s vrcholy z množiny Y