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.
Dette kapitlet er der Del 1-poengene faktisk hentes.
Sjanger C — kjøretids- og teorifakta, altså sant/usant-punkter om hvor raskt
noe går og hva en struktur kan, har kommet i alle sju settene (100 %), og som
regel med flere punkter i hvert sett. Punktene er korte, de rettes automatisk, og
de er skalert mot gjetting.
Det siste er hele poenget. Antigjettings-skaleringen — at summen på en
sant/usant-blokk regnes om slik at ren gjetting i snitt gir omtrent null — betyr at
halvveis kunnskap konverteres til halvveis ingenting. Faktaene her må derfor
sitte sikkert, ikke bare kjennes igjen. Prioritet: høyeste.
Et forbehold om rekkefølgen. Kapitlet samler faktaene, og noen av dem handler
om strukturer du ennå ikke har møtt: heapen, det balanserte søketreet, klassene
P og NP. Alt du trenger for å forstå påstandene, står i dette kapitlet. Selve
strukturene — hvordan du håndkjører en heap, hvordan et AVL-tre roterer, hvordan
en reduksjon settes opp — kommer i Del 4 og Del 7. Du taper ingenting på å lære
faktaene først; på eksamen står de nettopp som løsrevne påstander.
Forkunnskaper
- kap. 1.1 — -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.
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
, der er antall riktige. Slik ser regnskapet ut:
| Riktige | Poeng |
|---|---|
| 16 | 0 |
| 17 | 2 |
| 20 | 8 |
| 24 | 16 |
| 28 | 24 |
| 32 | 32 |
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
-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 -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.
(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
.
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.
dem sammen. Splittingen kan gjøres ganger før bitene har ett element,
og hvert nivå koster å flette.
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.
Gå gjennom arrayet én gang og sammenlign hvert element med det neste. Er alle
naboparene i orden, er hele arrayet sortert. Det tar sammenligninger,
altså .
Faktumet dukker opp som sant/usant-punkt, og det brukes som byggekloss i
Del 2-løsninger: «sortér i og skann i » er en fullt lovlig
strategi der den lineære løsningen ikke finnes.
Binærsøk hopper til midten av søkeområdet, kaster halvparten, og gjentar — derfor
. Men det forutsetter at du kan hoppe til et vilkårlig element i
konstant tid.
I et array koster A[i] , så binærsøk er . I en lenket
liste må du følge pekerne fra starten for å komme til midten, og det koster
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 deler arrayet om et pivotelement. Treffer pivoten omtrent midt på
hver gang, blir det nivåer og 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 nivåer, og kjøretiden blir
. Påstanden «kvikksortering er i verste tilfelle» er
derfor usann, og den er en fast distraktor.
Marker sant eller usant, og begrunn hvert svar med én setning.
a) Flettesortering er også i verste tilfelle.
b) Binærsøk i en lenket liste med elementer er .
c) Å avgjøre om et array er sortert krever minst .
d) En algoritme med kjøretid kan ikke ha kjøretid .
og hvert nivå fletter 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 å komme dit. Selve halveringen gir hopp,
men hvert hopp er dyrt — resultatet blir i beste fall, og du er like godt
tjent med å skanne listen.
c) Usant. Én gjennomgang av naboparene holder, altså . Fella er å
tenke «noe med sortering, altså » — men her skal ingenting sorteres,
bare kontrolleres.
d) Usant. er en øvre grense, og øvre grenser kan gjøres slappere: alt
som er er også . 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.
Sant eller usant? Begrunn med én setning hver.
a) «Lineær kjøretid» betyr .
b) En -algoritme bruker alltid færre grunnsteg enn en
-algoritme på samme input.
c) Kvikksortering har 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.
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 er forelderen på og barna på og
. Merk indekseringen fra 0 — andre bøker starter på 1 og får andre
formler.
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.
Ordningskravet gjelder hele veien nedover, så ingen node kan være mindre enn
roten. Å lese det minste er derfor : du slår opp på indeks 0.
Å fjerne det er dyrere, , fordi strukturen må gjenopprettes
etterpå.
Ordningskravet sier ingenting om hvor det største elementet ligger, annet enn at
det må være et blad. Men en heap med elementer har omtrent blader, og
du må sjekke alle.
Derfor er påstanden «du kan finne det største elementet i en min-heap i
» usann — det koster . Dette er et av de hyppigste
sant/usant-punktene i faget.
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 noder som fylles nivå for nivå har høyde
, så innsetting er — også i verste
tilfelle.
Det ser ut som innsettinger à , altså . 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 .
Påstanden «å bygge en heap fra et vilkårlig array tar » er derfor
usann — den er den vanligste distraktoren på hele Del 1.
Et binærtre som fylles nivå for nivå har noder på nivå : 1 i roten, 2 på
nivå 1, 4 på nivå 2, 8 på nivå 3.
Summen av alle nivåene over det nederste er
, 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.
Å snu arrayet snur ikke forelder-barn-relasjonene, for de er bestemt av
indeksformlene , og — 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 — for eksempel et AVL-tre — holder høyden på .
Det minste elementet ligger lengst til venstre og finnes i , og
innsetting er .
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 -klasse.
Marker sant eller usant med én setnings begrunnelse.
a) Et vilkårlig array kan gjøres om til en heap i .
b) Innsetting i en heap er i verste tilfelle.
c) Du kan finne det største elementet i en min-heap i .
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.
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 .
c) Usant. Det største elementet er et blad, men ordningen sier ikke hvilket.
Du må sjekke alle de omtrent bladene, altså .
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 , det minste ligger lengst til venstre, og
innsetting er — 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.
Sant eller usant? Begrunn hvert svar med én setning.
a) I en min-heap med 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
.
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.
Problemene som kan løses av en algoritme med polynomisk kjøretid — altså
for en fast : , , og så videre.
Alt du har møtt i denne boka så langt, ligger i . Grensen går ved
eksponentiell tid som , som ikke er polynomisk.
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 ikke betyr «ikke-polynomisk». Det står for «ikke-deterministisk
polynomisk», og definisjonen handler om kontroll, ikke om løsning.
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 , 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.
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 er derfor også i .
Påstanden «» er dermed sann, og den er et fast punkt.
De vanskeligste problemene i : et problem er NP-komplett hvis det ligger i
, og alle andre problemer i 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å (sant).
polynomisk omskrivning. Da er minst like vanskelig som : kan du løse
raskt, kan du løse 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.
Det er ikke bevist at , og det er ikke bevist at
. Spørsmålet er åpent.
Begge påstandene «det er bevist at » og «det er bevist at »
er derfor usanne. Dette er det enkleste punktet i hele bolken, og det er
også det som oftest kommer.
Marker sant eller usant med én setnings begrunnelse.
a) .
b) Det er bevist at .
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 .
e) Alle avgjørelsesproblemer ligger enten i eller i .
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 kan reduseres til
et hvilket som helst NP-komplett problem, og NP-komplette problemer ligger selv i
.
d) Sant. Alle andre -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 — 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. og 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.
Sant eller usant? Begrunn hvert svar med én setning.
a) Hvis , så er minst like vanskelig som .
b) Å vise at ditt problem kan reduseres til et NP-komplett problem,
beviser at ditt problem er NP-komplett.
c) står for «ikke-polynomisk».
Alle disse er punkter der en distraktor er bygget nettopp for å fange den usikre
kandidaten.
- Å tro at det å bygge en heap er . Det er når du bygger
nedenfra og opp. Dette er den enkeltdistraktoren som fanger flest.
- Å tro at du får det største elementet ut av en min-heap i . Det
koster — ordningen sier ingenting om hvor det største bladet ligger.
- Å forveksle heap-ordenen med søketre-ordenen. Heap ordner forelder mot
barn, søketre ordner venstre mot høyre. Dette er felle #9 i bokas register.
- Å tro at kvikksortering er i verste tilfelle. Det er
forventet kjøretid; verste er .
- Å tro at binærsøk hjelper i en lenket liste. Halveringen krever at du kan
hoppe til midten i konstant tid.
- Å snu reduksjonsretningen. gjør til den vanskeligste.
Dette er felle #8.
- Å påstå at eller er bevist. Ingen av delene.
- Å gjette seg gjennom blokken. Skaleringen er konstruert nettopp for at det
ikke skal virke.
Sant eller usant? Begrunn hvert svar med én setning.
a) Å bygge en heap av et array med elementer tar .
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
.
d) Et array med elementer kan sjekkes for om det er sortert i .
(Poengregning under skalering.) En sant/usant-blokk har 18 punkter og skaleres
med .
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?
Marker sant eller usant, og begrunn hvert svar med én
setning.
a) Hvis et problem ligger i , 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 elementer har alltid nøyaktig
nivåer.
d) Et balansert søketre kan gjøre både innsetting og uthenting av minste
element i .
Marker sant eller usant med
én setnings begrunnelse.
a) En algoritme med tre nøstede løkker over elementer er alltid
.
b) .
c) Å bygge en heap og deretter fjerne det minste elementet gjentatte ganger
sorterer arrayet i .
d) Det er bevist at .
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.
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.
Antallet riktige som gir null poeng, typisk halvparten av påstandene: 16 av 32,
11 av 22, 9 av 18. Formen er , der 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.
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.