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.
NP-stoffet er med i 4 av 7 sett (57 %), men frekvensen er fallende: det
var tungt i de fire eldste settene (2018 til 2021) og har vært fraværende i de
tre nyeste (2022 til 2024). Sjangeren er
- Sjanger L — NP-kompletthet, altså at du svarer på faste fakta om
klassene og , skriver en verifikator som kontrollerer et foreslått
svar, eller vurderer hvilken vei en reduksjon må gå.
Prioritet: kjenne (nivå 3 av tre — «må sitte» er nivå 1, «kunne» er nivå 2).
Det betyr ikke «hopp over». Det betyr at stoffet er lite, at det kan komme, og at
det er billig å sikre: kommer det, kommer det nesten alltid som sant/usant på
Del 1, den auto-rettede delen av eksamen, og der er faktapunktene faste og få.
Verifikator-oppgaven som Del 2-oppgave er belagt i ett sett — høsten 2020,
som var korona-hjemmeeksamen med alle hjelpemidler. Den formen speiler ikke
dagens eksamen, så bruk verifikatoren først og fremst som et middel til å forstå
hva betyr, ikke som en oppgavetype du må regne med.
Kapitlet har en jobb til, og den er kanskje viktigere: det siste avsnittet
sier hvilke tunge algoritmetemaer som ikke er pensum i dette emnet. Leser du
en generisk algoritmebok, eller snakker du med noen som har tatt et
algoritmeemne ved en annen institusjon, risikerer du å bruke uker på stoff som
aldri kommer på denne eksamen. Den avgrensningen er verdt like mye som
NP-teorien.
Slik er kapitlet lagt opp (55 min): fire løkker, med et pausepunkt etter
løkke 2. C er en god og vanlig karakter, og de faste faktapunktene her er blant
de enkleste poengene i hele faget.
Forkunnskaper
- kap. 1.4 — der møtte du klassene og , 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 og eksponentiell vekst som . 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.1 — mod N-regningen. Den kommer tilbake her, i
den siste kanten av en rundtur.
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
samler.
er å få utlevert et foreslått svar og avgjøre om det holder.
Skillet er hele grunnlaget for og : handler om å løse raskt, om
å kontrollere raskt. At de to skulle være det samme, er akkurat det åpne
spørsmålet .
Kjøretid på formen for en fast konstant : , ,
, og så videre. Alt du har møtt i denne boka, ligger her.
Grensen går ved eksponentiell vekst. og er ikke polynomisk,
og forskjellen er ikke akademisk: for er rundt to hundre tusen,
mens er over en trillion.
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: betyr ikke «ikke-polynomisk» — det
står for «ikke-deterministisk polynomisk». Og er ikke det samme som «ikke i
»: siden , ligger alle de lette problemene også i .
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åstand | Svar |
|---|---|
| sant | |
| Finnes det en verifikator med polynomisk kjøretid, ligger problemet i | sant |
| Alle NP-komplette problemer kan reduseres til hverandre i polynomisk tid | sant |
| Løser du ett NP-komplett problem i polynomisk tid, følger | sant |
| Det er bevist at | usant |
| Det er bevist at | usant |
| Alle avgjørelsesproblemer ligger i eller i | usant |
| 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
eller i — for eksempel problemer der selv en foreslått løsning ikke kan
kontrolleres raskt. Og «» er en forkortelse mange leser feil, med den følgen
at de svarer «usant» på .
(Innstegsoppgave, sjanger L — NP-kompletthet, altså at du svarer på faste fakta
om og , skriver en verifikator eller vurderer en reduksjonsretning.)
Marker sant eller usant, og skriv én setnings begrunnelse for hver.
a) Et problem i ligger også i .
b) er samlingen av problemer som ikke kan løses i polynomisk tid.
c) Det er bevist at .
d) Finnes det en verifikator med polynomisk kjøretid for et problem, ligger
problemet i .
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 , 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.
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.
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 .
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.
nabomatrise, slik at
ErKant(G, u, v) er . er antall noder.Sertifikatet
C er et array med noder, indeks fra 0. Hjelpearrayet sett har énplass 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 santGrunnideen 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 elementer, med
arbeid inni. Det gir når grafen er en nabomatrise. Med nabolister koster
hvert kantoppslag opptil , så verifikatoren blir — 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.
En urettet graf har nodene , , , , og kantene –, –,
–, –, – og –. Nabolistene er
P: Q, R, T
Q: P, R
R: P, Q, S
S: R, T
T: P, SKjør VerifiserHamiltonsykel på de to sertifikatene
og , og oppgi svaret for hver.
Begge sertifikatene har lengde 5, som er , 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:
Steg i | Par (C[i], C[(i+1) mod N]) | Er det en kant? | Status |
|---|---|---|---|
| 0 | (P, Q) | ja | fortsett |
| 1 | (Q, R) | ja | fortsett |
| 2 | (R, S) | ja | fortsett |
| 3 | (S, T) | ja | fortsett |
| 4 | (T, P) — siste par, (i+1) mod N gir 0 | ja | fortsett |
Svar: sant. er en Hamiltonsykel. Fem kantoppslag, ett per node.
Sertifikat 2:
Steg i | Par (C[i], C[(i+1) mod N]) | Er det en kant? | Status |
|---|---|---|---|
| 0 | (Q, P) | ja | fortsett |
| 1 | (P, R) | ja | fortsett |
| 2 | (R, S) | ja | fortsett |
| 3 | (S, T) | ja | fortsett |
| 4 | (T, Q) — siste par, (i+1) mod N gir 0 | nei | avvist |
Svar: usant. er ikke en Hamiltonsykel.
Se nøye på hva som skiller de to. er en helt gyldig sti gjennom alle
fem nodene — til til til til , hvert steg langs en kant. Den
eneste feilen er at den ikke kommer hjem: det finnes ingen kant fra tilbake
til .
Fellenote. En verifikator uten mod N i siste steg ville godkjent . 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 mens letingen ikke har
noen kjent polynomisk algoritme — det er hele innholdet i påstanden «Hamiltonsykel
ligger i ».
Bruk samme graf som i eksempel 1: nodene , , , , og
kantene –, –, –, –, –, –.
a) Kjør verifikatoren på sertifikatet . Hvilken av de tre
kontrollene stopper den, og hvorfor?
b) Kjør verifikatoren på sertifikatet . Hva skjer?
c) Finn selv et sertifikat som verifikatoren godkjenner, og som ikke er
.
C[(i + 1) mod N] — uttrykket som gjør at siste steg i løkka sammenligner densiste 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.
En klikk i en urettet graf er en mengde noder der alle par
er naboer. Problemet CLIQUE spør: finnes det en klikk med 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 .
— naturlig pausepunkt —
Så langt har du de faste faktapunktene og verifikatoren. De to siste løkkene er
kortere: én om hvilken vei en reduksjon må gå, og én om hva du ikke trenger å
lese.
Løkke 3 — reduksjonsretningen (ca. 14 min)
Tenk deg at du har en maskin som løser problem lynraskt. Du står med et
problem du ikke får til. Hvis du kan skrive om enhver -oppgave til en
-oppgave — raskt — så kan du bruke maskinen til å løse også.
Det er nøyaktig hva betyr. Og legg merke til hva den slutningen
sier: er minst like vanskelig som . Maskinen som løser , løser
nemlig 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.
En polynomisk omskrivning som gjør enhver forekomst av problem om til en
forekomst av problem , slik at svaret blir det samme.
Finnes en slik omskrivning, er minst like vanskelig som : har du en
rask løser for , får du en rask løser for ved å skrive om først. Selve
omskrivningen må være polynomisk, ellers forsvinner argumentet.
et kjent vanskelig problem til . Altså: kjent-vanskelig .
Skrevet ut som resonnement:
- Riktig vei. Vi vet at Hamiltonsykel er NP-komplett. Vi skriver om enhver
Hamiltonsykel-oppgave til en -oppgave i polynomisk tid. Da ville en rask
løser for gitt en rask løser for Hamiltonsykel. Altså er minst like
vanskelig som Hamiltonsykel. er vanskelig.
- Feil vei. Vi skriver om enhver -oppgave til en Hamiltonsykel-oppgave.
Da ville en rask løser for Hamiltonsykel gitt en rask løser for . Det viser
at ikke er vanskeligere enn Hamiltonsykel — altså at er minst like
lett. Om 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.
Et vaktselskap definerer problemet RUNDE-MED-BUDSJETT: gitt et sett poster,
en gangtid mellom hvert par av poster, og et tidsbudsjett — finnes det en
runde som besøker hver post nøyaktig én gang, ender der den startet, og bruker
til sammen høyst ?
Vis at RUNDE-MED-BUDSJETT er minst like vanskelig som Hamiltonsykel.
vi reduserer fra det kjente vanskelige problemet til det nye:
Hamiltonsykel RUNDE-MED-BUDSJETT.
Ledd 2 — omskrivningen. Vi får en graf med noder og skal avgjøre om
den har en Hamiltonsykel. Vi bygger en RUNDE-MED-BUDSJETT-forekomst slik:
- hver node i blir en post,
- for hvert par poster settes en gangtid: 1 hvis paret er en kant i ,
og 2 hvis det ikke er det,
- tidsbudsjettet settes til .
Ledd 3 — hvorfor svaret blir det samme. En runde besøker poster og går
strekninger. Bruker den bare strekninger som koster 1, blir totalen nøyaktig
; bruker den én eneste strekning til 2, blir totalen minst .
Altså: det finnes en runde innenfor budsjettet hvis og bare hvis det
finnes en runde som bare bruker kanter fra — og det er nøyaktig en
Hamiltonsykel i .
Ledd 4 — at omskrivningen er polynomisk. Vi setter én gangtid per par poster,
altså tall, hvert avgjort med ett kantoppslag. Omskrivningen er
, som er polynomisk.
Konklusjon. Hamiltonsykel 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 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.
Marker sant eller usant, og begrunn hver med én setning.
a) Hvis vi reduserer vårt problem til et NP-komplett problem, har vi
vist at er NP-hardt.
b) Hvis og kan løses i polynomisk tid, kan 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.
For å vise at et problem er vanskelig: reduser fra et kjent vanskelig
problem til , altså kjent-vanskelig .
Motsatt vei — kjent-vanskelig — viser bare at ikke er vanskeligere
enn det kjente problemet, og det gjelder for et hvilket som helst problem i .
Å snu retningen er felle #8, og den er trukket for eksplisitt.
reduseres til det. Problemet trenger ikke selv ligge i .
NP-komplett: NP-hard og i . Det er den strengeste av de to, og det er
denne klassen Hamiltonsykel, CLIQUE og de andre navngitte problemene tilhører.
Løser du ett NP-komplett problem i polynomisk tid, har du løst dem alle — og
dermed er .
Begrunnelsen er reduksjonene: alle problemer i 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.
Spørsmålet om en urettet graf har en mengde på noder der alle par er
naboer. NP-komplett.
Sertifikatet er de nodene, og verifikatoren sjekker alle par:
kantoppslag. Merk at kravet gjelder alle par, ikke bare naboer i en
rekkefølge — her finnes ingen mod N.
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 ) 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.
Fem temaer som ikke testes i dette emnet. Ingen kapittel i denne boka bygger på
dem, og de har ikke vært på noen av de sju settene i arkivet.
- Dynamisk programmering. Teknikken med å bygge opp en tabell av delløsninger
— ryggsekkproblemet, lengste felles delsekvens, myntveksling. Dette er en tung
bolk i mange algoritmeemner, og den er fraværende her.
- Maks-flyt. Flytnettverk og Ford-Fulkerson-metoden, med snitt og
restnettverk. Ikke pensum.
- Masterteoremet og rekurrensligninger. Metoden for å løse
. Kjøretidsanalyse i dette emnet gjøres ved
løkketelling — se kap. 1.2 — og rekursive algoritmer
analyseres ved å telle arbeidet per nivå eller si «hver node besøkes én gang».
- Floyd-Warshall. Alle-par-korteste-vei ved en trippelnøstet løkke over
mellomnoder. Korteste vei her er BFS, Dijkstra, Bellman-Ford og
DAG-metoden — se kap. 6.2.
- Gale-Shapley. Algoritmen for stabil matching mellom to grupper. Ikke
pensum.
Hvorfor dette står i boka: en student som leser en generisk algoritmebok fra
perm til perm, eller som følger et pensum fra et algoritmeemne ved en annen
institusjon, kan bruke uker på nettopp disse fem. De er velskrevne, de er
vanskelige, og de føles som kjernestoff. Her gir de null poeng.
Og motsatt vei — dette er tyngre her enn du kanskje tror:
- Hashing med lineær probing er med i 7 av 7 sett (100 %), og testes både
som håndkjøring og som pseudokode. I flere andre algoritmeemner er hashing et
faktapunkt; her er det en utførelsesferdighet. Se
kap. 3.1 og kap. 3.3.
- AVL-rotasjoner håndkjøres, med krav om antall enkle rotasjoner og rotverdi.
Se kap. 4.3.
Timene du sparer på listen over, er godt brukt på de to punktene her.
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»
- Å reversere reduksjonsretningen. Å redusere ditt problem til noe
NP-komplett beviser ingenting om ditt problems vanskelighet. Reduser fra det
vanskelige. Felle #8, og eksplisitt trukket for i arkivet.
- Å glemme siste kant i rundturen. En verifikator uten (C[N-1], C[0]), altså
uten mod N i siste steg, godkjenner stier som ikke lukker seg. Felle #7.
- Å tro at eller er avgjort. Begge påstandene om at noe
er bevist, er usanne. Dette er det aller enkleste punktet i bolken, og det er
også det som oftest kommer.
- Å forveksle med «ikke i ». , så alle de lette
problemene ligger også i . Forkortelsen betyr «ikke-deterministisk
polynomisk», ikke «ikke-polynomisk».
- Å glemme at omskrivningen i en reduksjon må være polynomisk. Det er en del
av definisjonen, ikke en detalj — og det er det leddet som oftest mangler i
ellers riktige besvarelser.
- Å la verifikatoren lete etter et svar. En verifikator som prøver
alternativer, er ikke en verifikator. Den får sertifikatet utlevert og
kontrollerer det, én gjennomgang.
- Å kopiere rundtur-løkka inn i en klikk-verifikator. En klikk krever at
alle par er naboer, ikke bare de som følger etter hverandre — og der finnes
ingen mod N.
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
.»
a) Hva er galt med slutningen?
b) Hva ville faktisk vært nok til å vise ?
c) Hva ville det betydd for de andre NP-komplette problemene?
For hvert problem: er det i , 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 til 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 ?
d) Finnes det en mengde på 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.
bevist at ». «Alle avgjørelsesproblemer ligger i eller ».
Sant: «». «En polynomisk verifikator viser at problemet er i
». «Alle NP-komplette problemer kan reduseres til hverandre». «Løser du ett
NP-komplett problem i polynomisk tid, er ».
Åtte punkter, fire av hver. Det er hele Del 1-pensumet i denne bolken.
1. Lengde: har sertifikatet nøyaktig 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.
Kravet for medlemskap i er at kontrollen kan gjøres i polynomisk tid — ikke
at den er rask i noen praktisk forstand.
, og er alle gode nok. En «verifikator» som prøver alle
rekkefølger for å se om sertifikatet passer, er derimot og viser
ingenting.
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.
og som pseudokode med
mod N-wraparound. AVL-rotasjoner: håndkjøres, medkrav 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.
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.