8.3 Øvingseksamen 1 — bredt ordinært sett (kode E)
Komplett 4-timers hjelpemiddelfritt sett etter 20-kortsvarsmalen, som speiler temafordelingen på et typisk kode-E-sett.
Dette er et komplett eksamenssett i det formatet TDT4120 faktisk bruker. Slik
ser formatet ut, for deg som ikke har vært oppe i faget før:
- Fire timer, ett sett, ingen delprøver.
- Rundt 20 kortsvarsoppgaver som teller likt. En kortsvarsoppgave er en
oppgave der svaret er ett uttrykk, én sluttilstand eller noen få presise
setninger — ikke et essay. At oppgavene teller likt, betyr at hver av dem er
omtrent 5 % av karakteren.
- Ingen hjelpemidler. NTNU kaller dette hjelpemiddelkode E: verken bok,
formelark eller kalkulator er tillatt. Alt du skal bruke, må sitte i hodet.
- Rundt 12 minutter per oppgave i snitt. Blir du sittende fast på én åpen
designoppgave i førti minutter, har du brent tid som 19 andre oppgaver teller
like mye som.
Slik bruker du settet. Du kan trygt dele det over flere kvelder — ta seks
oppgaver om gangen og les løsningsforslaget rett etterpå. Men minst ett av de
tre settene i denne delen bør du ta på tid, i ett strekk, uten å åpne noe
løsningsforslag underveis. Fire timer med 20 oppgaver er også en
tempoferdighet, og den trenes ikke av å lese fasit.
Om uttelling. Flere av oppgavene gir delvis uttelling — altså at et
delvis riktig svar gir noen av poengene på oppgaven. Løsningsforslagene under
sier derfor hva som bærer hovedpoenget, og hvor det siste poenget faller.
Settet er nyskrevet av oss. Det speiler mønsteret i NTNUs egne sett —
fordelingen mellom oppgavetyper og tema, og formen på spørsmålene — men ingen
oppgave er hentet fra et virkelig sett. Alle tall i håndkjøringsoppgavene er
generert av program og etterregnet.
Forkunnskaper
Settet er bredt med vilje, og trekker på hele boka:
- asymptotisk notasjon og forenkling: kap. 1.1 og
kap. 1.2
- rekurrenser og masterteoremet: kap. 1.4
- sortering og utvelgelse: kap. 2.1,
kap. 2.2 og kap. 2.3
- hauger og binære søketrær: kap. 3.1 og
kap. 3.2
- korteste vei fra én kilde: kap. 4.3
- flytnett, snitt og maksimal flyt: kap. 5.1 og
kap. 5.2
- dynamisk programmering: kap. 6.1 og
kap. 6.2
- stabil matching: kap. 6.5
- P, NP og reduksjoner: kap. 7.1 og
kap. 7.2
- svarformen i hver oppgavetype: kap. 8.1, og
designoppskriften i kap. 8.2
Har du ikke lest alt ennå, kan du fortsatt ta settet — men da tar du det åpent,
med løsningsforslagene ved siden av, og bruker det som en kartlegging av hva som
mangler.
Oppgave 1–6: asymptotikk, rekurrens og kjøretid (~70 min)
Oppgave 1. (Sjanger A — asymptotisk forenkling, altså at du gir ett
strammest mulig uttrykk for hvor fort en funksjon vokser.) En analyse av et
lagerstyringsprogram gir kjøretidsfunksjonen .
Oppgi det strammeste asymptotiske uttrykket for . Svar i
-notasjon.
Oppgave 2. (Sjanger A.) Sorter disse fem funksjonene etter stigende
asymptotisk vekst, den saktest voksende først:
, , , , .
Oppgi rekkefølgen som én liste. Her er .
Oppgave 3. (Sjanger A.) La og . Av de fem
asymptotiske symbolene , , , og : hvilke gjelder
når beskrives i forhold til ? Oppgi alle som gjelder, og bare dem.
Oppgave 4. (Sjanger B — rekurrensløsning med navngitt metode, altså at du
oppgir hvilken metode du bruker, ikke bare svaret.) Løs rekurrensen
asymptotisk. Oppgi metoden, svaret i
-notasjon, og hvilket tilfelle du lander i.
Oppgave 5. (Sjanger E — kjøretidskunnskap, altså at du oppgir kjøretiden og
de egenskapene algoritmen garanterer.) Oppgi verste-tilfelle-kjøretiden tilHeapsort, om den sorterer på stedet, og om den er stabil.
Oppgave 6. (Sjanger E.) Du skal sortere heltall som alle ligger i
intervallet fra til . Hvilken av Counting-Sort og Merge-Sort gir
lavest asymptotisk verste-tilfelle-kjøretid på nettopp denne inputen? Oppgi
valget og kjøretiden.
— naturlig pausepunkt —
Oppgave 7–12: kjøretid, definisjoner og håndkjøring (~70 min)
Oppgave 7. (Sjanger E.) Oppgi kjøretiden til Randomized-Select både i
forventning og i verste tilfelle, og verste-tilfelle-kjøretiden til Select
(median av medianer).
Oppgave 8. (Sjanger D — definisjon med egne ord, altså én presis setning med
hovedpoenget først.) Definer hva det vil si at en sorteringsalgoritme er
stabil, og nevn én situasjon der egenskapen er nødvendig.
Oppgave 9. (Sjanger D.) La være et flytnett med kilde og sluk
. Definer et snitt i , og definer kapasiteten til snittet.
Oppgave 10. (Sjanger D.) Definer hva et sertifikat er, og hva det vil si
at et avgjørelsesproblem ligger i klassen NP.
Oppgave 11. (Sjanger C — håndkjøring, altså at du utfører algoritmen steg
for steg og oppgir bare sluttilstanden.) Arrayet erA[1..8] = [4, 13, 7, 2, 19, 6, 11, 9], med indeks fra 1.
a) Kjør Build-Max-Heap(A), og oppgi hele arrayet fra indeks 1 etterpå.
b) Kjør deretter ett Heap-Extract-Max(A) på haugen fra a), og oppgi både
verdien som returneres og haugen A[1..7] etterpå.
Du skal bare oppgi sluttilstandene, ikke mellomstegene.
Oppgave 12. (Sjanger C.) Et transportnett er en rettet graf med seks
omlastingspunkter , , , , og . Kantene, med kjøretid i
minutter, er:
s -> u 7, s -> x 3, u -> v 4, u -> x 2, x -> u 2, x -> v 9,x -> y 5, y -> v 3, y -> t 8, v -> t 6.
Kjør Dijkstra fra og oppgi v.d for hver node, i rekkefølgen , ,
, , , . Bare sluttilstanden.
— naturlig pausepunkt —
Oppgave 13–16: ja/nei-utsagn og NP-argumenter (~45 min)
Oppgave 13. (Sjanger F — «stemmer dette?», altså at du svarer ja eller nei
først og deretter begrunner i én setning.) Stemmer denne påstanden?
«Inorder-Tree-Walk på et binært søketre skriver ut nøklene i den rekkefølgen
de ble satt inn i treet.»
Oppgave 14. (Sjanger F.) Stemmer denne påstanden? «Ford-Fulkerson er
NP-hardt, siden kjøretiden ikke er polynomisk i inputstørrelsen.»
Oppgave 15. (Sjanger G — reduksjon og NP-argument, altså at du oppgir
hvilken vei reduksjonen går, hva den beviser og hva den ikke beviser.) Et
vaktplanleggingsproblem kalt RUTEVAKT skal vises å være vanskelig. Noen gir en
polynomisk reduksjon fra RUTEVAKT til 3-CNF-SAT, og konkluderer med at RUTEVAKT
er NP-hardt. Er argumentet gyldig? Oppgi hva reduksjonen faktisk viser, og hva
som må gjøres i stedet.
Oppgave 16. (Sjanger G.) Du har gitt en korrekt polynomisk reduksjon fra
VERTEX-COVER til et bemanningsproblem kalt BEMANNING. Hva har du dermed vist?
Hva mangler før du kan konkludere at BEMANNING er NP-komplett, og hva har du
fremdeles ikke vist om BEMANNING?
— naturlig pausepunkt —
Oppgave 17–20: åpen algoritmedesign (~55 min)
De fire siste oppgavene er åpne. Svar kort, i fem ledd: hvilket klassisk problem
dette er, hvilket paradigme du bruker, hvordan konstruksjonen ser ut, hvordan du
henter ut selve løsningen, og hva kjøretiden blir. Fem korte punkter holder — det
er formen, ikke lengden, som gir uttelling.
Oppgave 17. (Sjanger H — åpen algoritmedesign, altså at du skisserer en
algoritme i fem korte ledd i stedet for å skrive kode.) Et sykehjem skal sette
opp vaktlisten for en periode. Det er ansatte og vakter. Ansatt kan
ta høyst vakter i perioden, og har en liste over hvilke vakter hen er
kvalifisert for. Vakt må bemannes av nøyaktig personer. Beskriv en
algoritme som avgjør om hele vaktlisten kan dekkes, og som i så fall også
skriver ut hvem som tar hvilken vakt. Oppgi kjøretiden.
Oppgave 18. (Sjanger H.) Et bagasjeanlegg på en flyplass er en rettet graf:
nodene er sorteringspunkter, kantene er transportbånd, og hvert bånd har en
kapasitet i kolli per minutt. All bagasje kommer inn i punktet og skal ut i
punktet . Beskriv en algoritme som finner hvor mange kolli per minutt
anlegget tåler, og som i tillegg peker ut et sett bånd som til sammen er det som
begrenser kapasiteten. Oppgi begge svarene og kjøretiden.
Oppgave 19. (Sjanger H.) En vandrerute går innom hytter i fast
rekkefølge. Etappen fra hytte til hytte er kilometer. Turen skal
deles i dagsmarsjer: hver dagsmarsj er en sammenhengende følge av etapper, og en
dag med samlet lengde gir ubehaget , der er den ønskede
dagslengden. Beskriv en algoritme som finner oppdelingen med minst samlet
ubehag, og som skriver ut hvilke hytter man overnatter på. Oppgi kjøretiden.
Oppgave 20. (Sjanger H.) studenter skal fordeles på praksisplasser,
én student per plass. Hver student har rangert alle plassene, og hver plass har
rangert alle studentene. Fordelingen skal være slik at det ikke finnes en student
og en plass som begge helst ville byttet til hverandre. Beskriv en algoritme som
finner en slik fordeling, si hvordan du henter den ut, og oppgi kjøretiden. Si
også hvilken av de to sidene du lot fri.
Herfra og ned står løsningsforslagene, ett per oppgave. Ta dem først når du er
ferdig med å svare.
To modellbesvarelser på oppgave 17 (~15 min)
De to besvarelsene under er nyskrevet av oss for å vise forskjellen på et svar
som lander skarpt og et som er riktig, men ikke ferdig. Begge svarer på oppgave
17, vaktlisten. Les dem etter hverandre, og se om du finner de tre forskjellene
før du åpner kommentaren til slutt.
Hva skiller de to
Begge velger riktig paradigme, og begge setter opp det samme flytnettet med
riktige kapasiteter. Forskjellen ligger i tre ting.
Rekonstruksjonen. Oppgaven ber om hvem som tar hvilken vakt. Den øverste
besvarelsen leser tilordningen av midtkantene med flyt og sier at avlesningen
koster og ikke endrer kjøretiden. Den nederste stopper ved flytverdien og
svarer dermed bare på halve spørsmålet (felle #6 — å behandle rekonstruksjonen av
selve løsningen som noe som kommer av seg selv).
Heltallsteoremet. Uten det er det ingenting i den nederste besvarelsen som
forklarer hvorfor en flyt på en midtkant er eller og ikke . Den
øverste sier det i én setning, og det er den setningen som gjør at «flyt» og
«vaktliste» faktisk er samme ting her.
Kjøretiden. «Polynomisk tid» er sant, men det er ikke et uttrykk. Den øverste
oppgir , definerer og i oppgavens egne størrelser, og sier
hvorfor grensen er og ikke . En riktig algoritme uten kjøretid mister
det siste poenget — og en kjøretid uten og definert er halvveis.
Fra midt til topp på denne oppgaven:
- skriv kjøretiden som et uttrykk, ikke som ordet «polynomisk»;
- definer hver bokstav i uttrykket i oppgavens egne størrelser;
- si hvordan du henter ut selve løsningen, og at det ikke endrer kjøretiden;
- nevn heltallsteoremet i én setning hver gang du modellerer med flyt;
- velg eller bevisst, og si hvorfor når det er tvil.
Selvdiagnose (~10 min)
Gå gjennom svarene dine med denne lista. Kryss av det du faktisk gjorde, ikke det
du mente å gjøre.
☐ Oppga du bare det som ble etterspurt, og ikke mer?
☐ Er hver kjøretid det strammeste uttrykket du kan gi?
☐ Står der garantien er tett, og der du bare har vist en øvre grense?
☐ Skilte du forventet fra verste tilfelle der de er forskjellige?
☐ Går reduksjonen din FRA det kjent vanskelige problemet TIL det nye?
☐ Skrev du ut hva reduksjonen ikke beviser?
☐ Leverte du haugen som et array fra indeks 1, og ikke som et tre?
☐ Kjørte du Dijkstra helt ferdig, i stedet for å stoppe da sluknoden først fikk en endelig verdi?
☐ Navnga du paradigmet i hver designoppgave, med ordet?
☐ Rekonstruerte du selve løsningen — vaktlisten, snittet, oppdelingen, matchingen — og ikke bare verdien?
☐ Nevnte du heltallsteoremet der du modellerte med flyt?
☐ Definerte du , , og i kjøretidsuttrykkene dine?
Herfra og opp. Fire ting skiller midtsjiktet fra toppen på nettopp dette
settet:
- Fra riktig til strammest. er ikke galt der er
sant, men det er ikke svaret oppgaven ber om. Spør deg alltid om du kan gi en
tettere grense.
- Fra verdi til løsning. Flytverdien, minimumsubehaget og snittkapasiteten er
tall. Vaktlisten, oppdelingen og båndene er løsninger. Oppgavene ber om det
siste, og rekonstruksjonen koster asymptotisk ingenting.
- Fra retning til konsekvens. Å si hvilken vei reduksjonen går er første
halvdel. Andre halvdel er å si hva den beviser og hva den ikke beviser.
- Fra formel til begrunnelse. En kjøretid som står alene, kan være pugget.
Én setning om hvor den kommer fra — hvor mange delproblemer, hvor mange
forøkende stier, hvor høy haugen er — viser at du kan utlede den igjen.
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.