Vi har skrevet om effektive algoritmer til at løse komplekse problemer, som korteste sti, Euler-graf, minimum spændende træ osv. Det var alle succeshistorier fra algoritmedesignere. I dette indlæg diskuteres fejlhistorier om datalogi.
kan alle beregningsproblemer løses af en computer? Der er beregningsproblemer, der ikke kan løses af algoritmer selv med ubegrænset tid. For eksempel Turing standsning problem (givet et program og et input, om programmet til sidst vil stoppe, når det køres med det input, eller vil køre for evigt). Alan Turing beviste, at generel algoritme til løsning af stopproblemet for alle mulige programinputpar ikke kan eksistere. En vigtig del af beviset er, Turing maskine blev brugt som en matematisk definition af en computer og et program (kilde standsning Problem).Status for NP komplette problemer er en anden fejlhistorie, NP komplette problemer er problemer, hvis status er ukendt. Ingen polynomisk tidsalgoritme er endnu blevet opdaget for noget NP komplet problem, og ingen har endnu været i stand til at bevise, at der ikke findes nogen polynomisk tidsalgoritme for nogen af dem. Den interessante del er, hvis nogen af de NP komplette problemer kan løses i polynomisk tid, så alle af dem kan løses.
Hvad er NP, P, NP-complete og NP-Hard problemer?
P er et sæt af problemer, der kan løses af en deterministisk Turing-maskine i polynomisk tid.
NP er et sæt beslutningsproblemer, der kan løses af en ikke-deterministisk Turing-maskine i polynomisk tid. P er delmængde af NP (ethvert problem, der kan løses ved deterministisk maskine i polynomisk tid, kan også løses ved ikke-deterministisk maskine i polynomisk tid).uformelt er NP sæt af beslutningsproblemer, som kan løses ved en polynomisk tid via en “heldig algoritme”, en magisk algoritme, der altid gør et rigtigt gæt blandt det givne sæt valg (kilde Ref 1).
NP-komplette problemer er de sværeste problemer i NP-sæt. Et beslutningsproblem L er NP-komplet, hvis:
1) L er i NP (enhver given løsning til NP-komplette problemer kan verificeres hurtigt, men der er ingen effektiv kendt løsning).
2) ethvert problem i NP kan reduceres til L i polynomisk tid (reduktion er defineret nedenfor).
et problem er NP-hårdt, hvis det følger ejendom 2 nævnt ovenfor, behøver ikke at følge Ejendom 1. Derfor er NP-komplet sæt også en delmængde af NP-hårdt sæt.
beslutning vs optimering problemer
NP-fuldstændighed gælder for realm af beslutningsproblemer. Det blev oprettet på denne måde, fordi det er lettere at sammenligne vanskeligheden ved beslutningsproblemer end optimeringsproblemer. I virkeligheden vil det at være i stand til at løse et beslutningsproblem i polynomisk tid ofte give os mulighed for at løse det tilsvarende optimeringsproblem i polynomisk tid (ved hjælp af et polynomisk antal opkald til beslutningsproblemet). Så at diskutere vanskeligheden ved beslutningsproblemer svarer ofte virkelig til at diskutere vanskeligheden ved optimeringsproblemer. (Kilde Ref 2).
for eksempel overveje toppunktdækningsproblemet (givet en graf, find ud af det mindste størrelse toppunktsæt, der dækker alle kanter). Det er et optimeringsproblem. Tilsvarende beslutningsproblem er, givet ikke-rettet graf G og k, er der et toppunktdæksel af størrelse k?
Hvad er reduktion?
Lad L1 og L2 være to beslutningsproblemer. Antag algoritme A2 løser L2. Det vil sige, hvis y er et input til L2, svarer algoritme A2 Ja eller nej afhængigt af om y tilhører L2 eller ej.
ideen er at finde en transformation fra L1 til L2, så algoritmen A2 kan være en del af en algoritme A1 for at løse L1.
læring reduktion generelt er meget vigtigt. For eksempel, hvis vi har biblioteksfunktioner til at løse et bestemt problem, og hvis vi kan reducere et nyt problem til et af de løste problemer, sparer vi meget tid. Overvej eksemplet på et problem, hvor vi skal finde minimum produktsti i en given rettet graf, hvor produkt af STI er multiplikation af vægte af kanter langs stien. Hvis vi har kode til Dijkstras algoritme til at finde den korteste sti, kan vi tage log over alle vægte og bruge Dijkstras algoritme til at finde den mindste produktsti i stedet for at skrive en ny kode til dette nye problem.
hvordan kan man bevise, at et givet problem er NP komplet?
fra definitionen af NP-complete synes det umuligt at bevise, at et problem L er NP-Complete. Per definition, det kræver, at vi viser, at ethvert problem i NP er polynomisk tid, der kan reduceres til L. Heldigvis, der er en alternativ måde at bevise det på. Ideen er at tage et kendt NP-komplet problem og reducere det til L. Hvis polynomisk tidsreduktion er mulig, kan vi bevise, at L er NP-komplet ved transitivitet af reduktion (hvis et NP-komplet problem kan reduceres til L i polynomisk tid, kan alle problemer reduceres til L i polynomisk tid).
Hvad var det første problem, der blev bevist som NP-komplet?
der skal være nogle første NP-komplet problem bevist per definition af NP-komplet problemer. SAT (Boolean satisfiability problem) er det første NP-komplette problem bevist af Cook (se CLRS bog til bevis).
det er altid nyttigt at vide om NP-fuldstændighed selv for ingeniører. Antag, at du bliver bedt om at skrive en effektiv algoritme til at løse et ekstremt vigtigt problem for din virksomhed. Efter en masse tænkning, kan du kun komme op eksponentiel tid tilgang, som er upraktisk. Hvis du ikke ved om NP-fuldstændighed, kan du kun sige, at jeg ikke kunne komme med en effektiv algoritme. Hvis du ved om NP-fuldstændighed og bevise, at problemet som NP-komplet, kan du stolt sige, at polynomisk tidsløsning sandsynligvis ikke eksisterer. Hvis der er en polynomisk tidsløsning mulig, løser denne løsning et stort problem inden for datalogi, som mange forskere har forsøgt i årevis.
Vi vil snart diskutere flere NP-komplette problemer og deres bevis for NP-fuldstændighed.