hatékony algoritmusokról írtunk komplex problémák megoldására, például legrövidebb út, Euler gráf, minimális átívelő fa stb. Ezek mind az algoritmustervezők sikertörténetei voltak. Ebben a bejegyzésben a számítástechnika kudarctörténeteit tárgyalják.
minden számítási problémát meg lehet oldani egy számítógéppel? Vannak olyan számítási problémák, amelyeket algoritmusokkal még korlátlan idő alatt sem lehet megoldani. Például Turing megállási probléma (adott EGY program és egy bemenet, hogy a program végül megáll, ha fut a bemenet, vagy fut örökre). Alan Turing bebizonyította, hogy az összes lehetséges programbeviteli pár megállítási problémájának megoldására szolgáló általános algoritmus nem létezhet. A bizonyíték egyik kulcseleme, hogy a Turing gépet egy számítógép és program (Forrásmegszakítási probléma) matematikai definíciójaként használták.
állapota NP teljes problémák egy másik hiba történet, NP teljes problémák olyan problémák, amelyek állapota ismeretlen. Nem polinom idő algoritmus még nem fedezték fel semmilyen NP teljes probléma, sem még senki sem tudta bizonyítani, hogy nincs polinom-idő algoritmus létezik ezek közül bármelyik. Az érdekes rész az, hogy ha az NP egyik teljes problémája polinom időben megoldható, akkor mindegyik megoldható.
mik azok az NP, P, NP-complete és NP-Hard problémák?
p olyan problémák halmaza, amelyeket egy determinisztikus Turing-gép polinom időben oldhat meg.
az NP olyan döntési problémák halmaza, amelyeket egy nem determinisztikus Turing-gép polinom időben megoldhat. P az NP részhalmaza (minden olyan probléma, amely determinisztikus géppel megoldható polinom időben, nem determinisztikus géppel is megoldható polinom időben).
informálisan az NP olyan döntési problémák halmaza, amelyeket polinomidővel lehet megoldani egy “szerencsés algoritmus” segítségével, egy varázslatos algoritmus, amely mindig helyes találgatást tesz az adott választási készlet között (forrás Ref 1).
NP-a teljes problémák a legnehezebb problémák az NP készletben. A döntés probléma L NP-teljes, ha:
1) L NP-ben van (bármely adott megoldás NP-re-a teljes problémák gyorsan ellenőrizhetők,de nincs hatékony ismert megoldás).
2) minden probléma NP redukálható l polinom idő (redukció az alábbiakban meghatározott).
a probléma NP-nehéz, ha a fenti 2 tulajdonságot követi, nem kell követnie az 1 tulajdonságot. Ezért NP-Complete set is egy részhalmaza NP-Hard set.
döntés vs optimalizálási problémák
NP-a teljesség a döntési problémák birodalmára vonatkozik. Azért hozták létre így, mert könnyebb összehasonlítani a döntési problémák nehézségét, mint az optimalizálási problémákat. A valóságban azonban, hogy képes megoldani a döntést probléma polinom időben gyakran lehetővé teszi számunkra, hogy megoldja a megfelelő optimalizálási probléma polinom idő (egy polinomiális hívások száma a döntés probléma). Tehát a döntési problémák nehézségének megvitatása gyakran valóban egyenértékű az optimalizálási problémák nehézségének megvitatásával. (Forrás Ref 2).
például, fontolja meg a csúcs fedél probléma (adott egy grafikon, megtudja, a minimális méretű csúcskészlet, amely magában foglalja az összes szélét). Ez egy optimalizálási probléma. A megfelelő döntési probléma az, hogy a G és k nem irányított grafikon alapján létezik-e egy K méretű csúcsfedél?
mi a csökkentés?
L1 és L2 legyen két döntési probléma. Tegyük fel, hogy az A2 algoritmus megoldja az L2-t. Vagyis, ha y bemenet az L2-hez, akkor az A2 algoritmus igennel vagy nemmel válaszol, attól függően, hogy y az L2-hez tartozik-e vagy sem.
Az ötlet az, hogy transzformációt találjunk L1-ről L2-re, hogy az A2 algoritmus az A1 algoritmus része legyen az L1 megoldására.
A Tanulás csökkentése általában nagyon fontos. Például, ha van könyvtári funkciónk bizonyos problémák megoldására, és ha egy új problémát az egyik megoldott problémára tudunk csökkenteni, sok időt takarítunk meg. Tekintsük egy olyan probléma példáját, ahol meg kell találnunk a minimális termékútvonalat egy adott irányított grafikonban, ahol az útvonal terméke az élek súlyainak szorzata az út mentén. Ha van Kód Dijkstra algoritmusa, hogy megtalálja legrövidebb utat, tudjuk venni napló minden súlyok és használja Dijkstra algoritmusa, hogy megtalálják a minimális termék elérési útja helyett írásban egy friss kódot az új probléma.
hogyan lehet bizonyítani, hogy egy adott probléma NP teljes?
az NP-complete definíciójából lehetetlennek tűnik bizonyítani, hogy az L probléma NP-teljes. Definíció szerint, megköveteli tőlünk, hogy azt mutatják, minden probléma NP polinom idő redukálható L. szerencsére, van egy másik módja annak, hogy bizonyítani. Az ötlet az, hogy egy ismert NP-teljes probléma, és csökkentse azt L. Ha lehetséges a polinom idő csökkentése, akkor bizonyíthatjuk, hogy L NP-teljes a redukció tranzitivitásával (ha egy NP-teljes probléma polinom időben l-re redukálható, akkor minden probléma polinom időben l-re redukálható).
mi volt az első probléma bizonyult NP-teljes?
kell lennie néhány első NP-teljes probléma bizonyítja meghatározása NP-teljes problémák. SAT (logikai elégedettség probléma) az első NP-teljes probléma bizonyult szakács (lásd CLRS könyv bizonyíték).
mindig hasznos tudni az NP-teljességről még a mérnökök számára is. Tegyük fel, hogy megkérjük, hogy írjon egy hatékony algoritmust a vállalat számára rendkívül fontos probléma megoldására. Sok gondolkodás után csak exponenciális idő megközelítés jöhet létre, amely nem praktikus. Ha nem tudsz az NP-teljességről, akkor csak azt mondhatod, hogy nem tudtam hatékony algoritmussal jönni. Ha ismeri az NP-teljességet, és bizonyítja, hogy a probléma NP-teljes, akkor büszkén mondhatjuk, hogy a polinom idő megoldás nem valószínű, hogy létezik. Ha lehetséges polinom időmegoldás, akkor ez a megoldás megoldja a számítástechnika nagy problémáját, amelyet sok tudós évek óta próbál.
hamarosan több NP-teljes problémát fogunk megvitatni, valamint az NP-teljesség igazolását.