450 likes | 596 Views
Třída P (PTIME). DEF: P je třída všech jazyků, které jsou rozhodnutelné deterministickým Turingovým strojem v polynomiálním čase . Neboli: Třída P je velmi významná v teorii složitosti, protože:
E N D
Třída P (PTIME) • DEF:P je třída všech jazyků, které jsou rozhodnutelné deterministickým Turingovým strojem v polynomiálním čase. Neboli: • Třída P je velmi významná v teorii složitosti, protože: 1. Je nezávislá na zvoleném výpočetním modelu (za podmínky, že model je polynomiálně ekvivalentní deterministickému Turingovu stroji) 2. V podstatě odpovídá třídě úloh, které jsou realisticky řešitelné na počítači. Tedy: PTIME je robustní (ad 1) a má značný praktický význam (ad 2).
Třída NP (NPTIME) • U mnoha – a bohužel i velmi praktických – problémů ale neznáme algoritmus, který by pracoval v polynomiálně omezeném čase. • Jde například o problém barvení grafu, hledání okružní cesty, úlohy celočíselného programování, celou řadu dalších optimalizačních, rozvrhovacích a plánovacích úloh, … • I přes velké úsilí nebylo dosaženo žádného pozitivního výsledku. • Je dokonce možné (a většina odborníků je dnes toho názoru), že žádný takový algoritmus ani neexistuje.
Příklad1 • Příklad1: Existuje v zadaném orientovaném grafu G Hamiltonova cesta (prochází každým vrcholem právě jednou) spojující dva zadané vrcholy? HPATH={G,s,t| G je orient. graf s Hamilt. cestou mezi vrcholy s a t}.
Příklad1 • Řešení můžeme hledat prozkoumáním všech možností (nebo naopak dokázat, že Hamiltonova cesta neexistuje), ale příslušný algoritmus má exponenciální složitost. • Neznáme žádný algoritmus řešící tento problém v polynomiálně omezeném čase.
Příklad1 • Pokud nám ale někdo řešení poskytne (ať už jej získal jakkoliv – uhodnutím, použitím heuristiky, nebo použitím algoritmu prohledávajícího všechny možnosti), můžeme se snadno přesvědčit, že řešení existuje a je správné. • Ověření správnosti řešení (verifikovatelnost) je proveditelné v polynomiálně omezeném čase.
Příklad2 • Příklad2: Rozmístěte n dam na šachovnici o rozměru nxn tak, aby se vzájemně neohrožovaly. Na standardní šachovnici o rozměru 8x8 existuje celkem 96 různých řešení.
Příklad2 • Řešení můžeme hledat prozkoumáním všech možností (backtracking), ale příslušný algoritmus má exponenciální složitost. • Neznáme žádný úplný algoritmus řešící tento problém v polynomiálně omezeném čase. • Pokud nám ale někdo řešení poskytne, můžeme se snadno přesvědčit, jestli je správné. • Ověření správnosti řešení (verifikovatelnost) je proveditelné v polynomiálně omezeném čase.
Verifikovatelnost řešení – třída NP • DEF:Třída NP (NPTIME) je třída jazyků, pro které existuje verifikační algoritmus pracující v polynomiálně omezeném čase. • Název NP (resp. NPTIME) je odvozen od jiné definice stejné třídy problémů, která je ale založena na nedeterministických Turingových strojích. • Věta: Jazyk patří do třídy NP (NPTIME) právě tehdy, když je rozhodnutelný v polynomiálně omezeném čase nějakým nedeterministickým Turingovým strojem.
Třída NP • Důkaz: => Jestliže existuje verifikační algoritmus pracující v polynomiálně omezeném čase nk, potom lze nedeterministicky zkoušet všechny řetězce s délkou nejvýše nk a na základě výpočtu odpovídajícím způsobem rozhodnout. <=Jestliže je L rozhodnutelný v polynomiálně omezeném čase nějakým NTS, potom existuje posloupnost „rozhodnutí“ o délce nejvýše nk, kterou můžeme použít pro odpovídající verifikační algoritmus pracující v polynomiálně omezeném čase.
Třída NP (NPTIME) • DEF:NP je třída všech jazyků, které jsou rozhodnutelné nedeterministickým Turingovým strojem v polynomiálním čase. Neboli: • Jistě platí PTIME NPTIME ale nevíme, zda PTIME NPTIME
Problémy z třídy NP • Příklad1: Existence k-kliky v neorientovaném grafu G (klika o velikosti k je úplný graf s k vrcholy) je problém patřící do třídy NP. CLIQUE={G,k| G je neorientovaný graf obsahující kliku o velikosti k}
Problémy z třídy NP • Daný graf obsahuje kliku o velikosti 5.
Problémy z třídy NP • Příklad2: Je možné množinu x1,x2,…, xn-1, xn, rozdělit na dvě podmnožiny tak, aby součet obou podmnožinbyl stejný (spravedlivé rozdělení kořisti). • Jde o speciální případ tzv. problému součtu podmnožiny SUBSET-SUM={S,k| S={x1,x2,…,xn} a {y1,y2,…,ym}S a yi=k } Stačí položit k=½xi • Pokud nám někdo ukáže řešení, jistě jej umíme verifikovat v polynomiálně omezeném čase.
Doplňkové problémy • Doplňkové problémy k problémům CLIQUE a SUBSET-SUM nepatří do třídy NP, protože je těžší ověřit, že něco neexistuje než ověřit, že příslušná vlastnost platí nebo existuje. • Pro problémy tohoto typu definujeme třídu coNP (coNPTIME – doplňkové,komplementární k NP) • Nevíme ale jistě, zda NP coNP
Vztah P a NP • Zatímco problémy z třídy P jsou „rychle“ rozhodnutelné, problémy z NP jsou pouze „rychle“ verifikovatelné. • Nevíme zda P=NP nebo P NP a jedná se ojednu z největších nevyřešených otázek teoretické informatiky (odměna 1 mil. USD za vyřešení) • ??? • nebo NP P=NP P
NP-úplnost • Důležitý výsledek přinesl Stephen Cook v roce 1970, který zjistil, že obtížnost některých problémů z třídy NP je stejná v tom smyslu, že nalezení „rychlého“ algoritmu pro řešení kterékoliv z těchto úloh, by znamenalo nalezení „rychlého“ algoritmu pro všechny úlohy z této specifické třídy. • Myšlenka: Pokud bychom uměli „rychle“transformovat jednu úlohu na úlohu jinou, kterou lze „rychle“ vyřešit, bylo by možné „rychle“ vyřešit i úlohu první. Původní úloha Úloha nová Řešení
NP-úplnost • DEF: Mějme problém P1: ** a problém P2: **. Polynomiálním převodem (redukcí) P1 na P2 rozumíme algoritmus realizující zobrazení R: ** takové, že pro všechny vstupy w* platí P1(w)=P2(R(w)). • Jinými slovy – pokud umíme efektivně řešit problém P2, potom problém P1 můžeme efektivně vyřešit tím,že jej („rychle“) převedeme na P2. • I naopak – pokud lze nějaký známý těžký problém převést v polynomiálně omezeném čase na náš problém, je zřejmé, že jsme získali dostatečné alibi (k řešení problému jsme se sice nijak nepřiblížili, ale víme, že to bude těžké).
NP-úplnost • DEF: Jazyk L je NP-úplný (NP-complete), pokud: 1. L náleží do třídy NP 2. Každé ANP je v polynomiálně omezeném čase převoditelné na L. • Věta: Jestliže L je NP-úplný a současně LP, potom P=NP. • Důkaz: zřetelně přímo z výše uvedené definice • Důsledek:Řešení kteréhokoliv problému z třídy NP-úplných problémů v polynomiálně omezeném čase, by znamenalo nalezení „rychlého“ algoritmu pro řešení všech.
NP-úplnost • Problém splnitelnosti logických formulí (SAT=satisfiability problem): je dána logická formule F(x1,.., xn) složená z logických proměnných x1,.., xn a logických operátorů AND, OR a NOT. Cílem je rozhodnout, zda je možné najít takové pravdivostní hodnoty logických proměnných x1,.., xn, pro které je formule F(x1,.., xn) splněna (pravdivá). • Příklad: F(x1,x2,x3)=(x1x2x3)(x1x3)(x1 x2x3) • Řešení: například x1=1, x2= 1, x3=0
NP-úplnost • Věta (Cook):Problém splnitelnosti logických formulí (SAT=satisfiability problem) je NP-úplný. • Důkaz: 1. dokázat, že SAT je NP je snadné 2. obtížnější je dokázat redukovatelnost libovolného ANP v polynomiálně omezeném čase na SAT. Je nutné k libovolnému slovu w konstruovat logickou formuli tak, že je splnitelná, když w je přijato a naopak. ANO w SAT Převodník NE
NP-úplnost • Důkaz NP-úplnosti problému splnitelnosti logických formulí byl průlomem v teorii složitosti: 1. Pokud bychom uměli „rychle“ řešit SAT, máme rychlý algoritmus pro všechny problémy z NP Libovolná úloha z NP SAT Řešení Polynomiální („rychlý“) převod na SAT ??? „rychlý“ ??? algoritmus pro řešení SAT Složením vznikne polynomiální („rychlý“) algoritmus pro libovolnou úlohu z NP
NP-úplnost • Důkaz NP-úplnosti problému splnitelnosti logických formulí byl průlomem v teorii složitosti: 2. Pokud polynomiálně převedeme SAT na jiný problém z NP, je tento problém automaticky také NP-úplný (je-li každý problém z NP polynomiálně redukovatelný na SAT a SAT je polynomiálně redukovatelný na LNP, potom nutně L je také NP-úplný) • Důsledkem toho bylo dokázáno, že mnoho dalších problémů je NP-úplných Libovolná úloha z NP SAT Další NP-úplný problém
NP-úplné problémy Příklady NP-úplných problémů: • Existence k-kliky v neorientovaném grafu G • Problém součtu podmnožiny, problém spravedlivého rozdělení kořisti • Problém obchodního cestujícího • Problém barevného čísla grafu, nejdelší cesta v grafu • Problém batohu • Celočíselné programování • Různé rozvrhovací, plánovací a další optimalizační úlohy
Otevřená otázka Pravděpodobně platí: Ale zatím nikdo nevyloučil ani možnost: NP P NPC P=NP=NPC
Problémy z NP Praktický důsledek: • Protože neznáme dostatečně rychlé algoritmy pro řešení problémů z NP a řešení těchto 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á • Musíme se spokojit s určitou heuristikou, která nám v rozumném čase umožní nalézt přijatelné řešení
Heuristiky pro SAT Problém splnitelnosti logických formulí: • Docela dobrých výsledků lze dosáhnout použitím algoritmu založeném na lokálním prohledávání. Algoritmus označovaný jako GSAT začíná s náhodně vygenerovaným pravdivostním ohodnocení proměnných. Potom provádí lokální prohledávání tím způsobem, že postupně mění pravdivostní ohodnocení každé z proměnných a přitom si vede záznamy o tom, kolik klauzulí zůstalo po každé z těchto změn nesplněných. • Po vyzkoušení změny pravdivostní hodnoty u každé z n proměnných je původní řešení nahrazeno řešením novým, které má z právě vygenerovaných řešení nejmenší počet nesplněných klauzulí.
Heuristiky pro SAT Problém splnitelnosti logických formulí: • Tento iterativní proces se opakuje tak dlouho, dokud není nalezeno takové pravdivostní ohodnocení proměnných x1,.., xn, pro které je formule F(x1,.., xn) splněna, nebo dokud se nedosáhne maximálně povoleného a předem určeného počtu iterací. • Jestliže se během daného počtu iterací řešení problému nepodaří nalézt, vygeneruje se náhodně nové počáteční řešení a celý algoritmus se znovu opakuje. Kvůli konečnosti algoritmu je samozřejmě i tento počet nových startů omezen vhodnou konstantou.
Heuristiky pro SAT Problém splnitelnosti logických formulí: • GSAT byl později mnohokrát upravován a vylepšován, přičemž dle experimentálních srovnání zřejmě nejlepších výsledků dosáhl J. Frank. • Jím navržený algoritmus, který je v literatuře označován jako WGSAT, zdokonaluje původní GSAT tak, že každé klauzuli je přiřazena jistá váha, která se zvětšuje, pokud daná klauzule zůstává nesplněná. • Často nesplněné klauzule tak postupně získávají větší váhu než klauzule, které jsou splnitelné snadněji, a každé řešení, které splňuje problematičtější klauzule, je díky jejich váze preferováno.
Příklad – plnění kontejnerů Problém určení minimálního počtu kontejnerů : (bin packing problem) • Úkolem je transportovat na určené místo množinu předmětů, které mají různou velikost, přičemž tyto předměty budou přepravovány v kontejnerech známé velikosti. • Řešení problému vyžaduje umístit všechny předměty do kontejnerů tak, abychom k této přepravě použili co nejmenší počet kontejnerů. 3 1 2
Příklad – plnění kontejnerů Předpokládejme existenci maximálně m kontejnerů se stejnou kapacitou C > 0 a nechť y[i] pro i=1,..,m jsou binární proměnné, které nabývají hodnoty y[i] = 0, pokud je i-tý kontejner použit pro přepravu zboží, a y[i] = 1 v ostatních případech. Současně předpokládejme množinu n objektů spolu s jejich velikostí vyjádřenou parametrem W[j] > 0 pro j=1,..,n. Dále zavedeme binární proměnné x[i,j] pro i=1,..,m a j=1,..,n takové, že x[i,j] = 1, právě když j-tý objekt je uložen v i-tém kontejneru a x[i,j] = 0 ve všech ostatních případech.
Příklad – plnění kontejnerů Cílem je nalézt nejmenší počet kontejnerů pro přepravu uvažovaného zboží, to jest maximalizovat funkci v rámci soustavy omezujících podmínek i=1,..,m j=1,..,n i=1,..,m i=1,..,m, j=1,..,n.
Heuristiky pro plnění kontejnerů Zřejmě nejjednodušší heuristika je založena na myšlence, že první předmět se vloží do prvního kontejneru a potom se vkládají postupně předměty s číslem 2 až n takovým způsobem, že kdykoliv se i-tý předmět nemůže vejít do právě plněného kontejneru, jeho plnění je uzavřeno, vezme se kontejner nový, do kterého se vloží i‑tý předmět a pokračuje se dále s předměty číslo i+1 až n. 1 2 3
Heuristiky pro plnění kontejnerů Právě popsaná heuristika bývá v anglické literatuře označována jako next-fit(NF). Je-li I je libovolná instance problému určení minimálního počtu kontejnerů a nechť OPT(I) je počet kontejnerů použitý v optimálním řešení instance I, potom lze dokázat, že počet kontejnerů, který bude použit v řešení získaném pomocí heuristiky NF je shora omezen na základě nerovnosti NF(I)2OPT(I), neboli nebude nikdy větší, než dvojnásobek optimálního počtu kontejnerů.
Heuristiky pro plnění kontejnerů Lepších výsledků lze dosáhnout použitím heuristiky first-fit(FF), kdy narozdíl od výše uvedeného postupu se jednotlivé kontejnery neuzavírají dokud nejsou umístěny všechny předměty. Při vkládání i-tého předmětu se proto postupně algoritmus pokouší umístit tento předmět do kteréhokoliv z již použitých kontejnerů a teprve pokud se ukáže, že to není možné, vezme se nový kontejner a uvažovaný předmět se do něho vloží. Lze dokázat, že počet kontejnerů, který bude použit v řešení získaném pomocí heuristiky FF je shora omezen nerovností
Heuristiky pro plnění kontejnerů Příkladem velice úspěšné heuristiky je takzvaný first-fit descending (FFD) algoritmus, který je postaven na myšlence, že větší předměty je obtížné umístit do již částečně obsazených kontejnerů, a proto je rozumné se jimi zabývat co nejdříve. K tomu stačí uspořádat předměty sestupně dle jejich velikosti tak, že platí W[1] W[2] .... W[n]. Použije-li se k umístění takto uspořádaných předmětů výše popsaná heuristika first‑fit (FF), potom vznikne algoritmus, u kterého je možné garantovat, že počet kontejnerů, který bude použit v řešení získaném pomocí tohoto algoritmu, je shora omezen nerovností
Příklad – problém N dam Velmi úspěšné (i pro N v řádu milionů) jsou například různé stochastické algoritmy, které v náhodně vygenerovaném řešení provádějí výměny dam tak, aby příslušná výměna snížila počet konfliktů na šachovnici. Pokud není možné žádnou další výměnou odstranit zbývající konflikty, začne se znovu od začátku s náhodně vygenerovaným řešením. Účinná heuristika pro snížení počtu konfliktů v náhodně vygenerovaném řešení je založena na „odkládání“ řádků s dámami, které způsobují konflikt.
Příklad – problém obchodního cestujícího Hladový algoritmus (greedy algorithm)– je založen na myšlence nalezení nejbližšího souseda k právě navštívenému městu. Algoritmus začne s náhodně vybraným městem x, najde k tomuto městu x nejbližší dosud nenavštívené město y a odtud pokračuje stejným způsobem dále do té doby, dokud nenastane situace, že množina nenavštívených měst je prázdná. Protože v tuto chvíli byla nutně navštívena všechna města právě jedenkrát, bylo nalezeno přípustné řešení této úlohy.
Příklad – problém obchodního cestujícího Takto získané řešení se však může velmi podstatně lišit od řešení optimálního, protože celkem snadno nalezneme příklady, kdy za zdánlivě levné úseky cesty zvolené na začátku práce hladového algoritmu je zaplacena až příliš vysoká cena v jeho dalším průběhu. Začneme ve městě A. Hladový algoritmus: A‑B‑C‑D‑A : 2+3+17+5 = 27 Optimální řešení: A‑C‑B‑D‑A : 4+3+7+5=19
Příklad – problém obchodního cestujícího Další přístupy k řešení problému obchodního cestujícího: • Lin-Kernighanův algoritmus - princip je založený na tzv. k-opt výměnách Příklad 2-opt výměny • Genetické algoritmy • Algoritmy na bázi mravenčích kolonií
Problémy z NP • Praktický důsledek existence úloh patřících do třídy NP může být i pozitivní: • Příklad: Problém, zda zadané přirozené číslo je složené patří do třídy NP. • Složené číslo je součinem dvou přirozených čísel větších než jedna. COMPOSITES={x| x=pq, kde p,q N a současně p,q>1} • Verifikační algoritmus: stačí znát jednoho z dělitelů daného čísla.
Problémy z NP • POZOR: Přestože byl nalezen algoritmus, který pro dané přirozené číslo rozhodne, zda je prvočíslem v polynomiálně omezeném čase, tento algoritmus v případě složeného čísla neumí najít jeho dělitele (tento algoritmus neumí dané číslo faktorizovat). • Pro problém faktorizace není znám algoritmus pracující v polynomiálně omezeném čase. • Algoritmus s exponenciální složitostí je pro „dostatečně“ velké číslo prakticky nepoužitelný. • Na tomto faktu je založena většina moderních šifrovacích algoritmů.
Šifrovací algoritmus RSA • RSA (R. Rivest, A. Shamir, L. Adlemann) • Vygenerujeme dvě dostatečně velká prvočísla p a q(každé má délku 1024 bitů) a spočteme n=pq. • Číslo n je parametrem šifrovacího systému (šifrovací modul) a zveřejňuje se spolu s veřejným klíčem. • Spočítá se Eulerova funkce (n)= (p-1)(q-1) udává počet přirozených čísel menších než n, která jsou nesoudělná s číslem n (protože n je součinem dvou prvočísel, je takových čísel právě (p-1)(q-1))
Šifrovací algoritmus RSA • Zvolíme privátní klíč e z množiny {1,..,n}nesoudělný s číslem (p-1)(q-1) • Kprivátnímu klíči e vypočteme Eulerovým algoritmem veřejný klíč d podle vztahu de mod (p-1)(q-1)= de mod (n)= 1 • Tato rovnice má jediné řešení d • Zakódování zprávy z se provede dle vztahu ze mod n =s • Dekódování zprávy se provede dle vztahu sd mod n =z • Korektnost šifry je dána vztahem: z=sd mod n = zde mod n = zk(n)+1 mod n =1z mod n=z