8.4 Øvingseksamen 2 — datastruktur- og graftungt sett
Komplett sett med tyngdepunkt på håndkjøring (sjanger C) og grafalgoritmer, men fortsatt full bredde.
Dette er et komplett, nyskrevet eksamenssett i samme form som NTNU bruker i
TDT4120. Vi har skrevet det selv og lagt oss tett opp til mønsteret i fagets egne
sett — det er ikke et gjengitt sett fra en tidligere eksamen.
Rammene, for deg som ikke har vært oppe i faget før:
- Fire timer, én sammenhengende skriftlig eksamen.
- 20 kortsvarsoppgaver som teller likt. En kortsvarsoppgave er en oppgave
der du skriver svaret selv, men bare svaret: ett uttrykk, én sluttilstand, én
presis setning, eller en kort designskisse. Hver oppgave er dermed 5 % av
karakteren, og du har rundt 12 minutter per oppgave i snitt.
- Ingen hjelpemidler — det NTNU kaller hjelpemiddelkode E, altså koden
for at verken kalkulator, bok eller notater er tillatt. Alt du bruker her,
skal sitte i hodet.
- Delvis uttelling betyr at et svar som treffer hovedpoenget, men mangler en
detalj, gir en del av poengene på oppgaven. Derfor lønner det seg alltid å
skrive ned det du er sikker på, framfor å levere blankt.
Dette settet har tyngdepunktet sitt i håndkjøring og grafalgoritmer. Fem av
de tjue oppgavene ber deg føre en struktur — haug, søketre, kø, spenntre,
avstandsmatrise — gjennom en operasjon steg for steg. Det er en ferdighet som
enten sitter eller ikke sitter, og den trenes bare ved å gjøre den.
Du kan trygt dele settet over flere kvelder. Ta én bolk om gangen; det står
et naturlig pausepunkt mellom bolkene. Men minst ett av de tre settene i
kap. 8.3, dette kapitlet og
kap. 8.5 bør du ta på tid i ett strekk, for fire timer
med tjue oppgaver er også en tempoferdighet: den som bruker 40 minutter på én
åpen designoppgave, har 19 andre oppgaver som teller like mye og som nå står
ubesvart.
Hver oppgave er merket med sjangeren sin i en parentes først. Sjangrene er de
åtte oppgavetypene faget bruker, og de forklares i klarspråk der de dukker opp
første gang. Løsningsforslagene ligger i egne bokser under oppgavesettet — én
per oppgave. Åpne dem først når du har skrevet ditt eget svar.
Forkunnskaper
Settet spenner over hele pensum, men vekten ligger på Del 3 og Del 4.
- Asymptotikk og rekurrenser: kap. 1.1,
kap. 1.2, kap. 1.4 og
kap. 1.5.
- Sortering og utvelgelse: kap. 2.1 og
kap. 2.2.
- Datastrukturer: hauger og Heapsort i
kap. 3.1, binære søketrær i
kap. 3.2, og køer, stakker og disjunkte mengder i
kap. 3.5.
- Grafalgoritmer: traversering og topologisk sortering i
kap. 4.1, minimale spenntrær i
kap. 4.2, korteste vei fra én kilde i
kap. 4.3 og alle-til-alle korteste vei i
kap. 4.4.
- Maksimal flyt: kap. 5.1 og
kap. 5.2.
- Dynamisk programmering: kap. 6.1 og
kap. 6.2.
- NP-teori: kap. 7.1,
kap. 7.2 og kap. 7.3.
- Selve svarformen: kap. 8.1 om hvordan et kortsvar
skal se ut, og designdrillen i kap. 8.2.
Trenger du et mykere første møte med og logaritmeregning, ligger det i
Potenser og logaritmer. Mengdenotasjonen bak er dekket i
Mengdelære.
Oppgave 1–5: asymptotikk, rekurrens og sortering (~55 min)
Oppgave 1. (Sjanger A — asymptotisk forenkling, altså at du gir det
strammeste uttrykket og ingenting mer.) Oppgi det strammeste -uttrykket
for
Svar med ett uttrykk.
Oppgave 2. (Sjanger A.) Ranger de fem funksjonene under etter voksende
asymptotisk vekst, og marker eksplisitt hvilke to som vokser like fort:
Skriv svaret som én kjede med og .
Oppgave 3. (Sjanger B — rekurrensløsning med navngitt metode, altså at du
sier hvilken metode du bruker og hva den gir.) Løs rekurrensen
ved iterasjon. Oppgi et eksakt uttrykk for — ikke en asymptotisk
grense.
Oppgave 4. (Sjanger E — kjøretidskunnskap, altså at du oppgir kjøretiden
direkte og velger mellom og med vitende og vilje.) ArrayetA[1..n] er allerede sortert stigende. Oppgi kjøretiden til Insertion-Sort,
til Merge-Sort og til Heapsort på nettopp dette arrayet.
Oppgave 5. (Sjanger E.) Counting-Sort sorterer nøkler som alle ligger
i . Oppgi kjøretiden, oppgi hva kjøretiden blir når
, og oppgi i én setning hvorfor Counting-Sort ikke er i strid med
-grensen for sortering.
— naturlig pausepunkt —
Oppgave 6–10: håndkjøring av haug, søketre, kø og graf (~70 min)
Alle fem oppgavene i denne bolken er sjanger C — håndkjøring, altså at du
utfører algoritmen steg for steg på papir og bare leverer sluttilstanden.
Oppgaveteksten sier hver gang nøyaktig hvilken form sluttilstanden skal ha.
Arrayer indekseres fra 1.
Oppgave 6. Arrayet
er ikke en maks-haug. Kjør Build-Max-Heap(A) på arrayet slik det står, og
deretter den første iterasjonen av sorteringsløkka i Heapsort. Oppgi
arrayet rett etter Build-Max-Heap, og arrayet etter den første iterasjonen
sammen med haugstørrelsen. Begge arrayene oppgis i sin helhet, kommaseparert fra
indeks 1.
Oppgave 7. Nøklene
settes inn i den rekkefølgen, med Tree-Insert, i et binært søketre som starter
tomt. Ingen rebalansering. Oppgi utskriften fra Inorder-Tree-Walk på det
ferdige treet, og oppgi hvilken nøkkel som er forelder til 39.
Oppgave 8. En FIFO-kø ligger i arrayet Q[1..7]. Køen har vært i bruk før,
så cellene inneholder restverdier:
Utfør denne sekvensen, i rekkefølge: Enqueue(Q, 3), Enqueue(Q, 8),Enqueue(Q, 12), Enqueue(Q, 5), Dequeue(Q), Enqueue(Q, 21),Enqueue(Q, 9), Dequeue(Q), Dequeue(Q), Enqueue(Q, 30).
Oppgi hele tabellen Q[1..7] etterpå, inkludert de døde cellene, sammen medQ.head og Q.tail.
Oppgave 9. Sju målestasjoner i et fiberanlegg er merket A til G. De
mulige gravetraseene mellom dem har disse kostnadene:
| Trasé | Kostnad | Trasé | Kostnad |
|---|---|---|---|
A–B | 4 | C–E | 5 |
A–C | 7 | D–E | 6 |
B–C | 3 | D–F | 2 |
B–D | 9 | E–F | 8 |
B–E | 12 | E–G | 10 |
C–D | 6 | F–G | 11 |
Kjør
MST-Kruskal. Ved lik vekt tas den traseen som kommer først alfabetisk,først på det første endepunktet og deretter på det andre. Oppgi kantene i
den rekkefølgen de legges til, oppgi totalvekten, og merk hvilke kanter som
ble forkastet.
Oppgave 10. En rettet, vektet graf på nodene har vektmatrisen
| 1 | 2 | 3 | 4 | |
|---|---|---|---|---|
| 1 | 0 | 3 | 7 | |
| 2 | 0 | 1 | 2 | |
| 3 | 4 | 0 | ||
| 4 | 6 | 0 |
Kjør
Floyd-Warshall fram til og med . Oppgi hele matrisen radvis, og oppgi rad 3 i forgjengermatrisen .
— naturlig pausepunkt —
Oppgave 11–17: definisjoner, ja eller nei, og NP (~65 min)
Oppgave 11. (Sjanger D — definisjon med egne ord, altså én til to presise
setninger med hovedpoenget først.) Definér hva et minimalt spenntre er for en
sammenhengende, urettet, vektet graf .
Oppgave 12. (Sjanger D.) Definér et snitt i et flytnett
med kilde og sluk , og oppgi hva kapasiteten til snittet
er.
Oppgave 13. (Sjanger D.) Definér en topologisk sortering av en rettet
graf.
Oppgave 14. (Sjanger F — «stemmer dette?», altså at du svarer ja eller nei
først og deretter begrunner med én presis setning.) Vurdér dette utsagnet:
«Dijkstras algoritme gir riktige korteste avstander også når noen kantvekter er
negative, så lenge grafen ikke inneholder noen negativ sykel.»
Stemmer det? Svar ja eller nei, og begrunn.
Oppgave 15. (Sjanger F.) Vurdér dette utsagnet:
«En topologisk sortering av en rettet asyklisk graf får du ved å kjøre et
dybde-først-søk og deretter liste nodene etter stigende oppdagelsestid.»
Stemmer det? Svar ja eller nei, og begrunn.
Oppgave 16. (Sjanger G — reduksjon og NP-argument, altså at du oppgir hva et
resultat beviser og hva det ikke beviser.) Anta at noen i morgen publiserer en
algoritme som løser avgjørelsesvarianten av VERTEX-COVER i polynomisk tid, og
at beviset holder. Oppgi hva som da følger for de øvrige NP-komplette
problemene, og oppgi minst to ting som ikke følger.
Oppgave 17. (Sjanger G.) Et nytt problem, VAKTPOST, er definert slik: gitt
et korridornett modellert som en urettet graf , der nodene er kryss
og kantene er korridorer, og gitt et heltall — finnes det en mengde på høyst
kryss slik at hver korridor har en vakt i minst ett av endepunktene sine?
Du skal vise at VAKTPOST er NP-hardt. Oppgi hvilken vei reduksjonen må gå og
hvilket kjent problem du reduserer med, hva reduksjonen beviser, og hva den
ikke beviser.
— naturlig pausepunkt —
Oppgave 18–20: åpen algoritmedesign (~50 min)
De tre siste oppgavene er sjanger H — åpen algoritmedesign, altså
«hvordan vil du gå fram?». Her forventes en kort designskisse, ikke pseudokode
og ikke bevis. Et fullt svar navngir det klassiske problemet du kjenner igjen,
navngir paradigmet, beskriver konstruksjonen presist, sier hvordan du henter ut
selve løsningen og ikke bare tallet, og oppgir kjøretiden med symbolene
definert.
Oppgave 18. Hovtangen sykehjem skal legge nattevaktplanen for en måned. Det
er nattevakter som alle må dekkes, og pleiere. Pleier har oppgitt
hvilke av vaktene hen er kvalifisert og tilgjengelig for, og kan etter avtalen ta
maksimalt nattevakter i måneden. Hver vakt skal dekkes av nøyaktig én
pleier.
Beskriv hvordan du avgjør om alle vaktene kan dekkes, og hvordan du finner en
konkret vaktplan når de kan det. Oppgi kjøretiden.
Oppgave 19. Et vedlikeholdslag kan ta høyst ett oppdrag per dag, og trenger
en full hviledag etter hvert oppdrag — tar laget oppdraget på dag , kan det
ikke ta noe på dag . For hver av de dagene i planperioden er verdien
av dagens oppdrag kjent på forhånd.
Beskriv hvordan du finner hvilke dager laget skal jobbe for å maksimere
samlet verdi. Oppgi kjøretiden.
Oppgave 20. Adgangssystemet på Nordhella teknikkbygg bruker koder på
tegn. Systemet har en liste med gyldige koder. Av sikkerhetshensyn kan en kode
bare byttes ut med en annen gyldig kode som skiller seg fra den forrige i
nøyaktig ett tegn. Gitt to gyldige koder og : finn den korteste sekvensen
av gyldige koder som starter i , slutter i , og der hvert steg endrer
nøyaktig ett tegn — eller fastslå at ingen slik sekvens finnes.
Beskriv framgangsmåten, og oppgi kjøretiden med og definert.
Hva skiller de to besvarelsene (~10 min)
Begge kjenner igjen flytproblemet, og begge setter opp nettet riktig. Forskjellen
ligger ikke i lengden — den ligger i tre konkrete ledd.
| Ledd | A-besvarelsen | C-besvarelsen |
|---|---|---|
| Klassisk problem navngitt | maksimal bipartitt matching med kapasitet | «et flytproblem» |
| Konstruksjon | tre kapasitetstyper, hver med begrunnelse | tre kapasitetstyper, uten begrunnelse |
| Kriterium | maks-flyt lik | maks-flyt lik |
| Rekonstruksjon | planen leses ut av kantene med flyt 1 | mangler |
| Heltallsargument | heltallsteoremet, skrevet ut | mangler |
| Kjøretid | , begrunnet med at flyten er høyst | , ubegrunnet |
Oppgraderingsmenyen fra C til A på nettopp denne oppgaven:
- Skriv én setning om at pleier tar vakt når kanten bærer flyt 1 — det er
hele rekonstruksjonen, og den koster deg femten sekunder.
- Legg til at kapasitetene er heltall, og at heltallsteoremet derfor gir en
heltallig maksimal flyt. Én setning.
- Tell opp hvor mange forøkende stier som er mulig i akkurat dette nettet før du
oppgir kjøretiden. Flyten er høyst , altså høyst søk à .
- Navngi det klassiske problemet i første setning. «Dette er maksimal bipartitt
matching med kapasitet på den ene siden» plasserer hele besvarelsen med én
gang.
Selvdiagnose (~15 min)
Gå gjennom listen med ditt eget besvarelsesark foran deg. Kryss av det du
faktisk gjorde, ikke det du mente å gjøre.
☐ Oppga du bare det som ble etterspurt, uten å legge til en forklaring ingen ba
om?
☐ Er hvert kjøretidssvar det strammeste uttrykket du kan gi — sto det
og ikke i oppgave 1?
☐ Står der garantien er tett, og der du bare har vist en øvre
grense?
☐ Leverte du hele kø-tabellen i oppgave 8, inkludert de tre døde cellene, og
begge pekerne?
☐ Oppga du haugstørrelsen i oppgave 6, og stoppet du etter den første
iterasjonen?
☐ Er utskriften fra Inorder-Tree-Walk i oppgave 7 sortert stigende? Er den
ikke det, er det en regnefeil, ikke en smakssak.
☐ Merket du de forkastede kantene i oppgave 9, og har spenntreet ditt nøyaktig
kanter?
☐ Brukte du -regelen og ikke -regelen på forgjengermatrisen i oppgave 10?
☐ Sto ordet «nei» først i oppgave 14 og 15, før begrunnelsen?
☐ Går reduksjonen i oppgave 17 fra det kjente vanskelige problemet til det
nye — og sa du hva den ikke beviser?
☐ Rekonstruerte du selve løsningen i oppgave 18, 19 og 20, og ikke bare verdien,
tallet eller lengden?
☐ Nevnte du heltallsteoremet der du modellerte med flyt?
Oppgraderingsmenyen for dette settet
Kommer du til bunns i grunnoppgavene, ligger avstanden opp mot toppen fire
konkrete steder — og alle fire kan trenes:
1. Håndkjøringene skal være feilfrie, ikke omtrentlige. Fem av tjue oppgaver
er sjanger C her. En haug som er nesten riktig, gir mindre enn en haug som er
riktig, og forskjellen er ren nøyaktighet. Kjør dem om igjen på papir til de
sitter.
2. Sluttilstanden skal ha den formen oppgaven ber om. Hele arrayet, hele
tabellen, den etterspurte matrisen, kantene i tilleggsrekkefølge. Riktig
innhold i feil form taper poeng helt unødvendig.
3. Rekonstruksjon er ikke en bonus. På de åpne designoppgavene er «hvilke
dager», «hvilken pleier på hvilken vakt» og «hvilken sekvens» selve
spørsmålet. Verdien alene er et halvt svar.
4. Kjøretiden skal begrunnes i én setning. « fordi flyten er høyst
og hver forøkende sti gir minst 1» er et helt annet svar enn «».
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.