NP-úplné problémy v grafech
Třídy problémů: Třída P problémů: množina problémů řešitelných v polynomiálním čase (existuje pro ně polynomiální algoritmus) Třída NP problémů: někdo navrhne řešení problémů (tzv. nápověda) a my umíme v polynomiálním čase rozhodnout, zda tento návrh skutečně řešením je (existuje polynomiální verifikační algoritmus ) NP-těžké problémy: je na ně převoditelný každý problém z NP NP-úplný problém: NP-těžké a jsou z NP NP-úplné problémy: existuje polynomiální algoritmus???
Struktura třídy NP Pro NP existuje polynomiální algoritmus → NP=P Pro NP neexistuje polynomiální algoritmus → NP-úplné ∩ P=Ø NP-úplné+NP≠P P=NP=NP-úlné NP P NP-úplné
Porovnání složitosti algoritmů: 1 2 5 25 400000 32 120 10 100 108 1024 106 15 225 109 32000 1012 20 400 1010 1018 30 900 1011 1032 50 2500 1013 1015 1064 10000 1016 1030 10157
Při 1 000 000 000 operací za s: N N2 N8 2N N! 1 <1s 5 10 15 1 s 15 min 20 10 s 31 let 30 2 min 100 * Věk vesmíru 50 3 h 11 dní 100 3 měs Věk vesmíru
P & NP-úplný problém Problém 1[P]: Existuje okružní cesta, na které projedeme každou silnici právě jednou? Tzn. Rozhodnout, zda graf G= (V, H) existuje uzavřený eulerovský tah Řešení: obarvovaní stran Pokud řešení existuje, tak ho umíme najít v čase O(H)
Existuje okružní cesta, na které projedeme každé město právě jednou? Problém 2 [NP- úplný]: Existuje okružní cesta, na které projedeme každé město právě jednou? Tzn. Najít Hamiltonovskou kružnici permutace vrcholů v1, v2, ..., v│V│tvořících hamiltonovskou kružnici ověření: 1. jde o permutaci vrcholů grafu? 2. je (vi, vi+1) ∈ H , i = 1,2, ..., │V│-1 a (v│V│, v1) ∈ H ?
Možný algoritmus: Náročnost: graf zakódován maticí sousednosti algoritmus - ověření všech permutací vrcholů Náročnost: počet prvků matice: n Počet vrcholů: √n Počet permutaci vrcholů: √n!
Řešení NP-úplných problémů Metodou úplného prohledávání všech možností je v praxi již pro relativně malý rozměr úlohy nezvládnutelné Musíme hledat řešení částečná či přibližná – aproximační algoritmy
Aproximační algoritmy: polynomiální algoritmus: nalezení „dostatečné dobrého“ (téměř optimálního) řešení Problémy: nalezení řešení negarantuje (nepoužitelnost v praxi) funguje v praxi, ale chybí teoretické zdůvodnění Rozdíl: relativní chybu lze zmenšit libovolně X omezená zdola
Příklady NP-úplných problémů: Hamiltonova cesta, Hamiltonova kružnice Barvení grafů: obarvit vrcholy k barvami tak, aby vrcholy stejné barvy nebyly nikdy spojeny hranou k-bipartitní graf: množina k vrcholů taková, že žádné dva nejsou propojeny hranou Existence k-kliky (úplný graf s k-vrcholy)
Barvení grafů: Definice: obarvení grafu označujeme takové obarvení uzlů grafů takové, že žádné dva sousední uzly nemají stejnou barvu Otázka: nejmenší počet barev pro obarvení uzlů Je NP-úplný problém? …graf o N uzlech, q barev → qN
Barvení grafů:problém 4 barev
Barvení grafů: heuristika (sekvenční barvení) 1.[Inicializace] K:=0; b=0 while 2. [Test ukončení] existuje neobarvený vrchol grafu go begin 3a. [Volba vrcholu] zvolíme dosud neobarvený vrchol v0 3b. [Určení barvy] Najdeme minimální přirozené číslo b tak, že neexistuje vrchol spojený s v0 a již obarvený barvou b 3c. [Obarvení v0] V0 obarvíme barvou b if b>K then K:=b end;
Jak zvolit v0? Vrcholy uspořádáme do nerostoucí posloupnosti podle velikosti jejich stupňů, za v0 volíme první neobarvený vrchol Pro každý vrchol v určíme počet barev D(v), které byly použity k obarvení jeho již obarvených sousedů. Volíme za v0 neobarvený vrchol, který má největší hodnotu D(v). Pokud je jich více, volíme ten, který má nejvíce neobarvených sousedů.
1
1 2
3 1 2
3 1 4 2
1 3 4 2
1 3 2 4