Tilbake
7.3

7.3 NP-kompletthet — og hva som IKKE er IN2010-pensum

P og NP, verifikator/sertifikat og reduksjonsretning — pluss en avgrensning av de tunge TDT4120-temaene (DP, maks-flyt, masterteoremet) som er fraværende i IN2010.

55 min
7 oppgaver
NP-kompletthethva som IKKE er IN2010-pensum
Din fremgang i kapitlet
0 / 7 oppgaver

Forkunnskaper

- kap. 1.4 — der møtte du klassene PP og NPNP, sertifikat
og verifikator, og de faste sant/usant-punktene. Dette kapitlet bygger direkte
videre: her skal du skrive verifikatoren og bruke reduksjonsregelen.
- kap. 1.1 — vekstordningen, og særlig skillet mellom
polynomisk vekst som n2n^2 og eksponentiell vekst som 2n2^n. Hele
kompleksitetsteorien hviler på den ene grensen.
- kap. 5.1 — grafer, nabolister og nabomatrise. Alle
eksemplene under er grafproblemer, og verifikatoren slår opp i en av de to
representasjonene.
- kap. 3.1mod N-regningen. Den kommer tilbake her, i
den siste kanten av en rundtur.

Notasjons- og pseudokodeliste

Løkke 1 — å finne mot å kontrollere (ca. 12 min)

En bemanningsansvarlig setter opp turnus for 40 sykepleiere. Hver har sperrede
datoer, noen kan ikke gå vakt sammen, og hver vakt trenger minst én med
spesialkompetanse. Å finne en turnus som oppfyller alt kan ta dager.

Men får hun en ferdig turnus i hånda, tar det noen minutter å kontrollere den:
gå gjennom hver vakt, sjekk bemanningen, sjekk sperrene. Kontrollen er rask selv
om letingen var langsom.

Hele kompleksitetsteorien i dette kapitlet handler om det skillet. Det finnes
problemer der vi ikke kjenner noen rask måte å finne svaret på, men der enhver
foreslått løsning kan kontrolleres raskt. Det er nettopp de problemene klassen
NPNP samler.

Å løse mot å kontrollere
Å løse et problem er å produsere svaret fra inndata alene. Å kontrollere
er å få utlevert et foreslått svar og avgjøre om det holder.

Skillet er hele grunnlaget for PP og NPNP: PP handler om å løse raskt, NPNP om
å kontrollere raskt. At de to skulle være det samme, er akkurat det åpne
spørsmålet P=NPP = NP.

Polynomisk tid

Kjøretid på formen O(nk)O(n^k) for en fast konstant kk: O(n)O(n), O(nlogn)O(n \log n),
O(n2)O(n^2), O(n3)O(n^3) og så videre. Alt du har møtt i denne boka, ligger her.

Grensen går ved eksponentiell vekst. O(2n)O(2^n) og O(n!)O(n!) er ikke polynomisk,
og forskjellen er ikke akademisk: for n=60n = 60 er n3n^3 rundt to hundre tusen,
mens 2n2^n er over en trillion.

Klassen NP — kontroll, ikke løsning

Problemene der et foreslått ja-svar kan kontrolleres i polynomisk tid.
Definisjonen sier ingenting om hvor lang tid det tar å finne svaret.

To presiseringer som testes direkte: NPNP betyr ikke «ikke-polynomisk» — det
står for «ikke-deterministisk polynomisk». Og NPNP er ikke det samme som «ikke i
PP»: siden PNPP \subseteq NP, ligger alle de lette problemene også i NPNP.

📜De faste fakta om P og NP

Dette er punktene som kommer på Del 1, den auto-rettede delen, når NP-stoffet
først kommer. De er få, og de er faste.

PåstandSvar
PNPP \subseteq NPsant
Finnes det en verifikator med polynomisk kjøretid, ligger problemet i NPNPsant
Alle NP-komplette problemer kan reduseres til hverandre i polynomisk tidsant
Løser du ett NP-komplett problem i polynomisk tid, følger P=NPP = NPsant
Det er bevist at P=NPP = NPusant
Det er bevist at PNPP \neq NPusant
Alle avgjørelsesproblemer ligger i PP eller i NPNPusant
NPNP betyr «ikke-polynomisk»usant

Merk at listen blander sant og usant omtrent likt. Det gjør de ekte
sant/usant-blokkene også — det finnes ikke noe mønster å lene seg på, og det er
hele hensikten med antigjettings-skaleringen: en poengregning som skalerer
summen så ren gjetting i snitt gir null.
De to siste linjene er verdt et blikk til. Det finnes problemer som verken er i
PP eller i NPNP — for eksempel problemer der selv en foreslått løsning ikke kan
kontrolleres raskt. Og «NPNP» er en forkortelse mange leser feil, med den følgen
at de svarer «usant» på PNPP \subseteq NP.

📝Oppgave 1

(Innstegsoppgave, sjanger L — NP-kompletthet, altså at du svarer på faste fakta
om PP og NPNP, skriver en verifikator eller vurderer en reduksjonsretning.)
Marker sant eller usant, og skriv én setnings begrunnelse for hver.

a) Et problem i PP ligger også i NPNP.
b) NPNP er samlingen av problemer som ikke kan løses i polynomisk tid.
c) Det er bevist at PNPP \neq NP.
d) Finnes det en verifikator med polynomisk kjøretid for et problem, ligger
problemet i NPNP.

Løkke 2 — sertifikatet og verifikatoren (ca. 16 min)

Turnusen bemanningsansvarlig fikk i hånda, er et sertifikat: et konkret
forslag til svar. Prosedyren hun kjører for å kontrollere det, er en
verifikator.

Kravet for at et problem skal ligge i NPNP, er at det finnes en verifikator med
polynomisk kjøretid. Å skrive en slik prosedyre er en oppgavetype i seg selv,
og den er lettere enn den ser ut: du skal ikke løse problemet, bare kontrollere
et ferdig forslag.

Det klassiske eksempelet er Hamiltonsykel: finnes det en rundtur i en graf
som besøker hver node nøyaktig én gang og ender der den startet? Ingen kjenner
noen rask måte å finne en slik rundtur på. Men får du en foreslått rundtur, er
kontrollen triviell — nesten.

Sertifikatet

Det foreslåtte ja-svaret som verifikatoren får utlevert sammen med inndata. For
Hamiltonsykel er det et array C med alle nodene i den rekkefølgen rundturen
går; for en klikk er det listen over nodene i klikken.

Sertifikatet må selv være av polynomisk størrelse. Et «sertifikat» som består av
alle mulige rundturer, hjelper ingen — det er like stort som problemet.

Verifikatorens kontrakt

En prosedyre som tar inndata og et sertifikat, og returnerer sant eller
usant — holder det foreslåtte svaret, eller gjør det ikke?

Den skal ikke lete etter et svar. Den skal ikke prøve alternativer. Den gjør
én gjennomgang av sertifikatet og sjekker at hvert krav i problemet er oppfylt.
Klarer den det i polynomisk tid, ligger problemet i NPNP.

Hamiltonsykel

Spørsmålet om det finnes en rundtur i en graf som besøker hver node nøyaktig
én gang
og vender tilbake til startnoden.

Problemet er NP-komplett, og det er bokas standardeksempel av to grunner:
sertifikatet er lett å beskrive (nodene i rekkefølge), og verifikatoren er kort
nok til å skrives ut på eksamen. Forveksle det ikke med et spenntre eller en
korteste vei — der finnes det raske algoritmer.

📜Pseudokode-kontrakt: `VerifiserHamiltonsykel`
Antagelser om representasjon. Den urettede grafen G=(V,E)G = (V, E) er gitt som
nabomatrise, slik at ErKant(G, u, v) er O(1)O(1). NN er antall noder.
Sertifikatet C er et array med noder, indeks fra 0. Hjelpearrayet sett har én
plass per node.

Prebetingelse: ingen — verifikatoren skal tåle et hvilket som helst
sertifikat, også et ugyldig. Postbetingelse: returnerer sant nøyaktig når C
er en rundtur som besøker hver node én gang og lukker seg.

Procedure VerifiserHamiltonsykel(G, C)
  Input:  urettet graf G som nabomatrise med N noder,
          sertifikat C: array med noder, indeks fra 0
  Output: sant hvis C er en Hamiltonsykel i G, ellers usant

  if lengden av C er ulik N:
      return usant

  for hver node v i V:
      sett[v] = usant
  for i = 0 til N-1:
      if sett[C[i]]:
          return usant            // samme node to ganger
      sett[C[i]] = sant

  for i = 0 til N-1:
      u = C[i]
      v = C[(i + 1) mod N]        // ved i = N-1 gir dette C[0]
      if ErKant(G, u, v) er usant:
          return usant

  return sant

Grunnideen i én setning: en rundtur er nøyaktig tre ting — riktig antall
noder, ingen node to ganger, og en kant mellom hvert par som følger etter
hverandre, også mellom den siste og den første.

Kjøretid: tre løkker etter hverandre, hver over NN elementer, med O(1)O(1)
arbeid inni. Det gir O(N)O(N) når grafen er en nabomatrise. Med nabolister koster
hvert kantoppslag opptil O(N)O(N), så verifikatoren blir O(N2)O(N^2) — fortsatt
polynomisk, og det er alt definisjonen krever.

Den ene linjen alt henger på er C[(i + 1) mod N]. Uten mod N stopper
løkka etter det nest siste paret, og en «rundtur» som ikke lukker seg, blir
godkjent. Det er felle #7 i bokas feilregister — å glemme siste kant i en
syklisk struktur.

✏️Eksempel 1: Verifikatoren kjørt på to sertifikater

En urettet graf har nodene PP, QQ, RR, SS, TT og kantene PPQQ, QQRR,
RRSS, SSTT, TTPP og PPRR. Nabolistene er

P: Q, R, T
Q: P, R
R: P, Q, S
S: R, T
T: P, S

Kjør VerifiserHamiltonsykel på de to sertifikatene
C1=(P,Q,R,S,T)C_1 = (P, Q, R, S, T) og C2=(Q,P,R,S,T)C_2 = (Q, P, R, S, T), og oppgi svaret for hver.

Begge sertifikatene har lengde 5, som er NN, og begge inneholder hver node
nøyaktig én gang. De to første kontrollene passerer altså i begge tilfeller, og
det er kantløkka som avgjør.

Sertifikat 1: C1=(P,Q,R,S,T)C_1 = (P, Q, R, S, T)

Steg iPar (C[i], C[(i+1) mod N])Er det en kant?Status
0(P, Q)jafortsett
1(Q, R)jafortsett
2(R, S)jafortsett
3(S, T)jafortsett
4(T, P) — siste par, (i+1) mod N gir 0jafortsett

Svar: sant. C1C_1 er en Hamiltonsykel. Fem kantoppslag, ett per node.
Sertifikat 2: C2=(Q,P,R,S,T)C_2 = (Q, P, R, S, T)
Steg iPar (C[i], C[(i+1) mod N])Er det en kant?Status
0(Q, P)jafortsett
1(P, R)jafortsett
2(R, S)jafortsett
3(S, T)jafortsett
4(T, Q) — siste par, (i+1) mod N gir 0neiavvist

Svar: usant. C2C_2 er ikke en Hamiltonsykel.
Se nøye på hva som skiller de to. C2C_2 er en helt gyldig sti gjennom alle
fem nodene — QQ til PP til RR til SS til TT, hvert steg langs en kant. Den

eneste feilen er at den ikke kommer hjem: det finnes ingen kant fra TT tilbake

til QQ.

Fellenote. En verifikator uten mod N i siste steg ville godkjent C2C_2. Den
ville sjekket parene 0 til 3, funnet alle i orden, og returnert sant. Det er
felle #7, og den er dokumentert som en av de vanligste i denne oppgavetypen —
nettopp fordi den bare gir feil svar på de sertifikatene som ligner mest på et
riktig svar.
Merk også hvorfor kjøretiden er poenget. Kontrollen gjorde fem kantoppslag.
Å finne en Hamiltonsykel i samme graf ville i verste fall krevd at man prøvde

alle rekkefølger av de fem nodene. At kontrollen er O(N)O(N) mens letingen ikke har

noen kjent polynomisk algoritme — det er hele innholdet i påstanden «Hamiltonsykel
ligger i NPNP».

📝Oppgave 2
Sjanger L

Bruk samme graf som i eksempel 1: nodene PP, QQ, RR, SS, TT og
kantene PPQQ, QQRR, RRSS, SSTT, TTPP, PPRR.

a) Kjør verifikatoren på sertifikatet (P,Q,R,P,T)(P, Q, R, P, T). Hvilken av de tre
kontrollene stopper den, og hvorfor?
b) Kjør verifikatoren på sertifikatet (P,R,S,T)(P, R, S, T). Hva skjer?
c) Finn selv et sertifikat som verifikatoren godkjenner, og som ikke er
(P,Q,R,S,T)(P, Q, R, S, T).

Den siste kanten i en rundtur
C[(i + 1) mod N] — uttrykket som gjør at siste steg i løkka sammenligner den
siste noden med den første.

Uten mod N sjekker verifikatoren en sti, ikke en sykel, og godkjenner
sertifikater som ikke lukker seg. Det er felle #7 i bokas feilregister, og den
gjelder like mye i alle andre sykliske gjennomganger: (i + 1) mod N er samme
regning som i lineær probing i kap. 3.1.

📝Oppgave 3
Sjanger L

En klikk i en urettet graf er en mengde noder der alle par
er naboer. Problemet CLIQUE spør: finnes det en klikk med kk noder?

a) Hva er sertifikatet, og hvilke antagelser om representasjon gjør du?
b) Skriv VerifiserKlikk i pseudokode.
c) Oppgi kjøretiden, og forklar hvorfor den viser at CLIQUE ligger i NPNP.

Løkke 3 — reduksjonsretningen (ca. 14 min)

Tenk deg at du har en maskin som løser problem BB lynraskt. Du står med et
problem AA du ikke får til. Hvis du kan skrive om enhver AA-oppgave til en
BB-oppgave — raskt — så kan du bruke maskinen til å løse AA også.

Det er nøyaktig hva ApBA \leq_p B betyr. Og legg merke til hva den slutningen
sier: BB er minst like vanskelig som AA. Maskinen som løser BB, løser
nemlig AA på kjøpet.

Retningen er alt i denne sjangeren, og den er lett å snu feil vei fordi begge
formuleringene høres fornuftige ut når du sier dem fort.

Reduksjonen ApBA \leq_p B

En polynomisk omskrivning som gjør enhver forekomst av problem AA om til en
forekomst av problem BB, slik at svaret blir det samme.

Finnes en slik omskrivning, er BB minst like vanskelig som AA: har du en
rask løser for BB, får du en rask løser for AA ved å skrive om først. Selve
omskrivningen må være polynomisk, ellers forsvinner argumentet.

📜Reduksjonsretningen — regelen, skrevet ut begge veier
Regelen: for å vise at et nytt problem XX er vanskelig, reduserer du fra
et kjent vanskelig problem til XX. Altså: kjent-vanskelig pX\leq_p X.

Skrevet ut som resonnement:

- Riktig vei. Vi vet at Hamiltonsykel er NP-komplett. Vi skriver om enhver
Hamiltonsykel-oppgave til en XX-oppgave i polynomisk tid. Da ville en rask
løser for XX gitt en rask løser for Hamiltonsykel. Altså er XX minst like
vanskelig som Hamiltonsykel. XX er vanskelig.
- Feil vei. Vi skriver om enhver XX-oppgave til en Hamiltonsykel-oppgave.
Da ville en rask løser for Hamiltonsykel gitt en rask løser for XX. Det viser
at XX ikke er vanskeligere enn Hamiltonsykel — altså at XX er minst like
lett
. Om XX selv er vanskelig, sier det ingenting.

Huskeregelen i seks ord: reduser fra det vanskelige, til ditt eget.

At retningen er lett å snu, er ingen unnskyldning — den er felle #8 i bokas
feilregister, og det er trukket eksplisitt for den i arkivet. Til gjengjeld
gjelder også det motsatte: en reduksjon som er godt beskrevet, kan gi full
uttelling selv om kandidaten har snudd retningen, fordi resonnementet ellers
viser forståelse. Det er sensorpraksis, ikke en oppfordring.

✏️Eksempel 2: Eksamensnivå — en reduksjon skrevet ut, og den samme snudd feil vei

Et vaktselskap definerer problemet RUNDE-MED-BUDSJETT: gitt et sett poster,
en gangtid mellom hvert par av poster, og et tidsbudsjett BB — finnes det en
runde som besøker hver post nøyaktig én gang, ender der den startet, og bruker
til sammen høyst BB?

Vis at RUNDE-MED-BUDSJETT er minst like vanskelig som Hamiltonsykel.

Ledd 1 — hvilken vei. Vi skal vise at det nye problemet er vanskelig, så
vi reduserer fra det kjente vanskelige problemet til det nye:
Hamiltonsykel p\leq_p RUNDE-MED-BUDSJETT.

Ledd 2 — omskrivningen. Vi får en graf GG med NN noder og skal avgjøre om
den har en Hamiltonsykel. Vi bygger en RUNDE-MED-BUDSJETT-forekomst slik:

- hver node i GG blir en post,
- for hvert par poster settes en gangtid: 1 hvis paret er en kant i GG,
og 2 hvis det ikke er det,
- tidsbudsjettet settes til B=NB = N.

Ledd 3 — hvorfor svaret blir det samme. En runde besøker NN poster og går
NN strekninger. Bruker den bare strekninger som koster 1, blir totalen nøyaktig
NN; bruker den én eneste strekning til 2, blir totalen minst N+1N + 1.

Altså: det finnes en runde innenfor budsjettet NN hvis og bare hvis det
finnes en runde som bare bruker kanter fra GG — og det er nøyaktig en
Hamiltonsykel i GG.

Ledd 4 — at omskrivningen er polynomisk. Vi setter én gangtid per par poster,
altså N(N1)/2N(N-1)/2 tall, hvert avgjort med ett kantoppslag. Omskrivningen er
O(N2)O(N^2), som er polynomisk.

Konklusjon. Hamiltonsykel p\leq_p RUNDE-MED-BUDSJETT, så
RUNDE-MED-BUDSJETT er minst like vanskelig som Hamiltonsykel. Kunne vi løst
RUNDE-MED-BUDSJETT i polynomisk tid, kunne vi løst Hamiltonsykel i polynomisk
tid.

---

Og her er den samme oppgaven besvart feil vei — en midtnivåbesvarelse:

«Jeg reduserer RUNDE-MED-BUDSJETT til Hamiltonsykel: gitt en
RUNDE-med-budsjett-forekomst lager jeg en graf der jeg legger inn en kant
nøyaktig der gangtiden er 1. Da svarer Hamiltonsykel på grafen ja hvis og bare
hvis det finnes en runde innenfor budsjettet. Altså er RUNDE-MED-BUDSJETT
vanskelig.»

Hva som er bra nok: omskrivningen er faktisk gjennomtenkt og korrekt
beskrevet — kanter der gangtiden er 1 — og kandidaten har sett sammenhengen
mellom de to problemene. Sensorpraksis er at en godt beskrevet reduksjon gir
uttelling selv når retningen er snudd, så dette er ikke en nullbesvarelse. Det er
en ekte midtnivåbesvarelse.

Hva som mangler: slutningen i siste setning følger ikke. Det som er vist, er
RUNDE-MED-BUDSJETT p\leq_p Hamiltonsykel, altså at RUNDE-MED-BUDSJETT ikke er
vanskeligere enn
Hamiltonsykel. Å oversette et problem til noe vanskelig gjør
ikke problemet vanskelig — du kan alltid oversette et lett problem til et
vanskelig.

Rettelsen er én setning: bytt om hva som er inndata og hva som konstrueres.
Start med en Hamiltonsykel-forekomst, bygg en RUNDE-forekomst av den, som i
besvarelsen over. Alt annet i besvarelsen kan stå.

Poengtrapp-notat. Hovedmomentet er retningen, og det gir mest. Deretter
kommer konstruksjonen, så argumentet for at svaret blir det samme begge veier
(«hvis og bare hvis»), og til slutt at omskrivningen er polynomisk. Det siste
leddet glemmes ofte, og det er en reell del av definisjonen — en omskrivning som
selv tar eksponentiell tid, viser ingenting.

📝Oppgave 4
Sjanger L

Marker sant eller usant, og begrunn hver med én setning.

a) Hvis vi reduserer vårt problem XX til et NP-komplett problem, har vi
vist at XX er NP-hardt.
b) Hvis ApBA \leq_p B og BB kan løses i polynomisk tid, kan AA løses i
polynomisk tid.
c) Alle NP-komplette problemer kan reduseres til hverandre i polynomisk tid.
d) En reduksjon som selv tar eksponentiell tid, er like god så lenge
omskrivningen er korrekt.

Reduksjonsretningen

For å vise at et problem XX er vanskelig: reduser fra et kjent vanskelig
problem til XX, altså kjent-vanskelig pX\leq_p X.

Motsatt vei — XpX \leq_p kjent-vanskelig — viser bare at XX ikke er vanskeligere
enn det kjente problemet, og det gjelder for et hvilket som helst problem i NPNP.
Å snu retningen er felle #8, og den er trukket for eksplisitt.

NP-hard mot NP-komplett
NP-hard: minst like vanskelig som alle problemer i NPNP — alle i NPNP kan
reduseres til det. Problemet trenger ikke selv ligge i NPNP.

NP-komplett: NP-hard og i NPNP. Det er den strengeste av de to, og det er
denne klassen Hamiltonsykel, CLIQUE og de andre navngitte problemene tilhører.

Konsekvensen av å løse ett NP-komplett problem

Løser du ett NP-komplett problem i polynomisk tid, har du løst dem alle — og
dermed er P=NPP = NP.

Begrunnelsen er reduksjonene: alle problemer i NPNP kan reduseres polynomisk til
det ene problemet du løste, og to polynomiske steg etter hverandre er fortsatt
polynomisk. Dette er et fast sant/usant-punkt.

CLIQUE

Spørsmålet om en urettet graf har en mengde på kk noder der alle par er
naboer. NP-komplett.

Sertifikatet er de kk nodene, og verifikatoren sjekker alle k(k1)/2k(k-1)/2 par:
O(k2)O(k^2) kantoppslag. Merk at kravet gjelder alle par, ikke bare naboer i en
rekkefølge — her finnes ingen mod N.

Knapsack og Sudoku

To andre navngitte NP-komplette problemer. Knapsack spør om et utvalg
gjenstander med vekt og verdi kan gi minst en gitt verdi innenfor en vektgrense.
Sudoku (generalisert til n×nn \times n) spør om et delvis utfylt brett kan
fullføres lovlig.

Begge er lette å kontrollere og vanskelige å løse — det samme mønsteret
som Hamiltonsykel. I dette emnet skal du kjenne navnene og mønsteret, ikke kunne
reduksjonene mellom dem.

Løkke 4 — hva som ikke er pensum her (ca. 10 min)

Denne bolken er den korteste i kapitlet og kanskje den mest lønnsomme. Den
handler om hva du ikke skal lese.

IN2010 er et datastruktur-tungt implementasjonsemne. Tyngdepunktet ligger på å
håndkjøre strukturer feilfritt og skrive presis pseudokode for graf-, tre- og
hashing-algoritmer. Flere av de temaene som fyller kapitler i en generisk
algoritmebok — og som er kjernestoff i algoritmeemner ved andre institusjoner —
er ikke en del av dette emnet.

Det er ikke det samme som at de er uviktige i faget algoritmer. Det betyr at de
ikke testes her, og at timene er bedre brukt et annet sted.

📝Oppgave 5
Sjanger L

Du har fire kvelder igjen før eksamen og finner en algoritmebok med
disse fem kapitlene igjen ulest. Ranger dem etter forventet poengutbytte på
eksamen i dette emnet, og begrunn kort.

a) «Flytnettverk og maks-flyt»
b) «Hashtabeller: åpen adressering og lineær probing»
c) «Rekurrensligninger og masterteoremet»
d) «Balanserte søketrær: AVL og rød-svart»
e) «Dynamisk programmering: ryggsekk og lengste felles delsekvens»

📝Oppgave 6
Sjanger L, eksamensnivå

En student skriver:

«Jeg har funnet en algoritme som løser CLIQUE på grafer med under 30 noder på
under ett sekund. Siden CLIQUE er NP-komplett, har jeg dermed vist at
P=NPP = NP

a) Hva er galt med slutningen?
b) Hva ville faktisk vært nok til å vise P=NPP = NP?
c) Hva ville det betydd for de andre NP-komplette problemene?

📝Oppgave 7
Sjanger L

For hvert problem: er det i PP, er det NP-komplett, eller kan det
ikke avgjøres av det som står i oppgaven? Begrunn med én setning.

a) Finnes det en sti fra uu til vv i en urettet graf?
b) Finnes det en rundtur som besøker hver node nøyaktig én gang?
c) Finnes det et spenntre med totalvekt under BB?
d) Finnes det en mengde på kk noder der alle par er naboer?

Begrepsbank

Begrepsbanken er flashcard-/repetisjonsstoff — den gjentar det du nettopp har
lest. Hopp trygt over ved førstegangslesing; tidsanslaget for kapitlet gjelder
kjernestoffet.

De vanligste sant/usant-fellene om P og NP
Usant: «NPNP betyr ikke-polynomisk». «Det er bevist at P=NPP = NP». «Det er
bevist at PNPP \neq NP». «Alle avgjørelsesproblemer ligger i PP eller NPNP».

Sant: «PNPP \subseteq NP». «En polynomisk verifikator viser at problemet er i
NPNP». «Alle NP-komplette problemer kan reduseres til hverandre». «Løser du ett
NP-komplett problem i polynomisk tid, er P=NPP = NP».

Åtte punkter, fire av hver. Det er hele Del 1-pensumet i denne bolken.

Verifikatorens tre kontroller for en rundtur

1. Lengde: har sertifikatet nøyaktig NN noder?
2. Distinkthet: forekommer noen node to ganger?
3. Kanter: er hvert par som følger etter hverandre en kant — inkludert
(C[N-1], C[0]) via (i + 1) mod N?

Rekkefølgen er ikke tilfeldig: den billigste kontrollen står først. Alle tre
kreves, og det er nummer 3 som ryker oftest.

Hvorfor verifikatoren må være polynomisk

Kravet for medlemskap i NPNP er at kontrollen kan gjøres i polynomisk tid — ikke
at den er rask i noen praktisk forstand.

O(N)O(N), O(N2)O(N^2) og O(k2)O(k^2) er alle gode nok. En «verifikator» som prøver alle
rekkefølger for å se om sertifikatet passer, er derimot O(N!)O(N!) og viser
ingenting.

Utenfor IN2010-pensum

Fem temaer som ikke testes i dette emnet, og som ingen kapittel i boka bygger på:
dynamisk programmering, maks-flyt (Ford-Fulkerson), masterteoremet og
rekurrensligninger, Floyd-Warshall, og Gale-Shapley.

De er kjernestoff i flere andre algoritmeemner og fyller store deler av en
generisk algoritmebok. Her gir de null poeng. Kjøretidsanalyse gjøres ved
løkketelling.

Tyngre her enn i en generisk algoritmebok
Hashing med lineær probing: 7 av 7 sett (100 %), testet både som håndkjøring
og som pseudokode med mod N-wraparound. AVL-rotasjoner: håndkjøres, med
krav om antall enkle rotasjoner og rotverdi.

Begge undervurderes systematisk av studenter som kommer fra et annet
algoritmepensum, der de er faktapunkter snarere enn utførelsesferdigheter.

Repetisjon — kapitlet på ett kort

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 Universitetet i Oslo. Dette er ikke offisielt studiemateriell. Les mer.