Tilbake
1.4

1.4 Kjøretids- og teori-fakta — sant/usant og antigjettings-strategi

De faste sant/usant-sannhetene sensor forventer sikkert (kjøretid, heap, sortering, P/NP) — kjernen i Del 1s antigjettings-regime, der usikkerhet straffes til null.

55 min
9 oppgaver
Kjøretids-teori-faktasant/usantantigjettings-strategi
Din fremgang i kapitlet
0 / 9 oppgaver

Forkunnskaper

- kap. 1.1OO-notasjonen, vekstordningen, og den faste
fella om at bedre asymptotikk ikke betyr færre steg.
- kap. 1.2 — løkketellingen. Flere av faktaene her
begrunnes ved å telle løkker, og du bør kunne følge begrunnelsen.

Ingenting annet forutsettes. Strukturene som nevnes underveis, introduseres i
den grad påstandene krever det.

Notasjons- og pseudokodeliste

Løkke 1 — hva skaleringen faktisk gjør med deg (ca. 10 min)

Tenk deg en sant/usant-blokk med 32 påstander, skalert med
2max(n16, 0)2 \cdot \max(n - 16,\ 0), der nn er antall riktige. Slik ser regnskapet ut:

RiktigePoeng
160
172
208
2416
2824
3232

De 16 første riktige svarene gir ingenting. Det er nettopp meningen: en som
kaster mynt og kron på alle 32 lander i snitt på 16, og skal etter denne
konstruksjonen ende på null.
Helt null blir det likevel ikke, og grunnen er verdt et blikk: formelen har et
gulv ved 0. Treffer du 12 av 32, kappes minusen bort — men treffer du 20, teller
de åtte ekstra fullt ut. Uflaks straffes altså mindre enn flaks belønnes, og
ren gjetting gir i snitt 2,2 poeng. Det endrer ikke rådet: 2,2 av 32 er ingen

strategi, og tida er bedre brukt på å gjøre flere fakta sikre.
Hva betyr det i praksis? Tre ting, og det er verdt å ha dem klart for seg før
du sitter i eksamenslokalet:

1. Blankt og feil teller likt. I alle skaleringene som er brukt — både
2max(n16, 0)2 \cdot \max(n-16,\ 0)-formen og den eldre «minus ett for feil eller
ubesvart»-formen — er det ingen ekstra straff for å svare feil framfor å la
være. Du blir altså ikke fattigere av å fylle ut.
2. Men gjetting løfter deg ikke. Over en hel blokk jevner myntkastene seg ut

mot terskelen. Det som flytter poengsummen din, er utelukkende punkter du kan
sikkert.

3. Konsekvensen for lesingen: hvert faktum du gjør sikkert, er verdt to
poeng, og du kjenner dem alle på forhånd. Det er den beste
avkastningen per lest minutt i hele faget.
Og den andre halvdelen av regelen: på de vanlige korte svarene — der du
skal skrive et OO-uttrykk, et tall eller en kort liste — er det ingen skalering
i det hele tatt, og ubesvart teller som feil. Der svarer du alltid, uansett hvor
usikker du er.

📝Oppgave 1

(Innstegsoppgave, sjanger C — kjøretids- og teorifakta, altså sant/usant-punkter
på den auto-rettede delen.) En sant/usant-blokk har 22 punkter og skaleres med
2max(n11, 0)2 \cdot \max(n - 11,\ 0).

a) Hvor mange poeng får du med 11 riktige? Med 14? Med 20?
b) Du kan 15 av påstandene sikkert. Hva er poengsummen din hvis du bare
svarer på dem?
c) Hva er den høyeste poengsummen blokken kan gi?

Løkke 2 — kjøretidsfaktaene (ca. 12 min)

Første bolk er de reneste kjøretidspåstandene. De begrunnes alle med telling, så
du kan rekonstruere dem hvis du blir i tvil under eksamen.

Flettesortering er O(n log n)
Flettesortering splitter arrayet i to halvdeler, sorterer hver halvdel og fletter
dem sammen. Splittingen kan gjøres log2n\log_2 n ganger før bitene har ett element,
og hvert nivå koster O(n)O(n) å flette.

log2n niva˚er×O(n) per niva˚=O(nlogn)\log_2 n \text{ nivåer} \times O(n) \text{ per nivå} = O(n \log n)

Dette gjelder verste tilfelle, ikke bare forventet. Det er en av de få
sorteringene der de to sammenfaller, og det er derfor den brukes som referanse.

Å sjekke om et array er sortert er O(n)

Gå gjennom arrayet én gang og sammenlign hvert element med det neste. Er alle
naboparene i orden, er hele arrayet sortert. Det tar n1n - 1 sammenligninger,
altså O(n)O(n).

Faktumet dukker opp som sant/usant-punkt, og det brukes som byggekloss i
Del 2-løsninger: «sortér i O(nlogn)O(n \log n) og skann i O(n)O(n)» er en fullt lovlig
strategi der den lineære løsningen ikke finnes.

Binærsøk krever direkte indeksering

Binærsøk hopper til midten av søkeområdet, kaster halvparten, og gjentar — derfor
O(logn)O(\log n). Men det forutsetter at du kan hoppe til et vilkårlig element i
konstant tid.

I et array koster A[i] O(1)O(1), så binærsøk er O(logn)O(\log n). I en lenket
liste
må du følge pekerne fra starten for å komme til midten, og det koster
O(n)O(n) per hopp — da er binærsøk ikke bare unyttig, det er tregere enn å skanne
listen. Derfor: binærsøk er raskere på array enn på lenket liste.

Kvikksortering er kvadratisk i verste tilfelle

Kvikksortering deler arrayet om et pivotelement. Treffer pivoten omtrent midt på
hver gang, blir det logn\log n nivåer og O(nlogn)O(n \log n) totalt — det forventede
tilfellet.

Men treffer pivoten hver gang ytterst (for eksempel om arrayet allerede er
sortert og du velger første element), blir det nn nivåer, og kjøretiden blir
O(n2)O(n^2). Påstanden «kvikksortering er O(nlogn)O(n \log n) i verste tilfelle» er
derfor usann, og den er en fast distraktor.

✏️Eksempel 1: Fire kjøretidspåstander

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

a) Flettesortering er O(nlogn)O(n \log n) også i verste tilfelle.
b) Binærsøk i en lenket liste med nn elementer er O(logn)O(\log n).
c) Å avgjøre om et array er sortert krever minst O(nlogn)O(n \log n).
d) En algoritme med kjøretid O(n)O(n) kan ikke ha kjøretid O(n2)O(n^2).

a) Sant. Splittingen gir log2n\log_2 n nivåer uansett hvordan dataene ser ut,
og hvert nivå fletter nn elementer. Flettesortering har ingen dårlig input.

b) Usant. Binærsøket trenger å hoppe til midten i konstant tid, og i en
lenket liste koster det O(n)O(n) å komme dit. Selve halveringen gir logn\log n hopp,
men hvert hopp er dyrt — resultatet blir O(n)O(n) i beste fall, og du er like godt
tjent med å skanne listen.

c) Usant. Én gjennomgang av naboparene holder, altså O(n)O(n). Fella er å
tenke «noe med sortering, altså nlognn \log n» — men her skal ingenting sorteres,
bare kontrolleres.

d) Usant. OO er en øvre grense, og øvre grenser kan gjøres slappere: alt
som er O(n)O(n) er også O(n2)O(n^2). Utsagnet høres fornuftig ut, og det er nettopp
derfor det står på eksamen.

Sensorblikket: i (a) er det ordet «også i verste tilfelle» som avgjør, i (b)
er det «lenket liste», i (c) er det «minst», og i (d) er det «kan ikke». Les
sant/usant-punkter ord for ord — det er det mest gjentatte rådet i
sensorveiledningene.

📝Oppgave 2
Sjanger C

Sant eller usant? Begrunn med én setning hver.

a) «Lineær kjøretid» betyr O(n)O(n).
b) En O(nlogn)O(n \log n)-algoritme bruker alltid færre grunnsteg enn en
O(n2)O(n^2)-algoritme på samme input.
c) Kvikksortering har O(nlogn)O(n \log n) i verste tilfelle.

Løkke 3 — heap-faktaene (ca. 15 min)

— naturlig pausepunkt —

Heapen er den strukturen som oftest dukker opp som faktapunkt på Del 1. Her får
du akkurat så mye av den som faktaene krever; hele strukturen, med håndkjøring og
pseudokode, kommer i Del 4.

Hverdagsankeret: tenk på en akuttmottakskø der pasientene ikke tas i
ankomstrekkefølge, men etter alvorlighetsgrad. Du trenger å få tak i den mest
akutte raskt, og du trenger å kunne legge til nye pasienter raskt. Du trenger
ikke å ha hele køen sortert. En heap er strukturen som gir deg nøyaktig det.

Min-heap

Et binærtre som fylles nivå for nivå fra venstre (kalt strukturkravet), og
der hver node er mindre enn eller lik begge barna sine (ordningskravet).

Treet lagres i et array uten pekere: roten på indeks 0, og for elementet på
indeks ii er forelderen på (i1)/2\lfloor (i-1)/2 \rfloor og barna på 2i+12i+1 og
2i+22i+2. Merk indekseringen fra 0 — andre bøker starter på 1 og får andre
formler.

Heap-egenskapen er opp-ned, ikke venstre-høyre

I en heap gjelder ordningen mellom forelder og barn: forelderen er mindre enn
eller lik begge barna i en min-heap. Det er ingen ordning mellom søsken, og ingen
ordning venstre mot høyre.

Dette skiller heapen fra søketreet, der ordningen nettopp er venstre mot høyre.
Å blande de to er felle #9 i bokas register — å forveksle søketre-ordenen med
heap-ordenen.

Det minste i en min-heap ligger i roten

Ordningskravet gjelder hele veien nedover, så ingen node kan være mindre enn
roten. Å lese det minste er derfor O(1)O(1): du slår opp på indeks 0.

Å fjerne det er dyrere, O(logn)O(\log n), fordi strukturen må gjenopprettes
etterpå.

Største element i en min-heap er O(n)

Ordningskravet sier ingenting om hvor det største elementet ligger, annet enn at
det må være et blad. Men en heap med nn elementer har omtrent n/2n/2 blader, og
du må sjekke alle.

Derfor er påstanden «du kan finne det største elementet i en min-heap i
O(logn)O(\log n)» usann — det koster O(n)O(n). Dette er et av de hyppigste
sant/usant-punktene i faget.

Innsetting i en heap er O(log n)

Det nye elementet legges bakerst i arrayet og bobler oppover mot roten så lenge
det er mindre enn forelderen sin. Antall steg er høyden på treet.

Et binærtre med nn noder som fylles nivå for nivå har høyde
log2n\lfloor \log_2 n \rfloor, så innsetting er O(logn)O(\log n) — også i verste
tilfelle.

Å bygge en heap fra et array er O(n)

Det ser ut som nn innsettinger à O(logn)O(\log n), altså O(nlogn)O(n \log n). Men bygger du
nedenfra og opp, gjør de fleste nodene nesten ingenting: halvparten er blader og
flytter seg ikke i det hele tatt, en firedel flytter seg høyst ett nivå, og så
videre. Summen blir O(n)O(n).

Påstanden «å bygge en heap fra et vilkårlig array tar O(nlogn)O(n \log n)» er derfor
usann — den er den vanligste distraktoren på hele Del 1.

📜Over halvparten av elementene ligger nederst

Et binærtre som fylles nivå for nivå har 2d2^d noder på nivå dd: 1 i roten, 2 på
nivå 1, 4 på nivå 2, 8 på nivå 3.

Summen av alle nivåene over det nederste er
1+2+4++2d1=2d11 + 2 + 4 + \cdots + 2^{d-1} = 2^d - 1, altså ett færre enn antall noder på
det nederste nivået alene.

Konsekvensene som testes:

- Over halvparten av elementene ligger på det nederste nivået.
- De to nederste nivåene inneholder til sammen omtrent tre firedeler av alle
elementene.
- Høyden vokser bare logaritmisk: en heap med en million elementer har høyde 19.

Det er dette som gjør det billig å bygge en heap nedenfra: de fleste nodene har
knapt noe å flytte seg.

En min-heap blir ikke en max-heap av å reversere arrayet

Å snu arrayet snur ikke forelder-barn-relasjonene, for de er bestemt av
indeksformlene (i1)/2\lfloor (i-1)/2 \rfloor, 2i+12i+1 og 2i+22i+2 — ikke av innholdet.
Etter reversering peker formlene på helt andre elementer, og ordningskravet
gjelder ingen vei.

Påstanden er derfor usann, og den er en fast distraktor. Vil du ha en
max-heap, må du bygge den med motsatt sammenligning.

Et balansert søketre kan brukes som prioritetskø

Et balansert søketre — for eksempel et AVL-tre — holder høyden på O(logn)O(\log n).
Det minste elementet ligger lengst til venstre og finnes i O(logn)O(\log n), og
innsetting er O(logn)O(\log n).

Påstanden «et AVL-tre kan brukes som prioritetskø med samme orden som en heap»
er derfor sann. Heapen vinner likevel i praksis, på konstantfaktorer og
minnebruk — men ikke i OO-klasse.

✏️Eksempel 2: Seks heap-påstander

Marker sant eller usant med én setnings begrunnelse.

a) Et vilkårlig array kan gjøres om til en heap i O(n)O(n).
b) Innsetting i en heap er O(logn)O(\log n) i verste tilfelle.
c) Du kan finne det største elementet i en min-heap i O(logn)O(\log n).
d) En min-heap blir en max-heap hvis du reverserer arrayet.
e) Et AVL-tre kan brukes som prioritetskø med samme kjøretidsorden som en
heap.
f) I en min-heap er venstre barn alltid mindre enn høyre barn.

a) Sant. Bygger du nedenfra og opp, gjør halvparten av nodene ingenting,
en firedel flytter seg høyst ett nivå, og summen blir lineær.

b) Sant. Elementet bobler oppover høyst så mange nivåer som treet er høyt, og
høyden er log2n\lfloor \log_2 n \rfloor.

c) Usant. Det største elementet er et blad, men ordningen sier ikke hvilket.
Du må sjekke alle de omtrent n/2n/2 bladene, altså O(n)O(n).

d) Usant. Forelder-barn-relasjonene er bestemt av indeksene, ikke av
innholdet. Reversering ødelegger ordningen i stedet for å snu den.

e) Sant. Høyden er O(logn)O(\log n), det minste ligger lengst til venstre, og
innsetting er O(logn)O(\log n) — samme orden som heapen på begge operasjoner.

f) Usant. Heapen ordner bare forelder mot barn, aldri søsken mot hverandre.
Dette er felle #9 — å forveksle heap-ordenen (opp-ned) med søketre-ordenen
(venstre-høyre).

Fasitmønsteret er verdt å merke seg: tre sanne og tre usanne. En ekte
sant/usant-blokk blander, og en kandidat som svarer «usant» på alt fordi «det
pleier å være fella», lander på terskelen og får null.

📝Oppgave 3
Sjanger C

Sant eller usant? Begrunn hvert svar med én setning.

a) I en min-heap med nn elementer ligger over halvparten av elementene på
det nederste nivået.
b) Å lese ut det minste elementet i en min-heap uten å fjerne det er
O(logn)O(\log n).
c) Høyden til en heap med en million elementer er under 25.

Løkke 4 — P- og NP-faktaene (ca. 10 min)

Den siste bolken er kompleksitetsteori. Den har vært på retur — den var tung i
settene fra 2018 til 2021 og fraværende i de tre ferskeste — men når den kommer,
kommer den som lettjente sant/usant-poeng. Det er noen få setninger, og de er
verdt å kunne.

Hverdagsankeret: noen problemer er lette å kontrollere selv om de er
vanskelige å løse. Å finne en rundtur som besøker hver by nøyaktig én gang i
et stort veinett er en beryktet vanskelig oppgave. Men får du en foreslått rute i
hånden, tar det bare noen minutter å sjekke om den faktisk er lovlig. Det er
skillet hele teorien handler om.

Klassen P

Problemene som kan løses av en algoritme med polynomisk kjøretid — altså
O(nk)O(n^k) for en fast kk: O(n)O(n), O(n2)O(n^2), O(n3)O(n^3) og så videre.

Alt du har møtt i denne boka så langt, ligger i PP. Grensen går ved
eksponentiell tid som O(2n)O(2^n), som ikke er polynomisk.

Klassen NP

Problemene der et foreslått ja-svar kan kontrolleres i polynomisk tid. Får du
utlevert en løsning, kan du sjekke om den holder, raskt — selv om du ikke vet
hvordan du skulle funnet den.

Merk at NPNP ikke betyr «ikke-polynomisk». Det står for «ikke-deterministisk
polynomisk», og definisjonen handler om kontroll, ikke om løsning.

Sertifikat og verifikator

Et sertifikat er det foreslåtte svaret — for eksempel en konkret rundtur. En
verifikator er prosedyren som kontrollerer det.

Kravet for at et problem skal være i NPNP, er at det finnes en verifikator med
polynomisk kjøretid. Å skrive en slik verifikator er en oppgavetype i seg selv,
og den kommer i Del 7.

📜P ligger inne i NP
PNPP \subseteq NP

Begrunnelsen er kort: kan du løse problemet i polynomisk tid, kan du også
kontrollere et foreslått svar i polynomisk tid — du løser det bare selv og
sammenligner. Alt i PP er derfor også i NPNP.

Påstanden «PNPP \subseteq NP» er dermed sann, og den er et fast punkt.

NP-komplett

De vanskeligste problemene i NPNP: et problem er NP-komplett hvis det ligger i
NPNP, og alle andre problemer i NPNP kan reduseres til det i polynomisk tid.

To konsekvenser som testes direkte: alle NP-komplette problemer er
polynomtidsreduserbare til hverandre (sant), og løser du ett av dem i
polynomisk tid, har du løst dem alle — altså P=NPP = NP (sant).

Polynomisk reduksjon
ApBA \leq_p B betyr at problem AA kan gjøres om til problem BB med en
polynomisk omskrivning. Da er BB minst like vanskelig som AA: kan du løse
BB raskt, kan du løse AA raskt.

Retningen er alt. Skal du vise at et nytt problem er vanskelig, reduserer du
fra et kjent vanskelig problem til ditt. Å gjøre det motsatt beviser
ingenting — det er felle #8 i bokas register.

Statusen til P mot NP

Det er ikke bevist at P=NPP = NP, og det er ikke bevist at
PNPP \neq NP. Spørsmålet er åpent.

Begge påstandene «det er bevist at P=NPP = NP» og «det er bevist at PNPP \neq NP»
er derfor usanne. Dette er det enkleste punktet i hele bolken, og det er
også det som oftest kommer.

✏️Eksempel 3: Fem påstander om P og NP

Marker sant eller usant med én setnings begrunnelse.

a) PNPP \subseteq NP.
b) Det er bevist at PNPP \neq NP.
c) Alle NP-komplette problemer kan reduseres til hverandre i polynomisk tid.
d) Hvis noen finner en polynomisk algoritme for ett NP-komplett problem, så
er P=NPP = NP.
e) Alle avgjørelsesproblemer ligger enten i PP eller i NPNP.

a) Sant. Kan du løse et problem raskt, kan du også kontrollere et foreslått
svar raskt — bare løs det selv og sammenlign.

b) Usant. Ingenting er bevist noen av veiene. Spørsmålet er åpent, og det er
et av de mest kjente åpne problemene i faget.

c) Sant. Det følger av definisjonen: alle problemer i NPNP kan reduseres til
et hvilket som helst NP-komplett problem, og NP-komplette problemer ligger selv i
NPNP.

d) Sant. Alle andre NPNP-problemer kan reduseres til det i polynomisk tid, så
en rask løsning på ett gir en rask løsning på alle.

e) Usant. Det finnes problemer utenfor NPNP — for eksempel problemer der
selv ikke et foreslått svar kan kontrolleres raskt, og problemer som ikke kan
avgjøres av noen algoritme i det hele tatt. PP og NPNP dekker ikke alt.

Sensorblikket: fire av disse fem har dukket opp i ulike innpakninger, og
formuleringene varierer knapt fra år til år. Dette er den delen av pensum der
pugging faktisk lønner seg mest per minutt.

📝Oppgave 4
Sjanger C

Sant eller usant? Begrunn hvert svar med én setning.

a) Hvis ApBA \leq_p B, så er AA minst like vanskelig som BB.
b) Å vise at ditt problem kan reduseres til et NP-komplett problem,
beviser at ditt problem er NP-komplett.
c) NPNP står for «ikke-polynomisk».

📝Oppgave 5
Sjanger C, blandet

Sant eller usant? Begrunn hvert svar med én setning.

a) Å bygge en heap av et array med nn elementer tar O(nlogn)O(n \log n).
b) Flettesortering er in-place, altså at den klarer seg med konstant
ekstra minne.
c) Å hente ut det minste elementet i en min-heap og fjerne det er
O(logn)O(\log n).
d) Et array med nn elementer kan sjekkes for om det er sortert i O(n)O(n).

📝Oppgave 6

(Poengregning under skalering.) En sant/usant-blokk har 18 punkter og skaleres
med 2max(n9, 0)2 \cdot \max(n - 9,\ 0).

Du går gjennom blokken og finner at du kan 12 av påstandene sikkert. Av de
resterende seks er du «ganske sikker» på tre og helt blank på tre.

a) Hva får du hvis du bare svarer på de 12 sikre?
b) Anta at du treffer på to av de tre du er ganske sikker på, og på
halvparten av de blanke. Hva blir poengsummen?
c) Hva sier dette om hvor du bør bruke lesetiden din?

📝Oppgave 7
Sjanger C, eksamensnivå

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

a) Hvis et problem ligger i PP, finnes det en polynomisk verifikator for
det.
b) I et binærtre som fylles nivå for nivå, inneholder de to nederste nivåene
til sammen mer enn to tredeler av nodene.
c) En min-heap med nn elementer har alltid nøyaktig
log2n\lfloor \log_2 n \rfloor nivåer.
d) Et balansert søketre kan gjøre både innsetting og uthenting av minste
element i O(logn)O(\log n).

📝Oppgave 8
Sjanger C, eksamensnivå

Marker sant eller usant med
én setnings begrunnelse.

a) En algoritme med tre nøstede løkker over nn elementer er alltid
O(n3)O(n^3).
b) nlogn=O(n2)n \log n = O(n^2).
c) Å bygge en heap og deretter fjerne det minste elementet gjentatte ganger
sorterer arrayet i O(nlogn)O(n \log n).
d) Det er bevist at P=NPP = NP.

📝Oppgave 9
Sjanger C, formsjekk

Du har svart på en sant/usant-blokk og fått
poengsummen 0, selv om du er sikker på at du hadde en del riktige.

a) Hvordan kan det ha seg?
b) Hva ville du gjort annerledes til neste gang?

Begrepsbank — faktalisten du skal kunne sikkert

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

Men kom tilbake til den. I dette kapitlet er begrepsbanken ikke pynt: den er
pensumet for sjanger C, og hvert kort er verdt to poeng på en skalert blokk.

Sjanger C — kjøretids- og teorifakta

Oppgavetypen der du skal markere sant eller usant på korte påstander om
kjøretid, datastrukturer og kompleksitetsteori. Har kommet i alle sju settene,
som regel med flere punkter per sett.

Rettes automatisk og er skalert mot gjetting, så gjenkjenning holder ikke —
faktaene må sitte sikkert.

Terskelen i en skalert blokk

Antallet riktige som gir null poeng, typisk halvparten av påstandene: 16 av 32,
11 av 22, 9 av 18. Formen er 2max(nk, 0)2 \cdot \max(n - k,\ 0), der kk er terskelen.

Praktisk regel: poengsummen din er omtrent «antall du kan sikkert, minus
terskelen, ganger to». Det er også den eneste størrelsen du kan påvirke før
eksamen.

Repetisjon — hele faktalisten 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.