Tilbake
8.1

8.1 Kortsvarssjangeren — å skrive presise, korte svar

Selve eksamensdisiplinen: svar med det etterspurte og ikke mer, sikre grunnpoengene først, og budsjettér tiden over 20 likt vektede oppgaver.

45 min
9 oppgaver
Kortsvarssjangerenå skrive presisekorte svar
Din fremgang i kapitlet
0 / 9 oppgaver
Kapitlets plass i kurset

Forkunnskaper

Dette kapitlet krever ingen ny teori, og det kan leses når som helst — gjerne tidlig, slik at du trener riktig form fra første oppgave.

Det bygger på eksamenskartet i kap. 0.1, som presenterer sjangerkatalogen og feilkatalogen. Sjangrene trenes hver for seg gjennom boka: asymptotisk forenkling i kap. 1.3, rekurrenser i kap. 1.6, håndkjøring i kap. 3.3 og kap. 4.5, reduksjoner og NP-argumenter i kap. 7.4, og åpen algoritmedesign i kap. 8.2.

Eksemplene nedenfor bruker kjøretidsfakta fra kap. 3.1, kap. 4.1 og kap. 6.2, men bare som materiale — poenget her er formen på svaret, ikke faget i svaret.

Notasjons- og pseudokodeliste

Hva eksamen faktisk ber om (~10 min)

Se for deg eksamenslokalet klokka 13.40. Du har sittet i førti minutter, og du er fremdeles på oppgave 3 — en åpen designoppgave der du har skissert to modeller, forkastet den ene og begynt å skrive ut et bevis for at den andre virker. Du er nok inne på riktig spor. Men du har brukt over tre oppgavebudsjetter på én oppgave som teller nøyaktig like mye som de 19 andre, og 17 av dem er urørte.

Det er dette kapitlet handler om: ikke hva du kan, men hva du rekker å vise at du kan, og i hvilken form.

Eksamenssettet er frisvar, ikke flervalg: det står ingen alternativer å velge mellom, du skriver svaret selv. Det gjør formen på svaret til din egen beslutning — og dermed til noe du kan trene på.

Kortsvarsoppgave

En oppgave som ber om ett bestemt svar — ett uttrykk, én sluttilstand, én presis setning eller én kort designskisse — og som teller like mye som hver av de andre oppgavene i settet. Svarformen er frisvar: du formulerer svaret selv, uten alternativer å velge mellom.

Et sett har om lag 20 slike oppgaver på fire timer. Det gir 12 minutter per oppgave i snitt og om lag 5 prosent av karakteren per oppgave. Kravet er at svaret er presist og fullstendig for det som er spurt om — ikke at det er langt.

I settene fra 2015 til 2018 sto det svart på hvitt på oppgavearket: lange svar teller ikke positivt. Setningen sto trykt i seks terminer, og den er borte fra hvert sett fra august 2019.

Disiplinen forsvant likevel ikke — den flyttet inn i oppgaveteksten. Dagens oppgaver sier det direkte der de stiller spørsmålet: «du skal her kun svare med output fra algoritmen», «oppgi svaret i Θ\Theta-notasjon», «forklar kort». Og løsningsforslagene svarer i samme ånd. Den aller første fasiten i settet fra desember 2025 er ett eneste uttrykk, og det er hele svaret.

Og skulle du glemme begge deler, holder det strukturelle argumentet alene: 20 oppgaver teller likt på fire timer. Hvert minutt du bruker på en utledning ingen har bedt om, er et minutt du tar fra 19 andre oppgaver som teller like mye. Det argumentet trenger ingen kilde — det er ren aritmetikk.

Kortsvarsdisiplinen

Regelen om at et eksamenssvar skal inneholde nøyaktig det oppgaven ber om, og ikke mer. Den handler om svarene, ikke om læringen: metoden skal du kunne fullt ut, men på papiret leverer du bare den delen oppgaven spør etter.

Disiplinen har tre kilder: setningen om at lange svar ikke teller positivt, som sto trykt i seks terminer fra 2015 til 2018; formuleringene i dagens oppgavetekster («kun output», «oppgi svaret i Θ\Theta-notasjon», «forklar kort»); og aritmetikken, som gjelder uansett — 20 likt vektede oppgaver på 240 minutter.

📝Oppgave 1

(Forbedre svaret — sjanger E, altså en oppgave som spør etter en kjøretid.) Oppgaven lyder: «Hva er kjøretiden til Build-Max-Heap på et array med nn elementer? Oppgi svaret i Θ\Theta-notasjon.»

Du har skrevet dette utkastet på kladdearket:

«Build-Max-Heap kaller Max-Heapify på alle nodene fra n/2\lfloor n/2 \rfloor og nedover til 1. Max-Heapify er O(lgn)O(\lg n) fordi den siver ett element nedover treet, og treet har høyde lgn\lg n. Siden vi kaller den omtrent n/2n/2 ganger, kan vi tenke oss at kjøretiden blir n/2n/2 ganger lgn\lg n, altså O(nlgn)O(n\lg n). Men det viser seg at dette er en for løs grense, for de fleste nodene ligger langt nede i treet og har liten høyde, så summen blir mindre.»

Skriv om til svaret oppgaven ber om.

Svarformen sjanger for sjanger (~12 min)

Hver oppgavetype har sin egen svarform. Å kjenne formen er halve jobben: da vet du når svaret er ferdig, og du slutter å skrive.

SjangerHva oppgaven ber omSvarformTypisk lengde
A asymptotisk forenklingforenkle et uttrykk til strammeste formett uttrykk1 linje
B rekurrensløsningløs T(n)=aT(n/b)+f(n)T(n) = aT(n/b) + f(n) med navngitt metodemetodens navn, svaret, og hvilket masterteorem-tilfelle1–3 linjer
C håndkjøringkjør algoritmen på gitte datakun sluttilstanden, i det formatet oppgaven ber omsluttilstanden alene
D definisjonforklar et begrep med egne ordén presis setning, hovedpoenget først1–2 setninger
E kjøretidoppgi kjøretiden til en algoritme eller operasjonuttrykket, med Θ\Theta eller OO bevisst valgt1 linje
F «stemmer dette?»avgjør om en påstand holderja eller nei først, så én presis setning2 linjer
G reduksjon og NPargumentér om et problems vanskelighetretningen, hva den beviser, og hva den ikke beviser2–4 linjer
H åpen algoritmedesignkonstruér en algoritme for et nytt problemfem ledd (se kortet nedenfor)5–10 linjer

Det finnes også en sjanger I — nivådelt essay. Den dukket bare opp i de hjemmeeksamensbaserte settene under pandemien, er ikke representativ for dagens eksamen, og omtales bare i kap. 0.1. Regn ikke med den.
Kortene under er de åtte sjangrene i pugbar form.

Sjanger A — asymptotisk forenkling

Oppgaven gir et sammensatt uttrykk og ber deg forenkle det til den strammeste asymptotiske formen. Du skal droppe konstanter og lavere ordens ledd, og beholde det leddet som vokser raskest.

Svarform: ett uttrykk, én linje. Fellen: å levere en korrekt, men løsere grense enn den du kunne gitt. Er svaret Θ(n2)\Theta(n^2), er O(n3)O(n^3) sant og likevel utilstrekkelig.

Sjanger B — rekurrensløsning med navngitt metode

Oppgaven gir en rekurrens av typen T(n)=aT(n/b)+f(n)T(n) = aT(n/b) + f(n) og ber om den asymptotiske løsningen. Metoden skal navngis: masterteoremet, iterasjon eller substitusjon.

Svarform: metodens navn, svaret på riktig form, og hvilket masterteorem-tilfelle du havnet i — til sammen 1 til 3 linjer. Fellen: å oppgi svaret uten å si hvilket tilfelle, eller å glemme logaritmefaktoren i det midterste tilfellet.

Sjanger C — håndkjøring

Oppgaven gir konkrete data og ber deg utføre en navngitt algoritme steg for steg. Underveis fører du en tavle på kladdearket, men det er ikke tavlen som skal leveres.

Svarform: kun sluttilstanden, i akkurat det formatet oppgaven ber om — hele arrayet for en maks-haug, utskriften fra Inorder-Tree-Walk for et binært søketre, hele tabellen inkludert døde celler for en kø, kantene i tilleggsrekkefølge for Kruskal. Fellen: å levere hele sporet i stedet for sluttilstanden, eller å «reparere» inndata som ser feil ut i stedet for å kjøre mekanisk.

Sjanger D — definisjon med egne ord

Oppgaven ber deg forklare et begrep: spenntre, stabil sortering, restkapasitet, blokkerende par. Den ber ikke om en historie om begrepet.

Svarform: én presis setning med hovedpoenget først, eventuelt én setning til med det avgrensende kravet. Fellen: å bygge opp mot poenget i stedet for å begynne med det. Rekker du bare én setning, skal den ene setningen være den som teller.

Sjanger E — kjøretidskunnskap

Oppgaven spør hva en algoritme eller en operasjon koster, ofte i beste, verste eller forventet tilfelle, og gjerne i sammenligning med en annen.

Svarform: ett uttrykk, med Θ\Theta når grensen er tett og OO når bare den øvre grensen er vist eller kjent. Legg ved én linje utregning hvis oppgaven ber om begrunnelse. Fellen: å skrive OO der du faktisk kan garantere Θ\Theta, eller å oppgi et forventet tall som om det var verste tilfelle.

Sjanger F — «stemmer dette?»

Oppgaven legger fram en påstand — ofte en som nesten stemmer — og ber deg avgjøre om den holder.

Svarform: ja eller nei først, deretter én presis setning som sier hvorfor, helst med et konkret moteksempel når svaret er nei. Til sammen to linjer. Fellen: å drøfte i tre setninger og aldri konkludere. Et svar uten ja eller nei har ikke besvart oppgaven.

Sjanger G — reduksjon og NP-argument

Oppgaven ber deg argumentere for at et problem er vanskelig, eller vurdere om et gitt argument holder. Kjernen er alltid retningen: for å vise at ditt problem XX er vanskelig, reduserer du fra et kjent vanskelig problem til XX.

Svarform: hvilken vei reduksjonen går, hva den beviser, og hva den ikke beviser — 2 til 4 linjer. Fellen: å redusere den andre veien. Å redusere fra XX til et NP-komplett problem viser bare at XX ikke er verre enn det, og beviser ingenting om at XX er vanskelig.

Sjanger H — åpen algoritmedesign

Oppgaven beskriver et nytt problem i en hverdagslig innpakning og ber deg konstruere en algoritme. Dette er settets siste 3 til 5 oppgaver.

Svarform — fem ledd, 5 til 10 linjer: (1) navngi det klassiske problemet innpakningen skjuler, (2) navngi paradigmet — grådig, dynamisk programmering, splitt og hersk, grafsøk, flyt eller stabil matching, (3) beskriv konstruksjonen (noder, kanter og kapasiteter, eller delproblem, rekurrens og grunntilfeller), (4) forklar hvordan du rekonstruerer selve løsningen, ikke bare verdien, og at det ikke øker den asymptotiske kjøretiden, (5) oppgi kjøretiden med alle symboler definert. Fellen: å stoppe etter ledd 3.

✏️Eksempel 1: Samme oppgave, tre utkast (sjanger F)

«Stemmer det at Dijkstra finner korteste vei i enhver rettet graf med reelle kantvekter? Begrunn kort.»

Tre utkast ligger på kladdearket. Hvilket av dem er svaret oppgaven ber om?

Utkast 1: «Dijkstra er en grådig algoritme som holder et sett av ferdigbehandlede noder og gjentatte ganger plukker den ubehandlede noden med minst dd-verdi fra en prioritetskø, og slakker alle kanter ut fra den. Med binærhaug er kjøretiden O(ElgV)O(E\lg V). Algoritmen ligner på Prim, som bygger et minimalt spenntre.»

Utkast 2: «Det kommer an på grafen. I mange grafer virker den fint, men det finnes tilfeller der den ikke gjør det, særlig hvis vektene oppfører seg spesielt.»

Utkast 3: «Nei. Dijkstra krever ikke-negative kantvekter; med en negativ kant kan en node bli erklært ferdig før den korteste veien til den er funnet. Bellman-Ford tåler negative kanter og kjører på Θ(VE)\Theta(VE)

Utkast 3 er svaret.

Utkast 1 er faglig korrekt og fullstendig irrelevant: det forklarer hvordan Dijkstra virker, mens oppgaven spør om den alltid virker. Ingen del av utkastet svarer ja eller nei. Utkast 2 svarer heller ikke — «det kommer an på» er ingen konklusjon, og «hvis vektene oppfører seg spesielt» navngir ikke betingelsen.

Utkast 3 har sjanger F-formen: nei først, så én setning som navngir betingelsen som brytes, og et alternativ som ikke bryter den. To linjer, ferdig.

Legg merke til hva som gjør utkast 1 farlig: det ser grundig ut. Det inneholder mer riktig fagstoff enn utkast 3. Men oppgaven ba om en avgjørelse, og en avgjørelse står det ikke noe om.

📝Oppgave 2

(Forbedre svaret — sjanger D, definisjon med egne ord.) Oppgaven lyder: «Forklar med egne ord hva et minimalt spenntre er.»

Utkastet ditt:

«Spenntrær er et sentralt tema i grafteorien og brukes blant annet i nettverksplanlegging. Man kan finne dem med Prim eller Kruskal, som begge er grådige algoritmer, og Kruskal bruker Union-Find for å oppdage sykler. Et spenntre er et tre, og et tre er en sammenhengende graf uten sykler. Når grafen har vekter på kantene, kan vi lete etter det spenntreet som har lavest total vekt.»

Skriv om til svaret oppgaven ber om.

📝Oppgave 3

(Forbedre svaret — sjanger C, håndkjøring.) Oppgaven lyder: «Sett inn nøklene 8, 3, 11, 1, 6 i denne rekkefølgen i et tomt binært søketre. Oppgi utskriften fra Inorder-Tree-Walk på det ferdige treet.»

Utkastet ditt:

«Først settes 8 inn som rot. Så kommer 3, som er mindre enn 8 og går til venstre. Så 11, som er større enn 8 og går til høyre. Så 1, som er mindre enn 8 og mindre enn 3, altså venstre barn av 3. Så 6, som er mindre enn 8 og større enn 3, altså høyre barn av 3. Treet er da bygget, og en Inorder-Tree-Walk besøker venstre deltre, så roten, så høyre deltre.»

Skriv om til svaret oppgaven ber om.

Hovedpoenget først — slik sikrer du delvis uttelling (~8 min)

Delvis uttelling betyr at et svar som er riktig så langt det rekker, gir poeng for den delen som er riktig, selv om svaret ikke er komplett. Du får altså ikke null for et halvferdig svar — du får uttelling for halvparten som står der.

Det har en direkte konsekvens for hvordan du bør ordne setningene dine: det viktigste skal stå først. Løsningsforslagene i faget viser gjennomgående samme mønster — hovedpoenget kommer i første setning, presiseringen i den andre. Skriver du motsatt vei, og tiden tar deg midt i svaret, har du levert oppvarmingen og ikke poenget.

Dette gjelder alle sjangrene, men slår hardest ut i tre av dem:

- Definisjon (sjanger D): kravet som gjør begrepet til nettopp det begrepet, kommer i første setning.
- «Stemmer dette?» (sjanger F): ja eller nei står helt først, før begrunnelsen.
- Åpen design (sjanger H): navnet på det klassiske problemet og paradigmet står før konstruksjonen. Rekker du ikke å skrive ut hele konstruksjonen, har du likevel vist at du kjente igjen problemet.

Delvis uttelling

Prinsippet om at et ufullstendig svar gir uttelling for de delene som er riktige, i stedet for null. Det betyr at rekkefølgen på setningene dine har betydning for karakteren.

Praktisk regel: skriv hovedpoenget i første setning, presiseringen i den andre, og eventuelle eksempler til slutt. Blir du avbrutt av klokka, har du da mistet det minst viktige. Skriver du motsatt vei, mister du det viktigste.

✏️Eksempel 2: Samme innhold, to rekkefølger (sjanger D)

«Forklar hva det vil si at en sorteringsalgoritme er stabil

To svar inneholder nøyaktig det samme fagstoffet, men i motsatt rekkefølge.

Svar A: «Når vi sorterer, kan flere elementer ha samme nøkkel. Det er for eksempel tilfellet når vi sorterer en liste over ansatte etter avdeling, og flere jobber i samme avdeling. Da kan man spørre seg hva som skjer med rekkefølgen mellom dem. Noen algoritmer beholder den, andre gjør det ikke. De som beholder den, kaller vi stabile.»

Svar B: «En sorteringsalgoritme er stabil hvis elementer med lik nøkkel beholder sin innbyrdes rekkefølge fra inndata. Det er egenskapen radikssortering hviler på: den sorterer siffer for siffer og trenger at hvert delsorteringssteg ikke ødelegger arbeidet fra det forrige.»

Svar B er formen oppgaven ber om.

Begge svarene sier til slutt det samme. Forskjellen er hvor definisjonen står. I svar A kommer den i siste setning, etter tre setninger oppvarming — og den kommer indirekte («de som beholder den, kaller vi stabile»). I svar B står den i den første setningen, direkte, og den andre setningen legger til noe som viser at du vet hvorfor egenskapen betyr noe.

Svar B er dessuten kortere. Det er ingen tilfeldighet: når hovedpoenget står først, faller behovet for opptrapping bort av seg selv.

📝Oppgave 4

(Forbedre svaret — sjanger F.) Oppgaven lyder: «Stemmer det at 0-1-ryggsekkproblemet kan løses i polynomisk tid med dynamisk programmering, siden algoritmen kjører på Θ(nm)\Theta(nm) der nn er antall gjenstander og mm er kapasiteten? Begrunn kort.»

Utkastet ditt:

«Dynamisk programmering løser 0-1-ryggsekk ved å fylle en tabell med én rad per gjenstand og én kolonne per kapasitetsverdi fra 0 til mm. Hver celle regnes ut i konstant tid fra to celler i raden over, så samlet kjøretid er Θ(nm)\Theta(nm). Det er et produkt av to tall fra inndata, og produkter av inndatastørrelser pleier å være polynomiske, så da må jo svaret være ja.»

Skriv om til svaret oppgaven ber om.

📝Oppgave 5

(Forbedre svaret — sjanger B, rekurrens.) Oppgaven lyder: «Løs rekurrensen T(n)=2T(n/2)+nT(n) = 2T(n/2) + n med en navngitt metode.»

Utkastet ditt:

«Vi kan tegne rekursjonstreet. På toppnivået gjør vi nn arbeid. På nivået under har vi to delproblemer av størrelse n/2n/2, som gir n/2+n/2=nn/2 + n/2 = n arbeid. På nivået under det har vi fire delproblemer av størrelse n/4n/4, som også gir nn arbeid. Slik fortsetter det nedover. Treet har mange nivåer, og hvert nivå koster nn, så totalen blir stor. Svaret blir noe i nærheten av nn ganger antall nivåer.»

Skriv om til svaret oppgaven ber om.

Tidsbudsjettet over fire timer (~8 min)

Regnestykket er kort: 240 minutter delt på 20 oppgaver er 12 minutter per oppgave, og hver oppgave er verdt 5 prosent. Setter du av et kvarter til gjennomlesing på slutten, blir snittet 11,25 minutter.

Det interessante er hva som skjer når du overskrider budsjettet på én oppgave:

Tid brukt på én oppgaveAndel av ett oppgavebudsjettIgjen per oppgave for de 19 andre
12 min1,0012,0 min
20 min1,6711,6 min
30 min2,5011,1 min
40 min3,3310,5 min

Én overskridelse er billig. Det er ikke den som velter settet. Det som velter settet, er at overskridelsene kommer flere ganger, og at de kommer på de vanskeligste oppgavene — slik at du bruker mest tid der uttellingen er minst sannsynlig, og til slutt ikke rekker de siste oppgavene i det hele tatt.
Og siste oppgave er ikke en bonusoppgave. To ubesvarte oppgaver er 10 prosentpoeng av 100, uansett hvor de sto i settet.

Tidsbudsjettet på eksamen

Fordelingen av fire timer over om lag 20 likt vektede oppgaver: 12 minutter per oppgave i snitt, eller 11,25 minutter hvis du reserverer et kvarter til gjennomlesing.

Budsjettet er et tak, ikke et mål. De fleste oppgavene i sjangrene A, D, E og F tar to til fem minutter når stoffet sitter, og den tiden du sparer der, er tiden designoppgavene i sjanger H skal ha. Regel: ingen oppgave får koste mer enn omtrent to budsjetter i første runde.

📝Oppgave 6

(Tidsbudsjett.) Et sett har 20 likt vektede oppgaver og fire timer. Du har brukt 2 timer og 10 minutter, og har besvart 11 oppgaver. Av de 9 som gjenstår, er 4 korte definisjons- og kjøretidsoppgaver du kjenner godt igjen, 3 er håndkjøringer, og 2 er åpne designoppgaver.

a) Hvor mange minutter har du igjen per gjenstående oppgave i snitt?

b) Foreslå en rekkefølge og en grov tidsfordeling for de 9 oppgavene, og begrunn den i én setning.

Å treffe læringsmålet oppgaven tester (~7 min)

Et læringsmål er en setning som sier hva du skal kunne etter et emne — for eksempel «kunne kjøretiden til de sentrale algoritmene, og forstå utregningen av dem». Fra rundt 2016 oppgir løsningsforslagene i TDT4120 hvilket læringsmål hver enkelt oppgave tester.

Det er nyttigere enn det høres ut. Læringsmålene bruker gjennomgående tre ulike verb, og hvert verb ber om sin egen svarform:

Verbet i læringsmåletHva oppgaven vil seHva som ikke hjelper
definere et begrepden avgrensende egenskapen, i én setningeksempler på hvor begrepet brukes
utføre en algoritmesluttilstanden i riktig formaten forklaring av hvordan algoritmen virker
kjenne kjøretiden og forstå utregningenuttrykket, og eventuelt den ene linjen som gir deten gjennomgang av algoritmens oppbygning
bruke kjente algoritmer på nye problemermodellering, konstruksjon, rekonstruksjon og kjøretiden gjentakelse av hva algoritmen gjør

Kolonnen til høyre er verdt et øyeblikk. Alt som står der, er faglig riktig stoff. Det er bare svar på et annet spørsmål enn det som ble stilt — og det er nettopp derfor det er så lett å skrive.

Læringsmål-treff

Å svare på nøyaktig den ferdigheten oppgaven tester, i stedet for å skrive alt du kan om temaet. Løsningsforslagene i faget oppgir fra rundt 2016 hvilket læringsmål hver oppgave hører til, og verbet i målet forteller deg svarformen.

Praktisk regel: finn verbet i oppgaveteksten før du skriver. «Oppgi» og «hva er» vil ha ett uttrykk. «Utfør» og «kjør» vil ha en sluttilstand. «Forklar» og «hva vil det si» vil ha én presis setning. «Beskriv en algoritme som» vil ha de fem leddene i en designskisse.

✏️Eksempel 3: En designoppgave besvart i kortsvarsform (sjanger H)

«Et bibliotek skal fordele et antall lesesalsplasser mellom studenter. Hver student har oppgitt hvilke av lesesalene hun kan bruke, og hver lesesal har et gitt antall plasser. Beskriv en effektiv algoritme som finner en fordeling der flest mulig studenter får plass. Oppgi kjøretiden.»

Dette er settets nest siste oppgave. Du har 12 minutter.

Svaret, slik det leveres:

1. Dette er et tilordningsproblem med kapasiteter — et bipartitt matchingsproblem der den ene siden har kapasitet mer enn 1.
2. Paradigme: maksimal flyt.
3. Konstruksjonen: lag en kilde ss og et sluk tt. Én node per student, én node per lesesal. Kant fra ss til hver student med kapasitet 1. Kant fra student til lesesal med kapasitet 1 for hver lesesal studenten kan bruke. Kant fra hver lesesal til tt med kapasitet lik antall plasser på salen. Kjør Edmonds-Karp fra ss til tt.
4. Rekonstruksjon: fordelingen leses rett av flyten — student uu får sal vv nøyaktig når kanten (u,v)(u,v) fører én enhet flyt. Siden alle kapasitetene er heltall, gir heltallsteoremet at maks-flyten kan velges heltallig, så hver slik kant fører 0 eller 1 og fordelingen er entydig lesbar. Avlesningen går gjennom kantene én gang og koster O(E)O(E), som ikke øker den asymptotiske kjøretiden.
5. Kjøretid: O(VE2)O(VE^2) med Edmonds-Karp, der VV er antall noder i flytnettet (studenter, saler og de to ekstra) og EE er antall kanter, altså summen av antall studenter, antall saler og antall student–sal-par.

Slik faller uttellingen. Ledd 1 og 2 er det som skiller «har ingenting» fra «er på riktig spor»: en besvarelse som bare sier «dette modelleres som maks-flyt med kilde og sluk» har allerede sikret en del av oppgaven. Ledd 3 er tyngdepunktet — det er der kapasitetene faktisk avgjør om modellen løser problemet, og en modell uten kapasitet 1 ut fra hver student ville latt én student få to saler. Ledd 4 er det leddet flest hopper over: oppgaven ber om en fordeling, ikke om et antall, og uten heltallsteoremet er det ikke opplagt at flyten i det hele tatt kan leses som en fordeling. Ledd 5 er billig når de fire første står.

Legg merke til hva som ikke står i svaret: ingen forklaring av hva et restnett er, ingen gjennomgang av hvordan Edmonds-Karp finner forøkende stier, intet bevis for maks-flyt/min-snitt-teoremet. Alt det er pensum, og ingenting av det ble spurt om.

📝Oppgave 7

(Forbedre svaret — sjanger G, reduksjon.) Oppgaven lyder: «En student vil vise at problemet XX er NP-hardt, og gir følgende argument: Jeg viser at XX kan reduseres i polynomisk tid til 3-CNF-SAT. Siden 3-CNF-SAT er NP-komplett, er XX dermed NP-hardt. Er argumentet gyldig? Begrunn kort.»

Utkastet ditt:

«Reduksjoner er en måte å sammenligne vanskelighetsgrad på. Hvis vi har en polynomisk reduksjon mellom to problemer, kan vi bruke en algoritme for det ene til å løse det andre, med bare polynomisk ekstraarbeid. 3-CNF-SAT er et av de mest brukte problemene å redusere fra, fordi det er NP-komplett, og det er ganske fleksibelt. Studenten har brukt 3-CNF-SAT, som er et fornuftig valg.»

Skriv om til svaret oppgaven ber om.

📝Oppgave 8

(Forbedre svaret — sjanger H, åpen design.) Oppgaven lyder: «En strømleverandør skal dele en lang kabel i biter. For hver mulig bitlengde er det oppgitt hva biten selges for. Beskriv en effektiv algoritme som finner den oppdelingen som gir høyest samlet salgsverdi. Oppgi kjøretiden.»

Utkastet ditt:

«Dette er et optimeringsproblem. Vi kan bruke dynamisk programmering, som er en teknikk der man løser små delproblemer først og setter sammen svarene, i motsetning til splitt og hersk, der delproblemene ikke overlapper. Vi lager en tabell og fyller den ut nedenfra og opp. Til slutt står den beste verdien i den siste cellen. Kjøretiden blir kvadratisk.»

Skriv om til det femleddede designsvaret.

📝Oppgave 9

(Forbedre svaret — sjanger A og E i kombinasjon.) Oppgaven lyder: «En algoritme sorterer først nn heltall i området fra 0 til n2n^2 med Counting-Sort, og kjører deretter et binærsøk nn ganger på det sorterte arrayet. Oppgi samlet kjøretid i Θ\Theta-notasjon, som ett strammest mulig uttrykk.»

Utkastet ditt:

«Counting-Sort er Θ(n+k)\Theta(n+k) der kk er størrelsen på verdiområdet, og den er stabil, som er nyttig i radikssortering. Binærsøk er O(lgn)O(\lg n) per søk fordi søkeområdet halveres hver gang. Vi gjør nn søk, så det blir O(nlgn)O(n\lg n) til sammen. Samlet får vi Θ(n+k)+O(nlgn)\Theta(n+k) + O(n\lg n), og siden begge leddene er med, kan vi si at kjøretiden er O(n+k+nlgn)O(n + k + n\lg n)

Skriv om til svaret oppgaven ber om.

Kjøretidsfakta som skal kunne stå alene i et svar

Sjanger E-oppgaver ber om ett uttrykk. Da må uttrykket sitte, og det må sitte sammen med kravet eller egenskapen som hører til — det er ofte den ene linjen begrunnelse oppgaven ber om i tillegg.

AlgoritmeBesteVersteForventetKrav/egenskap
Merge-SortΘ(nlgn)\Theta(n\lg n)Θ(nlgn)\Theta(n\lg n)Θ(nlgn)\Theta(n\lg n)stabil, men ikke på stedet
HeapsortΘ(nlgn)\Theta(n\lg n)Θ(nlgn)\Theta(n\lg n)Θ(nlgn)\Theta(n\lg n)på stedet, ustabil
Counting-SortΘ(n+k)\Theta(n+k)Θ(n+k)\Theta(n+k)Θ(n+k)\Theta(n+k)stabil; krever heltall i området 00 til kk
Build-Max-HeapΘ(n)\Theta(n)Θ(n)\Theta(n)Θ(n)\Theta(n)ikke Θ(nlgn)\Theta(n\lg n) — nesten alle noder har liten høyde
Randomized-SelectΘ(n)\Theta(n)Θ(n2)\Theta(n^2)Θ(n)\Theta(n)forventningen er over algoritmens egne tilfeldige valg
Select (median av medianer)Θ(n)\Theta(n)Θ(n)\Theta(n)Θ(n)\Theta(n)lineær også i verste tilfelle
Hashing med kjedingΘ(1)\Theta(1)Θ(n)\Theta(n)Θ(1+α)\Theta(1+\alpha)α\alpha er lastfaktoren, altså elementer per kurv
BFSΘ(V+E)\Theta(V+E)Θ(V+E)\Theta(V+E)Θ(V+E)\Theta(V+E)gir færrest kanter, ikke minst vekt
Dijkstra (binærhaug)O(ElgV)O(E\lg V)O(ElgV)O(E\lg V)O(ElgV)O(E\lg V)krever ikke-negative kantvekter
Bellman-FordΘ(VE)\Theta(VE)Θ(VE)\Theta(VE)Θ(VE)\Theta(VE)tåler negative kanter, oppdager negative sykler
Floyd-WarshallΘ(V3)\Theta(V^3)Θ(V3)\Theta(V^3)Θ(V3)\Theta(V^3)alle-til-alle korteste vei
Edmonds-KarpO(VE2)O(VE^2)O(VE2)O(VE^2)O(VE2)O(VE^2)krever korteste forøkende sti
Ford-Fulkersonavhenger av kapasitetenes størrelsepseudopolynomisk
HuffmanO(nlgn)O(n\lg n)O(nlgn)O(n\lg n)O(nlgn)O(n\lg n)gir en optimal prefikskode
Gale-ShapleyO(n2)O(n^2)O(n2)O(n^2)O(n2)O(n^2)terminerer alltid, gir alltid en stabil matching, frier-optimal
LCS med DPΘ(nm)\Theta(nm)Θ(nm)\Theta(nm)Θ(nm)\Theta(nm)nn og mm er lengdene på de to sekvensene
0-1-Knapsack med DPΘ(nm)\Theta(nm)Θ(nm)\Theta(nm)Θ(nm)\Theta(nm)pseudopolynomisk — mm er en tallverdi, ikke et antall

Begrepsbank

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

Hjelpemiddelkode E

NTNUs kode for eksamen uten noen hjelpemidler i det hele tatt: ingen bok, ingen egne notater, ingen formelsamling, ingen kalkulator.

Konsekvensen for lesingen din er direkte: kjøretidstabellen, definisjonene og masterteoremets tre tilfeller må sitte i hodet. «Det kan jeg slå opp» er ikke en tilgjengelig strategi på denne eksamen.

Strammeste asymptotiske uttrykk

Den mest presise asymptotiske beskrivelsen du faktisk kan forsvare for en kjøretid. Er både øvre og nedre grense kjent og like, er det strammeste uttrykket et Θ\Theta-uttrykk; er bare den øvre grensen kjent, er det et OO-uttrykk.

Løsere grenser er ikke galeO(n2)O(n^2) er en sann påstand om en algoritme som er Θ(n)\Theta(n) — men de er utilstrekkelige som svar, fordi de kaster bort informasjon oppgaven ba om. Det er nettopp derfor oppgavetekstene så ofte sier «oppgi svaret i Θ\Theta-notasjon».

Sluttilstand som svarform

Det ferdige resultatet av en håndkjøring, levert i det formatet oppgaven navngir — og ingenting av sporet som førte fram til det.

Formatene som går igjen: maks-haug oppgis som hele arrayet med indeks fra 1; binært søketre som utskriften fra Inorder-Tree-Walk; FIFO-kø som hele tabellen inkludert de døde cellene, pluss head og tail; Kruskal som kantene i den rekkefølgen de ble lagt til; maks-flyt som flytverdien, og et min-snitt i tillegg når begge er spurt om; Huffman som kodelengden per tegn; Gale-Shapley som den ferdige matchingen, med angivelse av hvilken orientering som ble kjørt.

Repetisjonsoppgaver

Kort oppsummert

- Settet er om lag 20 likt vektede kortsvarsoppgaver på fire timer: 12 minutter per oppgave, om lag 5 prosent hver.
- Kortsvarsdisiplinen gjelder svarene, ikke læringen. Du må forstå mye mer enn du skriver — men ikke skrive alt du forstår.
- Hver sjanger har sin form. Ett uttrykk (A, E), metode og tilfelle (B), sluttilstand (C), én presis setning (D), ja eller nei først (F), retning og konsekvens (G), fem ledd (H).
- Hovedpoenget først. Delvis uttelling belønner rekkefølgen din.
- Finn verbet i oppgaveteksten før du skriver. «Oppgi», «utfør», «forklar» og «beskriv en algoritme som» ber om fire forskjellige svar.
- Ingen oppgave er verdt mer enn de andre. Skriv ned det du vet, sett et merke i margen, gå videre.

Neste kapittel, kap. 8.2, tar den sjangeren som er vanskeligst å levere kort og fullstendig samtidig: de åpne designoppgavene.

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.