Tilbake
7.3

7.3 NP-komplette problemer

De navngitte NPC-problemene og beviset for at CIRCUIT-SAT er NP-komplett (kretsen simulerer en verifikator).

50 min
9 oppgaver
NP-komplette problemer
Din fremgang i kapitlet
0 / 9 oppgaver

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 PNPP \subseteq NP: alt du kan løse raskt, kan du også verifisere raskt.
- En polynomisk reduksjon ApBA \le_p B er en funksjon som gjør om enhver AA-instans til en BB-instans i polynomisk tid, slik at svaret er det samme: ja blir ja, og nei blir nei. Retningen betyr at BB er minst like vanskelig som AA.
- Derfor: for å vise at et problem XX er vanskelig, reduserer du fra et kjent vanskelig problem til XX. Motsatt vei beviser ingenting om XX sin vanskelighet.

Trenger du å friske opp mengdenotasjonen bak G=(V,E)G=(V,E) og CVC \subseteq V, ligger den i Mengdelære.

Notasjons- og pseudokodeliste

Å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 PP og NPNP 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 kk («finnes det en klikk på minst kk noder?») før det i det hele tatt gir mening å spørre om det er i NPNP.

Avgjørelsesform med terskel

Et optimeringsproblem gjøres om til et ja/nei-spørsmål ved å legge til et ekstra inputtall kk 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 kk noder?». «Finn den billigste rundturen» blir «finnes det en rundtur med kostnad høyst kk?». Terskelen kk 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 kk. Derfor er det nok å vise at avgjørelsesvarianten er vanskelig — da er optimeringsvarianten det også.

NP-hardt

Et problem XX er NP-hardt hvis hvert problem i NPNP kan reduseres polynomisk til XX — altså ApXA \le_p X for alle ANPA \in NP.

NP-hardt sier bare noe om vanskelighet: XX er minst like vanskelig som alt i NPNP. Det sier ingenting om at XX selv ligger i NPNP. 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 ANPA \in NP direkte. Du reduserer fra ett kjent NP-hardt problem, og lar transitiviteten gjøre resten: er ApBA \le_p B og BpXB \le_p X, så er ApXA \le_p X.

NP-komplett (NPC)

Et problem XX er NP-komplett hvis det oppfyller to krav samtidig: XNPX \in NP, og XX 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 NPNP reduseres til XX.

De NP-komplette problemene er dermed de vanskeligste problemene i NPNP. Finner noen en polynomisk algoritme for ett eneste av dem, følger P=NPP = NP — og alle de andre faller samtidig.

NPC-bevis i to deler

Standardoppskriften for å vise at et problem XX er NP-komplett består alltid av to atskilte deler, og begge må stå der.

Del 1 — medlemskap: vis at XNPX \in NP ved å oppgi et sertifikat og argumentere for at det kan verifiseres i polynomisk tid.
Del 2 — hardhet: velg et problem YY du allerede vet er NP-komplett, og gi en polynomisk reduksjon YpXY \le_p X — altså fra YY til XX.

Har du bare del 2, har du vist at XX er NP-hardt, ikke at XX er NP-komplett. Har du bare del 1, har du ikke vist noe om vanskelighet i det hele tatt.

✏️Eksempel 1: Fra optimering til avgjørelse

Et transportselskap skal innom fem terminaler P, Q, R, S og T én gang hver og tilbake til utgangspunktet. Kostnadene mellom terminalene er:

PQRST
P12192514
Q12102117
R19101123
S25211113
T14172313

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 k=59k = 59 og for k=60k = 60?

a) Avgjørelsesvarianten er: gitt kostnadene og et tall kk — finnes det en rundtur som besøker hver terminal nøyaktig én gang og ender der den startet, med samlet kostnad høyst kk? Terskelen kk er en del av inputen.

b) Med fem terminaler finnes det (51)!=24(5-1)! = 24 rundturer å sammenligne. Den billigste er

P - Q - R - S - T - P   med kostnad 12 + 10 + 11 + 13 + 14 = 60

k=59k = 59: nei. k=60k = 60: 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 PP og NPNP er definert for, og derfor den formen alle de åtte problemene i dette kapitlet skrives på.

📝Oppgave 1
Eksamensnivå, sjanger D

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 NPNP.

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.

Boolsk kombinatorisk krets

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 nn 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 nn innganger har 2n2^n mulige inputkombinasjoner — det er derfor det er lett å evaluere en krets, men ikke opplagt lett å søke gjennom alle inputene.

CIRCUIT-SAT

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 CC med nn innganger — finnes det en tilordning av 0 og 1 til inngangene slik at CC 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 NPNP, og problemet er NP-komplett.

📜Hovedideen: hvorfor CIRCUIT-SAT er NP-komplett
Påstanden: CIRCUIT-SAT er NP-komplett. Medlemskapet i NPNP er lett (evaluér kretsen på den foreslåtte inputen). Det interessante er hardheten, og den bevises ikke ved å redusere fra et annet NP-komplett problem — det fantes ikke noe å redusere fra.

Ideen i tre setninger. La AA være et hvilket som helst problem i NPNP. Da finnes det per definisjon en verifikasjonsalgoritme VV som, gitt en instans xx og et sertifikat yy, 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 xx bygger vi kretsen som simulerer VV med xx fastspikret i portene, og lar sertifikatet yy være kretsens innganger. Da gjelder:

x er en ja-instans av A    kretsen er oppfyllbarx \text{ er en ja-instans av } A \iff \text{kretsen er oppfyllbar}

For er xx en ja-instans, finnes et sertifikat som får VV 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 VV til å godta xx.

Konsekvensen. Dette er en polynomisk reduksjon ApA \le_p CIRCUIT-SAT, og den fungerer for hvert ANPA \in NP. Altså er CIRCUIT-SAT NP-hardt, og siden det også ligger i NPNP, 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.

✏️Eksempel 2: Er kretsen oppfyllbar?

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 23=82^3 = 8 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 | 0

C er oppfyllbar. Sertifikat: a=0, b=0, c=1a=0,\ b=0,\ c=1. 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 | 0

D 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 NPNP bygger på.

📝Oppgave 2
Eksamensnivå, sjanger G

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?

Reduksjonskjeden — slik arves hardheten videre (~14 min)

Når først ett problem er kjent NP-komplett, blir de neste billigere. Er YY NP-komplett og du greier å vise YpXY \le_p X, arver XX hardheten: alt i NPNP reduseres til YY, og YY reduseres til XX, så alt i NPNP reduseres til XX. 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-SUM

Pilene 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 NPNP, må vises for seg, med sitt eget sertifikat.

Literal, klausul og konjunktiv normalform

Tre navn på delene en boolsk formel bygges av.

En literal er en variabel eller negasjonen av en variabel: x2x_2 eller ¬x2\neg x_2. En klausul er flere literaler koblet med OR: (x1¬x2x3)(x_1 \vee \neg x_2 \vee x_3). 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.

SAT (formeloppfyllbarhet)

Spørsmålet er om en boolsk formel kan gjøres sann.

Formelt: gitt en boolsk formel φ\varphi over variablene x1,,xnx_1,\dots,x_n, bygget av AND, OR og NOT — finnes det en tilordning av sannhetsverdier til variablene som gjør φ\varphi 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.

3-CNF-SAT

Samme spørsmål som SAT, men med formelen på en stram standardform.

Formelt: gitt en boolsk formel φ\varphi på konjunktiv normalform der hver klausul har nøyaktig tre literaler — finnes det en tilordning som gjør φ\varphi 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.

✏️Eksempel 3: Sertifikat og verifikasjon i 3-CNF-SAT
Gitt formelen

φ=(x1¬x2x3)(¬x1x2x3)(¬x1¬x2¬x3)(x1x2¬x3)\varphi = (x_1 \vee \neg x_2 \vee x_3) \wedge (\neg x_1 \vee x_2 \vee x_3) \wedge (\neg x_1 \vee \neg x_2 \vee \neg x_3) \wedge (x_1 \vee x_2 \vee \neg x_3)

a) Er φ\varphi på 3-CNF-form? Hvor mange klausuler og literaler har den?
b) Er φ\varphi oppfyllbar? Oppgi i så fall et sertifikat, og vis hvordan verifikasjonen kjøres.

a) Ja. Fire klausuler, hver med nøyaktig tre literaler — til sammen 12 literaler, over tre variabler.

b) Ja, φ\varphi 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  0

Sertifikat: x1=1, x2=0, x3=1x_1 = 1,\ x_2 = 0,\ x_3 = 1. 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        -> sann

Alle fire klausulene er sanne, så verifikatoren svarer 1. Arbeidet er lineært i antall literaler, altså Θ(m)\Theta(m) for mm literaler — og det er nettopp det som plasserer 3-CNF-SAT i NPNP.

Legg merke til hva sertifikatet ikke er: det er ikke en oppskrift på å finne tilordningen. Å finne den er det vanskelige; å sjekke den er billig.

📝Oppgave 3
Eksamensnivå, sjanger D…
Gitt formelen

ψ=(y1y2¬y3)(¬y1y2y3)(y1¬y2y3)(¬y1¬y2¬y3)(y1y2y3)\psi = (y_1 \vee y_2 \vee \neg y_3) \wedge (\neg y_1 \vee y_2 \vee y_3) \wedge (y_1 \vee \neg y_2 \vee y_3) \wedge (\neg y_1 \vee \neg y_2 \vee \neg y_3) \wedge (y_1 \vee y_2 \vee y_3)

a) Hvor mange klausuler og literaler har ψ\psi, og er den på 3-CNF-form?
b) Oppgi ett sertifikat som viser at ψ\psi er en ja-instans av 3-CNF-SAT.
c) Hvor mange av de åtte mulige tilordningene gjør ψ\psi 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 kk 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 kk 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å.

Klikk (clique)

En delmengde av nodene der alle er parvis naboer.

Formelt: CVC \subseteq V er en klikk i G=(V,E)G=(V,E) hvis (u,v)E(u,v) \in E for alle par uvu \ne v i CC. Med andre ord: CC 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.

CLIQUE

Spørsmålet er om grafen har en stor nok gruppe der alle kjenner alle.

Formelt: gitt en graf G=(V,E)G=(V,E) og et tall kk — finnes det en delmengde CVC \subseteq V med Ck\lvert C \rvert \ge k slik at (u,v)E(u,v) \in E for alle par av ulike noder u,vCu, v \in C?

Merk minst kk: dette er maksimeringssiden. Sertifikatet er nodemengden CC, og verifikasjonen sjekker de høyst C2\lvert C \rvert^2 parene, altså O(n2)O(n^2) oppslag. CLIQUE er NP-komplett, og hardheten arves fra 3-CNF-SAT.

Nodedekke (vertex cover)

En delmengde av nodene som treffer hver kant i grafen.

Formelt: CVC \subseteq V er et nodedekke i G=(V,E)G=(V,E) hvis hver kant (u,v)E(u,v) \in E har uCu \in C eller vCv \in C (eller begge).

Hele nodemengden VV er alltid et nodedekke. Det interessante er hvor lite dekket kan gjøres. En nyttig sammenheng: CC er et nodedekke nøyaktig når resten, VCV \setminus C, er en uavhengig mengde — en mengde uten en eneste kant mellom seg.

VERTEX-COVER

Spørsmålet er om få nok noder kan holde oppsyn med alle kantene.

Formelt: gitt en graf G=(V,E)G=(V,E) og et tall kk — finnes det en delmengde CVC \subseteq V med Ck\lvert C \rvert \le k slik at hver kant (u,v)E(u,v) \in E har minst ett endepunkt i CC?

Merk høyst kk: dette er minimeringssiden, motsatt av CLIQUE. Sertifikatet er mengden CC, og verifikasjonen går gjennom kantene én gang. VERTEX-COVER er NP-komplett, og hardheten arves fra CLIQUE.

Komplementgrafen

Samme noder som originalen, men med kant nøyaktig der originalen mangler kant.

Formelt: Gˉ=(V,Eˉ)\bar{G} = (V, \bar{E}) der (u,v)Eˉ(u,v) \in \bar{E} hvis og bare hvis uvu \ne v og (u,v)E(u,v) \notin E. Å bygge Gˉ\bar{G} tar Θ(n2)\Theta(n^2) tid, altså polynomisk — den er derfor lovlig å bruke inne i en reduksjon.

Komplementgrafen binder de to grafproblemene sammen: CC er en klikk i Gˉ\bar{G} nøyaktig når CC er en uavhengig mengde i GG, og da er VCV \setminus C et nodedekke i GG. En klikk på kk noder i Gˉ\bar{G} svarer altså til et nodedekke på nkn - k noder i GG.

✏️Eksempel 4: Samme graf, to spørsmål

En graf GG 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 k=4k = 4?

a) Ja. Nodene {b, c, d} er parvis naboer: (b,c), (b,d) og (c,d) ligger alle i EE. Det er en klikk på tre noder, og CLIQUE spør om minst kk.

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) -> f

Uttømmende gjennomgang av alle delmengder gir dette bildet:

kkantall klikker med kk noderantall nodedekker med kk noder
160
280
330
407
506
601

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 64=26 - 4 = 2, og at største uavhengige mengde i GG nettopp er 2 noder ({c, f}).
📜Pseudokode-kontrakt: `Verify-Clique`
1. Antagelser om representasjon. Grafen G=(V,E)G=(V,E) er gitt som nabomatrise, slik at 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 GG 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 1

4. 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 V2n2\lvert V' \rvert^2 \le n^2 par, og hvert oppslag i nabomatrisen tar konstant tid, altså O(n2)O(n^2) — polynomisk i inputstørrelsen. Det er nettopp dette som viser at CLIQUE NP\in NP.

📝Oppgave 4
Eksamensnivå, sjanger C

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?

📝Oppgave 5
Eksamensnivå, sjanger D
a) Definér CLIQUE og VERTEX-COVER som avgjørelsesproblemer, med grafnotasjon.
b) Pek ut de to stedene definisjonene skiller lag.
c) En klikk på kk noder i komplementgrafen Gˉ\bar{G} svarer til hva i GG?

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.

Hamiltonsk sykel

En lukket rundtur i en graf som besøker hver node nøyaktig én gang og ender der den startet.

Formelt: en sykel i G=(V,E)G=(V,E) som inneholder hver node i VV 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.

HAM-CYCLE

Spørsmålet er om grafen har en rundtur innom alt.

Formelt: gitt en graf G=(V,E)G=(V,E) — finnes det en hamiltonsk sykel i GG, altså en lukket sti som besøker hver node i VV nøyaktig én gang?

Merk at HAM-CYCLE ikke har noen terskel kk: 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 O(n)O(n) oppslag. HAM-CYCLE er NP-komplett, med hardheten arvet fra VERTEX-COVER.

TSP (handelsreisendes problem)

Spørsmålet er om det finnes en rundtur innom alle byene som er billig nok.

Formelt: gitt en komplett graf G=(V,E)G=(V,E) med en heltallig kostnad w(u,v)0w(u,v) \ge 0 på hver kant, og et tall kk — finnes det en rundtur som besøker hver node nøyaktig én gang og har samlet kostnad høyst kk?

TSP er HAM-CYCLE med prislapp. Sertifikatet er rekkefølgen, verifikasjonen summerer nn kostnader og sammenligner med kk. 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.

SUBSET-SUM

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 S={s1,,sn}S = \{s_1, \dots, s_n\} og et måltall tt — finnes det en delmengde SSS' \subseteq S med sSs=t\sum_{s \in S'} s = t?

Sertifikatet er delmengden, verifikasjonen er én summering i Θ(n)\Theta(n). SUBSET-SUM er NP-komplett, med hardheten arvet direkte fra 3-CNF-SAT. Advarsel: det finnes en tabellalgoritme som løser problemet i Θ(nt)\Theta(nt) tid, men tt er en tallverdi, ikke en inputlengde — og algoritmen er derfor pseudopolynomisk, ikke polynomisk.

✏️Eksempel 5: To eksamenssvar i kortsvarsform
a) Definér SUBSET-SUM, og avgjør om S={3,8,11,17,22}S = \{3, 8, 11, 17, 22\} med t=30t = 30 er en ja-instans.
b) En reduksjon 3-CNF-SAT p\le_p CLIQUE er gitt. Hva beviser den, og hva beviser den ikke?
a) Gitt en mengde positive heltall SS og et måltall tt: finnes det en delmengde av SS som summerer seg til nøyaktig tt?

Ja-instans. Sertifikat: {8,22}\{8, 22\}, siden 8+22=308 + 22 = 30. Verifikasjonen er én summering.

Til sammenligning er t=21t = 21 en nei-instans for samme SS: 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 NPNP, 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.

📝Oppgave 6
Eksamensnivå, sjanger D…
a) Definér HAM-CYCLE og TSP som avgjørelsesproblemer.
b) Hvorfor trenger TSP et tall kk i inputen, mens HAM-CYCLE ikke gjør det?
c) Grafen HH har nodene {A, B, C, D, E} og kantene (A,B), (B,C), (C,D), (D,E), (A,C), (B,D). Er HH en ja-instans av HAM-CYCLE?
📝Oppgave 7
Eksamensnivå, sjanger F

En student skriver: «SUBSET-SUM kan løses med en tabell i Θ(nt)\Theta(nt) tid, der nn er antall tall og tt er måltallet. Θ(nt)\Theta(nt) er et polynom, altså er SUBSET-SUM i PP

a) Stemmer konklusjonen?
b) Hva heter fenomenet, og hvor sitter feilen presist?

📝Oppgave 8
Eksamensnivå, sjanger G

For å vise at TSP er NP-hardt brukes denne konstruksjonen: ta en graf G=(V,E)G=(V,E), bygg en komplett graf på de samme nodene, gi kostnad 0 til kantene som finnes i EE 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 p\le_p-notasjon.
b) Hvorfor er konstruksjonen svarbevarende begge veier?
c) Hva ville det ha bevist hvis noen i stedet hadde vist TSP p\le_p HAM-CYCLE?

📝Oppgave 9
Eksamensnivå, sjanger D…

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.

ProblemInputJa-spørsmåletSertifikatHardhet arvet fra
CIRCUIT-SATboolsk krets CCfinnes en input som gir 1 ut?inputkombinasjoneningen — bevist direkte mot definisjonen av NPNP
SATboolsk formel φ\varphifinnes en tilordning som gjør φ\varphi sann?tilordningenCIRCUIT-SAT
3-CNF-SATCNF-formel, tre literaler per klausulfinnes en tilordning som gjør φ\varphi sann?tilordningenSAT
CLIQUEgraf GG, tall kkfinnes CC med Ck\lvert C \rvert \ge k der alle er parvis naboer?nodemengden CC3-CNF-SAT
VERTEX-COVERgraf GG, tall kkfinnes CC med Ck\lvert C \rvert \le k som treffer hver kant?nodemengden CCCLIQUE
HAM-CYCLEgraf GGfinnes en sykel innom hver node nøyaktig én gang?rekkefølgenVERTEX-COVER
TSPkomplett graf med kostnader, tall kkfinnes en rundtur med kostnad høyst kk?rekkefølgenHAM-CYCLE
SUBSET-SUMtallmengde SS, måltall ttfinnes en delmengde med sum nøyaktig tt?delmengden3-CNF-SAT

Verifikasjonstidene er alle polynomiske: Θ(n)\Theta(n) for de tre nederste, O(n2)O(n^2) 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.

Uavhengig mengde (independent set)

En delmengde av nodene uten en eneste kant mellom seg.

Formelt: IVI \subseteq V er uavhengig i G=(V,E)G=(V,E) hvis ingen kant i EE har begge endepunktene sine i II. Den er den nøyaktige motsatsen til en klikk: II er uavhengig i GG hvis og bare hvis II er en klikk i komplementgrafen Gˉ\bar{G}.

Sammenhengen med nodedekke er like stram: II er uavhengig i GG hvis og bare hvis VIV \setminus I er et nodedekke i GG. Største uavhengige mengde har derfor nn minus størrelsen på det minste nodedekket.

Reduksjonskjeden i pensum

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 NPNP må vises for hvert problem for seg, med sitt eget sertifikat og sin egen verifikasjonsalgoritme.

Det første NP-komplette problemet

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 NPNP: for et vilkårlig ANPA \in NP 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 ApA \le_p CIRCUIT-SAT for hvert ANPA \in NP. Derfor er CIRCUIT-SAT NP-hardt, og siden det også ligger i NPNP, er det NP-komplett — og alle senere bevis kan nøye seg med én reduksjon fra ett kjent problem.

Repetisjonsoppgaver

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.