7.3 NP-komplette problemer
De navngitte NPC-problemene og beviset for at CIRCUIT-SAT er NP-komplett (kretsen simulerer en verifikator).
- Sjanger D — definisjon med egne ord, altså at du gir én presis setning som fanger hovedpoenget først, og sjanger G — reduksjon og NP-argument, altså at du oppgir hvilken vei reduksjonen går og hva den beviser, er begge til stede i 100 % (17 av de 17 settene i grunnlaget).
- Dette kapitlet har høyeste prioritet — dette må sitte.
Det du trenes på her, er én ting: å kunne skrive ned den formelle definisjonen av hvert av de åtte navngitte problemene, som et ja/nei-spørsmål. Løsningsforslagene godtar mange formuleringer, men de godtar ikke et svar som bare gjentar navnet. Skriver du «CLIQUE handler om å finne en klikk», har du sagt null. Skriver du «gitt en graf og et tall : finnes det en mengde på minst noder der alle er parvis naboer?», har du svart.
Regn med to til fire oppgaver per sett som treffer stoffet i dette kapitlet, spredt på definisjoner og på spørsmål om hva en reduksjon beviser. De er blant de billigste sikre poengene i hele faget, fordi svaret er kort og fasiten entydig.
Forkunnskaper
Dette kapitlet bygger på kap. 7.1 og kap. 7.2. Dette sto der, og det brukes på hver eneste side under:
- NP er klassen av avgjørelsesproblemer der et ja-svar kan verifiseres i polynomisk tid gitt et sertifikat — et forslag til løsning som en verifikasjonsalgoritme sjekker. NP sier ingenting om hvor lang tid det tar å finne løsningen. Og : alt du kan løse raskt, kan du også verifisere raskt.
- En polynomisk reduksjon er en funksjon som gjør om enhver -instans til en -instans i polynomisk tid, slik at svaret er det samme: ja blir ja, og nei blir nei. Retningen betyr at er minst like vanskelig som .
- Derfor: for å vise at et problem er vanskelig, reduserer du fra et kjent vanskelig problem til . Motsatt vei beviser ingenting om sin vanskelighet.
Trenger du å friske opp mengdenotasjonen bak og , ligger den i Mengdelære.
Åtte problemer du skal kunne definere (~10 min)
En kommune skal sette sammen et vurderingspanel. Noen av de aktuelle fagpersonene har jobbet så tett sammen at de er inhabile overfor hverandre; resten kan sitte sammen. Spørsmålet fra rådmannen er enkelt nok: finnes det et panel på minst fem personer der ingen to er inhabile overfor hverandre?
Ingen i den samtalen sier ordet «graf». Men spørsmålet er allerede et av de åtte problemene i dette kapitlet, formulert med andre ord. Det er hele poenget med katalogen: noen få abstrakte ja/nei-spørsmål dukker opp igjen og igjen i praktiske kledninger, og når du kjenner den formelle formen, kjenner du dem igjen.
Alle åtte er skrevet som avgjørelsesproblemer — spørsmål med svaret ja eller nei. Det er ikke en tilfeldighet. Klassene og er definert for ja/nei-spørsmål, så et optimeringsproblem («hva er den største klikken?») må først skrives om med en terskel («finnes det en klikk på minst noder?») før det i det hele tatt gir mening å spørre om det er i .
Et optimeringsproblem gjøres om til et ja/nei-spørsmål ved å legge til et ekstra inputtall og spørre om det finnes en løsning som er minst (eller høyst) så god.
«Finn den største klikken» blir «finnes det en klikk på minst noder?». «Finn den billigste rundturen» blir «finnes det en rundtur med kostnad høyst ?». Terskelen er en del av inputen, på lik linje med grafen.
Avgjørelsesvarianten er aldri vanskeligere enn optimeringsvarianten: kan du finne den beste løsningen, kan du sammenligne den med . Derfor er det nok å vise at avgjørelsesvarianten er vanskelig — da er optimeringsvarianten det også.
Et problem er NP-hardt hvis hvert problem i kan reduseres polynomisk til — altså for alle .
NP-hardt sier bare noe om vanskelighet: er minst like vanskelig som alt i . Det sier ingenting om at selv ligger i . Et NP-hardt problem kan være mye verre — det kan til og med være uavgjørbart.
I praksis viser du aldri dette for alle direkte. Du reduserer fra ett kjent NP-hardt problem, og lar transitiviteten gjøre resten: er og , så er .
Et problem er NP-komplett hvis det oppfyller to krav samtidig: , og er NP-hardt.
Første ledd er medlemskapet: det finnes et sertifikat og en verifikasjonsalgoritme som sjekker det i polynomisk tid. Andre ledd er hardheten: alt i reduseres til .
De NP-komplette problemene er dermed de vanskeligste problemene i . Finner noen en polynomisk algoritme for ett eneste av dem, følger — og alle de andre faller samtidig.
Standardoppskriften for å vise at et problem er NP-komplett består alltid av to atskilte deler, og begge må stå der.
Del 1 — medlemskap: vis at ved å oppgi et sertifikat og argumentere for at det kan verifiseres i polynomisk tid.
Del 2 — hardhet: velg et problem du allerede vet er NP-komplett, og gi en polynomisk reduksjon — altså fra til .
Har du bare del 2, har du vist at er NP-hardt, ikke at er NP-komplett. Har du bare del 1, har du ikke vist noe om vanskelighet i det hele tatt.
Et transportselskap skal innom fem terminaler P, Q, R, S og T én gang hver og tilbake til utgangspunktet. Kostnadene mellom terminalene er:
| P | Q | R | S | T | |
|---|---|---|---|---|---|
| P | — | 12 | 19 | 25 | 14 |
| Q | 12 | — | 10 | 21 | 17 |
| R | 19 | 10 | — | 11 | 23 |
| S | 25 | 21 | 11 | — | 13 |
| T | 14 | 17 | 23 | 13 | — |
a) Skriv om spørsmålet «hva er den billigste rundturen?» til et avgjørelsesproblem.
b) Hva er svaret på avgjørelsesspørsmålet for og for ?
b) Med fem terminaler finnes det rundturer å sammenligne. Den billigste er
P - Q - R - S - T - P med kostnad 12 + 10 + 11 + 13 + 14 = 60: nei. : ja.
Legg merke til hva som skjedde: det opprinnelige spørsmålet hadde et tall som svar, avgjørelsesvarianten har ja eller nei. Det er den formen klassene og er definert for, og derfor den formen alle de åtte problemene i dette kapitlet skrives på.
Et sykehus vil vite hvor få vaktposter det holder å bemanne for at hver korridor skal ha bemanning i minst én av endene sine. Korridorene går mellom vaktposter.
a) Hvilket av katalogproblemene er dette?
b) Skriv problemet som et avgjørelsesproblem, med grafnotasjon.
CIRCUIT-SAT — der kjeden begynner (~12 min)
Alle de andre problemene i katalogen har fått NP-hardheten sin arvet fra et problem som allerede var kjent vanskelig. Men det første problemet kunne ikke arve noe — det fantes ingenting å arve fra. Det måtte bevises fra bunnen, direkte mot definisjonen av .
Det problemet er CIRCUIT-SAT, og ideen bak beviset er verdt å kunne fortelle i tre setninger. Selve beviset er langt og teknisk, og det spørres det ikke om. Hovedideen spørres det om.
En krets satt sammen av logiske porter — AND, OR og NOT — koblet slik at signalene bare går én vei, uten sløyfer tilbake. Den har inngangsledninger som hver settes til 0 eller 1, og nøyaktig én utgang.
Kretsen er en ren funksjon av inngangene: gitt verdiene på inngangene, er utgangen entydig bestemt, og den kan regnes ut på tid proporsjonal med antall porter. En krets med innganger har mulige inputkombinasjoner — det er derfor det er lett å evaluere en krets, men ikke opplagt lett å søke gjennom alle inputene.
Spørsmålet er om det finnes en måte å sette inngangene på som får kretsen til å gi 1 ut.
Formelt: gitt en boolsk kombinatorisk krets med innganger — finnes det en tilordning av 0 og 1 til inngangene slik at gir 1 på utgangen? Er svaret ja, kalles kretsen oppfyllbar.
Sertifikatet er selve inputkombinasjonen, og verifikasjonen er å evaluere kretsen én gang — lineært i antall porter. CIRCUIT-SAT ligger derfor i , og problemet er NP-komplett.
Ideen i tre setninger. La være et hvilket som helst problem i . Da finnes det per definisjon en verifikasjonsalgoritme som, gitt en instans og et sertifikat , svarer 1 eller 0 på polynomisk tid. En algoritme som kjører i polynomisk tid på en datamaskin, kan skrives om til en krets av polynomisk størrelse som regner ut det samme: maskinen er tross alt bygget av logiske porter, og et polynomisk antall regneskritt gir et polynomisk antall porter.
Konstruksjonen. For en gitt instans bygger vi kretsen som simulerer med fastspikret i portene, og lar sertifikatet være kretsens innganger. Da gjelder:
For er en ja-instans, finnes et sertifikat som får til å svare 1, og nettopp den inputen gjør kretsen oppfyllbar. Og finnes en input som gjør kretsen oppfyllbar, er den inputen et sertifikat som får til å godta .
Konsekvensen. Dette er en polynomisk reduksjon CIRCUIT-SAT, og den fungerer for hvert . Altså er CIRCUIT-SAT NP-hardt, og siden det også ligger i , er det NP-komplett.
Setningen du skal kunne skrive på eksamen: kretsen simulerer verifikasjonsalgoritmen, og sertifikatet er kretsens input — derfor er kretsen oppfyllbar nøyaktig når instansen har et gyldig sertifikat.
To små kretser:
C(a, b, c) = ((a AND NOT b) OR (b XOR c)) AND (NOT a OR c)
D(a, b) = (a OR b) AND (NOT a) AND (NOT b)Avgjør for hver av dem om den er oppfyllbar, og oppgi et sertifikat der svaret er ja.
Med tre innganger er det kombinasjoner å prøve for C:
a b c | C
0 0 0 | 0
0 0 1 | 1
0 1 0 | 1
0 1 1 | 0
1 0 0 | 0
1 0 1 | 1
1 1 0 | 0
1 1 1 | 0C er oppfyllbar. Sertifikat: . Verifikasjonen er å sette inn de tre verdiene og evaluere de fire portene — det tar konstant tid her, og lineær tid i antall porter generelt.
For D er alle fire kombinasjonene 0:
a b | D
0 0 | 0
0 1 | 0
1 0 | 0
1 1 | 0D er ikke oppfyllbar. Merk asymmetrien: ja-svaret har et kort sertifikat som lar seg sjekke lynraskt, mens nei-svaret her krevde at vi gikk gjennom alle kombinasjonene. Det er nøyaktig denne asymmetrien definisjonen av bygger på.
Beviset for at CIRCUIT-SAT er NP-komplett skiller seg fra alle de andre NPC-bevisene i katalogen.
a) På hvilken måte skiller det seg?
b) Hva er sertifikatet i beviset, og hva er det kretsen simulerer?
To andre feil i samme område:
- Å hoppe over medlemskapet. «Vi reduserer fra CIRCUIT-SAT, altså er problemet NP-komplett» er et halvt bevis. Reduksjonen gir NP-hardhet; NP-kompletthet krever i tillegg at problemet ligger i .
- Å blande sertifikat og løsning. Sertifikatet er forslaget som verifiseres, ikke svaret verifikatoren gir. I CIRCUIT-SAT er sertifikatet inputkombinasjonen, ikke bittet 1 på utgangen.
Reduksjonskjeden — slik arves hardheten videre (~14 min)
Når først ett problem er kjent NP-komplett, blir de neste billigere. Er NP-komplett og du greier å vise , arver hardheten: alt i reduseres til , og reduseres til , så alt i reduseres til . Det er transitiviteten som gjør katalogen mulig.
Kjeden i pensum ser slik ut:
CIRCUIT-SAT -> SAT -> 3-CNF-SAT -> CLIQUE -> VERTEX-COVER -> HAM-CYCLE -> TSP
3-CNF-SAT -> SUBSET-SUMPilene peker fra det som allerede er kjent vanskelig, til det nye. Leser du en pil feil vei, har du snudd hele argumentet. Merk også at hver pil bare gir NP-hardhet videre: at hvert av problemene også ligger i , må vises for seg, med sitt eget sertifikat.
Tre navn på delene en boolsk formel bygges av.
En literal er en variabel eller negasjonen av en variabel: eller . En klausul er flere literaler koblet med OR: . En formel er på konjunktiv normalform (CNF) når den er flere klausuler koblet med AND.
En CNF-formel er sann nøyaktig når hver klausul har minst én sann literal. Det gjør verifikasjonen triviell: sett inn tilordningen og gå gjennom klausulene én gang, i tid lineær i antall literaler.
Spørsmålet er om en boolsk formel kan gjøres sann.
Formelt: gitt en boolsk formel over variablene , bygget av AND, OR og NOT — finnes det en tilordning av sannhetsverdier til variablene som gjør sann?
Sertifikatet er tilordningen; verifikasjonen er å evaluere formelen én gang. SAT er NP-komplett, og hardheten arves fra CIRCUIT-SAT: en krets skrives om til en formel ved å innføre én variabel per port.
Samme spørsmål som SAT, men med formelen på en stram standardform.
Formelt: gitt en boolsk formel på konjunktiv normalform der hver klausul har nøyaktig tre literaler — finnes det en tilordning som gjør sann?
Standardformen gjør 3-CNF-SAT til arbeidshesten i katalogen: den er ryddig nok til å bygge grafkonstruksjoner ut av, og derfor går de fleste videre reduksjonene ut fra nettopp den. 3-CNF-SAT er NP-komplett, og hardheten arves fra SAT.
a) Er på 3-CNF-form? Hvor mange klausuler og literaler har den?
b) Er oppfyllbar? Oppgi i så fall et sertifikat, og vis hvordan verifikasjonen kjøres.
b) Ja, er oppfyllbar. Med tre variabler finnes det åtte tilordninger, og fire av dem gjør formelen sann:
x1 x2 x3
0 0 0
0 1 1
1 0 1
1 1 0Sertifikat: . Verifikasjonen går klausul for klausul:
klausul 1: (x1 OR NOT x2 OR x3) x1 = 1 -> sann
klausul 2: (NOT x1 OR x2 OR x3) x3 = 1 -> sann
klausul 3: (NOT x1 OR NOT x2 OR NOT x3) NOT x2 = 1 -> sann
klausul 4: (x1 OR x2 OR NOT x3) x1 = 1 -> sannAlle fire klausulene er sanne, så verifikatoren svarer 1. Arbeidet er lineært i antall literaler, altså for literaler — og det er nettopp det som plasserer 3-CNF-SAT i .
Legg merke til hva sertifikatet ikke er: det er ikke en oppskrift på å finne tilordningen. Å finne den er det vanskelige; å sjekke den er billig.
a) Hvor mange klausuler og literaler har , og er den på 3-CNF-form?
b) Oppgi ett sertifikat som viser at er en ja-instans av 3-CNF-SAT.
c) Hvor mange av de åtte mulige tilordningene gjør sann?
CLIQUE og VERTEX-COVER — de to som forveksles (~14 min)
Nå er vi tilbake ved panelet fra åpningen. De to neste problemene i kjeden handler begge om å velge ut noder i en graf, og de forveksles oftere enn noe annet par i katalogen. Forskjellen er verdt å skrive ned i klartekst før definisjonene kommer:
- CLIQUE ser på nodene innbyrdes: alle de valgte skal være naboer med hverandre. Du vil ha minst noder — jo flere, jo bedre.
- VERTEX-COVER ser på kantene: hver kant i hele grafen skal ha minst én ende blant de valgte. Du vil klare deg med høyst noder — jo færre, jo bedre.
Én av dem er et maksimeringsproblem med et krav på innsiden av utvalget, den andre er et minimeringsproblem med et krav på utsiden. Ulikhetstegnet peker derfor motsatt vei i de to definisjonene, og det er det aller lettest å bomme på.
En delmengde av nodene der alle er parvis naboer.
Formelt: er en klikk i hvis for alle par i . Med andre ord: spenner ut en komplett delgraf.
Én node er alltid en klikk, og to naboer er alltid en klikk. Det interessante er hvor stor den største klikken er — og å avgjøre det er vanskelig.
Spørsmålet er om grafen har en stor nok gruppe der alle kjenner alle.
Formelt: gitt en graf og et tall — finnes det en delmengde med slik at for alle par av ulike noder ?
Merk minst : dette er maksimeringssiden. Sertifikatet er nodemengden , og verifikasjonen sjekker de høyst parene, altså oppslag. CLIQUE er NP-komplett, og hardheten arves fra 3-CNF-SAT.
En delmengde av nodene som treffer hver kant i grafen.
Formelt: er et nodedekke i hvis hver kant har eller (eller begge).
Hele nodemengden er alltid et nodedekke. Det interessante er hvor lite dekket kan gjøres. En nyttig sammenheng: er et nodedekke nøyaktig når resten, , er en uavhengig mengde — en mengde uten en eneste kant mellom seg.
Spørsmålet er om få nok noder kan holde oppsyn med alle kantene.
Formelt: gitt en graf og et tall — finnes det en delmengde med slik at hver kant har minst ett endepunkt i ?
Merk høyst : dette er minimeringssiden, motsatt av CLIQUE. Sertifikatet er mengden , og verifikasjonen går gjennom kantene én gang. VERTEX-COVER er NP-komplett, og hardheten arves fra CLIQUE.
Samme noder som originalen, men med kant nøyaktig der originalen mangler kant.
Formelt: der hvis og bare hvis og . Å bygge tar tid, altså polynomisk — den er derfor lovlig å bruke inne i en reduksjon.
Komplementgrafen binder de to grafproblemene sammen: er en klikk i nøyaktig når er en uavhengig mengde i , og da er et nodedekke i . En klikk på noder i svarer altså til et nodedekke på noder i .
En graf med seks noder:
V = {a, b, c, d, e, f}
E = {(a,b), (a,c), (b,c), (b,d), (c,d), (d,e), (d,f), (e,f)}a) Er (G, k=3) en ja-instans av CLIQUE?
b) Er (G, k=3) en ja-instans av VERTEX-COVER?
c) Hva er svaret for VERTEX-COVER med ?
{b, c, d} er parvis naboer: (b,c), (b,d) og (c,d) ligger alle i . Det er en klikk på tre noder, og CLIQUE spør om minst .b) Nei. Grafen har åtte kanter, og ingen tre noder treffer alle. Det ser man raskest slik: kantene (a,b), (c,d) og (e,f) er parvis disjunkte — de deler ingen endepunkt. Et dekke må ha minst én node fra hver av dem, men da er alle tre brukt opp, og kanten (a,c) er fortsatt udekket med mindre en av de tre valgte er a eller c. Uttømmende gjennomgang bekrefter det: det finnes ingen nodedekker med tre noder.
c) Ja. {b, c, d, f} dekker alle åtte kantene:
(a,b) -> b (a,c) -> c (b,c) -> b,c (b,d) -> b,d
(c,d) -> c,d (d,e) -> d (d,f) -> d,f (e,f) -> fUttømmende gjennomgang av alle delmengder gir dette bildet:
| antall klikker med noder | antall nodedekker med noder | |
|---|---|---|
| 1 | 6 | 0 |
| 2 | 8 | 0 |
| 3 | 3 | 0 |
| 4 | 0 | 7 |
| 5 | 0 | 6 |
| 6 | 0 | 1 |
Største klikk er altså 3, minste nodedekke er 4 — på samme graf. Det er den beste illustrasjonen av at de to problemene spør om helt forskjellige ting. Legg også merke til at , og at største uavhengige mengde i nettopp er 2 noder (
{c, f}).E[u][v] kan slås opp i konstant tid. Nodene er nummerert 1..n. Sertifikatet V' er en liste av nodenummer uten gjentakelser.2. Pre- og postbetingelse. Før: k er et heltall mellom 0 og n, og V' er en liste av noder fra V. Etter: returverdien er 1 hvis og bare hvis V' er en klikk i med minst k noder. Grafen endres ikke.
3. Pseudokoden.
Verify-Clique(G, k, V')
Input: graf G = (V, E) som nabomatrise, terskel k, sertifikat V'
Output: 1 hvis V' er en klikk i G med minst k noder, ellers 0
if length(V') < k
return 0
for hver node u i V'
if u ikke i V
return 0
for hver node u i V'
for hver node v i V' med v != u
if E[u][v] = 0
return 0
return 14. Grunnideen. Verifikatoren gjør ingen søking. Den tar imot et ferdig forslag og sjekker de to kravene i definisjonen av CLIQUE hver for seg: at utvalget er stort nok, og at hvert par i utvalget er en kant.
5. Kjøretid. Den doble løkken går over høyst par, og hvert oppslag i nabomatrisen tar konstant tid, altså — polynomisk i inputstørrelsen. Det er nettopp dette som viser at CLIQUE .
Gitt grafen
V = {p, q, r, s, t, u}
E = {(p,q), (p,r), (p,u), (q,r), (q,t), (r,s), (s,t), (t,u)}a) Oppgi størrelsen på den største klikken, og hvilke noder den består av.
b) Oppgi størrelsen på det minste nodedekket, og hvilke noder det består av.
c) Er (G, k=3) en ja-instans av CLIQUE? Av VERTEX-COVER?
b) Pek ut de to stedene definisjonene skiller lag.
c) En klikk på noder i komplementgrafen svarer til hva i ?
Dette paret står for flere tapte poeng enn noe annet i katalogen. Tre konkrete feil:
- Snudd ulikhetstegn. Å skrive «finnes det et nodedekke med minst noder?» gjør spørsmålet trivielt — hele er alltid et dekke. Et definisjonssvar med feil ulikhetstegn er galt, ikke omtrentlig riktig.
- Krav på feil objekt. «Et nodedekke er en mengde noder som er parvis naboer» er definisjonen av en klikk. Nodedekket stiller krav til kantene.
- Å tro at største klikk og minste nodedekke henger sammen på samme graf. De gjør det ikke. Sammenhengen går via komplementgrafen: klikk i svarer til uavhengig mengde i , som svarer til komplementet av et nodedekke i . På grafen i Eksempel 4 var største klikk 3 og minste nodedekke 4, uten noen sammenheng mellom tallene.
HAM-CYCLE, TSP og SUBSET-SUM (~10 min)
De tre siste i katalogen. To av dem handler om rundturer og henger tett sammen; den tredje handler om tall, og den skal du være ekstra våken på — den er kilden til den vanligste sammenblandingen i hele Del 7.
En lukket rundtur i en graf som besøker hver node nøyaktig én gang og ender der den startet.
Formelt: en sykel i som inneholder hver node i nøyaktig én gang. Merk kontrasten til en Eulersk tur, som skal bruke hver kant én gang — den kan avgjøres i lineær tid, mens den hamiltonske varianten ikke kan det (så vidt vi vet).
En node med grad 1 utelukker umiddelbart at grafen har en hamiltonsk sykel: en sykel må komme inn og ut av hver node, altså kreves grad minst 2.
Spørsmålet er om grafen har en rundtur innom alt.
Formelt: gitt en graf — finnes det en hamiltonsk sykel i , altså en lukket sti som besøker hver node i nøyaktig én gang?
Merk at HAM-CYCLE ikke har noen terskel : spørsmålet er allerede ja/nei. Sertifikatet er rekkefølgen nodene besøkes i, og verifikasjonen sjekker at listen inneholder alle noder én gang og at hvert etterfølgende par er en kant, i oppslag. HAM-CYCLE er NP-komplett, med hardheten arvet fra VERTEX-COVER.
Spørsmålet er om det finnes en rundtur innom alle byene som er billig nok.
Formelt: gitt en komplett graf med en heltallig kostnad på hver kant, og et tall — finnes det en rundtur som besøker hver node nøyaktig én gang og har samlet kostnad høyst ?
TSP er HAM-CYCLE med prislapp. Sertifikatet er rekkefølgen, verifikasjonen summerer kostnader og sammenligner med . TSP er NP-komplett, med hardheten arvet fra HAM-CYCLE: gi kostnad 0 til kantene som finnes i originalgrafen og 1 til de øvrige, og spør om det finnes en rundtur med kostnad høyst 0.
Spørsmålet er om noen av tallene kan plukkes ut slik at de summerer seg nøyaktig til et mål.
Formelt: gitt en endelig mengde positive heltall og et måltall — finnes det en delmengde med ?
Sertifikatet er delmengden, verifikasjonen er én summering i . SUBSET-SUM er NP-komplett, med hardheten arvet direkte fra 3-CNF-SAT. Advarsel: det finnes en tabellalgoritme som løser problemet i tid, men er en tallverdi, ikke en inputlengde — og algoritmen er derfor pseudopolynomisk, ikke polynomisk.
Kjøretiden til en algoritme måles i lengden av inputen i bit. Et måltall skrives med bit. Er , tar tallet 30 bit å skrive ned, men tabellen har en milliard kolonner. Kjøretiden er altså eksponentiell i inputlengden, selv om uttrykket ser polynomisk ut.
En algoritme som er polynomisk i tallenes verdi, men eksponentiell i tallenes lengde, kalles pseudopolynomisk. Den er nyttig når tallene er små, og den motbeviser ingenting om NP-hardhet. Samme resonnement gjelder Ford-Fulkerson: den er pseudopolynomisk fordi kjøretiden avhenger av kapasitetenes størrelse, og det gjør ikke maks-flyt til et vanskelig problem.
b) En reduksjon 3-CNF-SAT CLIQUE er gitt. Hva beviser den, og hva beviser den ikke?
Ja-instans. Sertifikat: , siden . Verifikasjonen er én summering.
Til sammenligning er en nei-instans for samme : ingen delmengde treffer 21 nøyaktig.
b) Retningen er fra 3-CNF-SAT til CLIQUE. Siden 3-CNF-SAT er NP-komplett, beviser reduksjonen at CLIQUE er NP-hardt — CLIQUE er minst like vanskelig som 3-CNF-SAT.
Den beviser ikke at CLIQUE er NP-komplett: til det trengs i tillegg at CLIQUE ligger i , som vises separat med nodemengden som sertifikat. Og den sier ingenting om at 3-CNF-SAT skulle være lett — en reduksjon oppover i vanskelighet forteller ingenting om kilden.
Legg merke til lengden på svarene. Deloppgave a) er én setning pluss ett sertifikat; b) er tre linjer. Det er den formen fasitene bruker, og mer tekst gir ikke mer uttelling.
b) Hvorfor trenger TSP et tall i inputen, mens HAM-CYCLE ikke gjør det?
c) Grafen har nodene
{A, B, C, D, E} og kantene (A,B), (B,C), (C,D), (D,E), (A,C), (B,D). Er en ja-instans av HAM-CYCLE?En student skriver: «SUBSET-SUM kan løses med en tabell i tid, der er antall tall og er måltallet. er et polynom, altså er SUBSET-SUM i .»
a) Stemmer konklusjonen?
b) Hva heter fenomenet, og hvor sitter feilen presist?
For å vise at TSP er NP-hardt brukes denne konstruksjonen: ta en graf , bygg en komplett graf på de samme nodene, gi kostnad 0 til kantene som finnes i og kostnad 1 til de øvrige, og spør om det finnes en rundtur med kostnad høyst 0.
a) Hvilken vei går reduksjonen? Skriv den med -notasjon.
b) Hvorfor er konstruksjonen svarbevarende begge veier?
c) Hva ville det ha bevist hvis noen i stedet hadde vist TSP HAM-CYCLE?
En festivalsjef skal sette sammen et kveldsprogram. Hun har en liste over artister, og for hvert par vet hun om de har sagt ja til å opptre samme kveld. Hun vil vite om det finnes et program med minst åtte artister der alle har sagt ja til alle de andre.
Samtidig skal teknisk sjef bemanne lydsjekkene. Hver kabelstrekk mellom to scener må ha en tekniker i minst én av endene, og han vil vite om fem teknikere holder.
a) Hvilket katalogproblem er hvert av de to spørsmålene?
b) Skriv begge formelt, med den grafen du velger å bygge.
c) Festivalsjefen sier: «Siden jeg klarte å oversette mitt problem til CLIQUE, må mitt problem være NP-komplett.» Er det et gyldig argument?
Katalogen samlet (~4 min)
Alle åtte, med input, ja/nei-spørsmål, sertifikat og hvor hardheten kommer fra. Dette er kapitlets puggeflate — eksamen er hjelpemiddelfri, så tabellen skal sitte i hodet, ikke i en perm.
| Problem | Input | Ja-spørsmålet | Sertifikat | Hardhet arvet fra |
|---|---|---|---|---|
| CIRCUIT-SAT | boolsk krets | finnes en input som gir 1 ut? | inputkombinasjonen | ingen — bevist direkte mot definisjonen av |
| SAT | boolsk formel | finnes en tilordning som gjør sann? | tilordningen | CIRCUIT-SAT |
| 3-CNF-SAT | CNF-formel, tre literaler per klausul | finnes en tilordning som gjør sann? | tilordningen | SAT |
| CLIQUE | graf , tall | finnes med der alle er parvis naboer? | nodemengden | 3-CNF-SAT |
| VERTEX-COVER | graf , tall | finnes med som treffer hver kant? | nodemengden | CLIQUE |
| HAM-CYCLE | graf | finnes en sykel innom hver node nøyaktig én gang? | rekkefølgen | VERTEX-COVER |
| TSP | komplett graf med kostnader, tall | finnes en rundtur med kostnad høyst ? | rekkefølgen | HAM-CYCLE |
| SUBSET-SUM | tallmengde , måltall | finnes en delmengde med sum nøyaktig ? | delmengden | 3-CNF-SAT |
Verifikasjonstidene er alle polynomiske: for de tre nederste, for de to grafproblemene i midten, og lineært i antall porter eller literaler for de tre øverste. Det er den ene halvparten av hvert NPC-bevis. Den andre halvparten er kolonnen helt til høyre.
Begrepsbank (~4 min)
Begrepsbanken er flashcard- og repetisjonsstoff — den gjentar det du nettopp har lest. Hopp trygt over ved førstegangslesing; tidsanslaget for kapitlet gjelder kjernestoffet.
En delmengde av nodene uten en eneste kant mellom seg.
Formelt: er uavhengig i hvis ingen kant i har begge endepunktene sine i . Den er den nøyaktige motsatsen til en klikk: er uavhengig i hvis og bare hvis er en klikk i komplementgrafen .
Sammenhengen med nodedekke er like stram: er uavhengig i hvis og bare hvis er et nodedekke i . Største uavhengige mengde har derfor minus størrelsen på det minste nodedekket.
Rekkefølgen NP-kompletthet er bevist i, og oppskriften på hvordan nye bevis bygges.
Kjeden er CIRCUIT-SAT til SAT til 3-CNF-SAT til CLIQUE til VERTEX-COVER til HAM-CYCLE til TSP, og i tillegg en gren fra 3-CNF-SAT til SUBSET-SUM. Hver pil er en polynomisk reduksjon fra det kjente til det nye.
Kjeden gir bare NP-hardhet videre. Medlemskap i må vises for hvert problem for seg, med sitt eget sertifikat og sin egen verifikasjonsalgoritme.
CIRCUIT-SAT er problemet hele katalogen henger på, fordi det ble bevist NP-komplett uten å låne hardhet fra noe annet problem.
Beviset går direkte mot definisjonen av : for et vilkårlig finnes en polynomisk verifikasjonsalgoritme, den skrives om til en krets av polynomisk størrelse med instansen fastspikret, og sertifikatet blir kretsens input.
Konsekvensen er at CIRCUIT-SAT for hvert . Derfor er CIRCUIT-SAT NP-hardt, og siden det også ligger i , er det NP-komplett — og alle senere bevis kan nøye seg med én reduksjon fra ett kjent problem.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.
Skolesaga er en uavhengig læringsressurs og er ikke tilknyttet eller godkjent av Norges teknisk-naturvitenskapelige universitet. Dette er ikke offisielt studiemateriell. Les mer.