we hebben geschreven over efficiënte algoritmen om complexe problemen op te lossen, zoals kortste pad, Euler grafiek, minimale overspanning boom, enz. Dat waren allemaal succesverhalen van algoritmeontwerpers. In dit artikel worden failure stories of computer science besproken.
kunnen alle computationele problemen door een computer worden opgelost? Er zijn computationele problemen die niet kunnen worden opgelost door algoritmen, zelfs met onbeperkte tijd. Bijvoorbeeld Turing stoppen probleem (gegeven een programma en een input, of het programma uiteindelijk zal stoppen wanneer uitgevoerd met die input, of zal voor altijd draaien). Alan Turing bewees dat een algemeen algoritme om het stoppen op te lossen voor alle mogelijke programma-invoerparen niet kan bestaan. Een belangrijk onderdeel van het bewijs is dat Turing machine werd gebruikt als een wiskundige definitie van een computer en programma (Source stoping Problem).
Status van NP Complete problems is een ander foutverhaal, NP complete problems zijn problemen waarvan de status onbekend is. Er is nog geen polynomiaal tijdalgoritme ontdekt voor een NP compleet probleem, noch is iemand nog in staat geweest om te bewijzen dat er geen polynomiaal-tijdalgoritme bestaat voor een van hen. Het interessante deel is, als een van de NP complete problemen kunnen worden opgelost in polynoom tijd, dan kunnen ze allemaal worden opgelost.
Wat zijn NP, P, NP-complete en NP-harde problemen?
P is een verzameling van problemen die opgelost kunnen worden door een deterministische Turing machine in polynomiale tijd.
NP is een verzameling beslisproblemen die kunnen worden opgelost door een niet-deterministische Turingmachine in polynomiale tijd. P is subset van NP (elk probleem dat kan worden opgelost door deterministische machine in polynomiale tijd kan ook worden opgelost door niet-deterministische machine in polynomiale tijd).informeel is NP een verzameling beslisproblemen die opgelost kunnen worden door een polynomiale tijd via een “Lucky Algorithm”, een magisch algoritme dat altijd een juiste gok maakt tussen de gegeven set keuzes (bron Ref 1).
NP-complete problemen zijn de moeilijkste problemen in NP set. Een beslissingsprobleem L is NP-voltooid als:
1) L IS in NP (elke gegeven oplossing voor NP-complete problemen kan snel worden geverifieerd, maar er is geen efficiënte bekende oplossing).
2) elk probleem in NP is reduceerbaar tot L in polynoomtijd (reductie wordt hieronder gedefinieerd).
een probleem is NP-Hard als het eigenschap 2 volgt die hierboven is vermeld, hoeft niet Eigenschap 1 te volgen. Daarom is NP-Complete set ook een subset van NP-Hard set.
besluit vs optimalisatie problemen
NP-volledigheid is van toepassing op het gebied van beslissingsproblemen. Het is zo opgezet omdat het gemakkelijker is om de moeilijkheidsgraad van beslissingsproblemen te vergelijken dan die van optimalisatieproblemen. In werkelijkheid, echter, het kunnen oplossen van een beslissingsprobleem in polynoom tijd zal ons vaak toelaten om het overeenkomstige optimalisatieprobleem in polynoom tijd (met behulp van een polynoom aantal oproepen aan de besluitvorming probleem). Het bespreken van de moeilijkheid van beslissingsproblemen is dus vaak echt gelijk aan het bespreken van de moeilijkheid van optimalisatieproblemen. (Bron Ref. 2).
bijvoorbeeld, overweeg het Vertex cover probleem (gegeven een grafiek, ontdek de minimale grootte vertex set die alle randen bedekt). Het is een optimalisatie probleem. Het overeenkomstige beslissingsprobleem is, gegeven de niet-gerichte grafiek G en k, is er een vertex dekking van grootte k?
Wat is reductie?laat L1 en L2 twee beslisproblemen zijn. Stel dat algoritme A2 L2 oplost. Dat wil zeggen, als y is een input voor L2 dan algoritme A2 zal antwoorden Ja of nee, afhankelijk van of y behoort tot L2 of niet.het idee is om een transformatie van L1 naar L2 te vinden zodat het algoritme A2 deel kan uitmaken van een algoritme A1 om L1 op te lossen.leerreductie in het algemeen is erg belangrijk. Bijvoorbeeld, als we bibliotheekfuncties hebben om een bepaald probleem op te lossen en als we een nieuw probleem kunnen reduceren tot een van de opgeloste problemen, besparen we veel tijd. Denk aan het voorbeeld van een probleem waarbij we minimale productpad moeten vinden in een gegeven gerichte grafiek waar product van pad vermenigvuldiging van gewichten van randen langs het pad is. Als we code hebben voor Dijkstra ’s algoritme om het kortste pad te vinden, kunnen we alle gewichten loggen en Dijkstra’ s algoritme gebruiken om het minimale productpad te vinden in plaats van een nieuwe code te schrijven voor dit nieuwe probleem.
Hoe kan ik bewijzen dat een gegeven probleem NP compleet is?
uit de definitie van NP-complete lijkt het onmogelijk om te bewijzen dat een probleem L NP-Complete is. Per definitie, het vereist ons om te laten zien dat elk probleem in NP is polynoom tijd reduceerbaar tot L. gelukkig is er een alternatieve manier om het te bewijzen. Het idee is om een bekend NP-compleet probleem te nemen en het te reduceren tot L. Als een polynomiale tijdreductie mogelijk is, kunnen we bewijzen dat L NP-compleet is door de transitie van reductie (als een NP-compleet probleem in de polynomiale tijd reduceerbaar is tot L, dan zijn alle problemen in de polynomiale tijd reduceerbaar tot L).
Wat was het eerste probleem als NP-compleet?
er moet een eerste NP-compleet probleem zijn dat per definitie van NP-Complete problemen is bewezen. SAT (Boolean satisfiability problem) is het eerste NP-Complete probleem bewezen door Cook (zie CLRS boek voor bewijs).
Het is altijd nuttig om te weten over NP-volledigheid, zelfs voor ingenieurs. Stel dat u wordt gevraagd om een efficiënt algoritme te schrijven om een uiterst belangrijk probleem voor uw bedrijf op te lossen. Na veel denken, je kunt alleen komen exponentiële tijd aanpak die onpraktisch is. Als je niet weet over NP-volledigheid, kan je alleen maar zeggen dat ik niet kon komen met een efficiënt algoritme. Als u weet over NP-volledigheid en bewijzen dat het probleem als NP-compleet, kunt u trots zeggen dat de polynoom tijd oplossing waarschijnlijk niet bestaat. Als er een polynomiale tijdoplossing mogelijk is, dan lost die oplossing een groot probleem van de informatica op dat veel wetenschappers al jaren proberen.
We zullen binnenkort meer NP-Complete problemen bespreken en hun bewijs voor NP-volledigheid.