8.4 Øvingseksamen 3 — grafmodellerings-tungt topp-sett
Komplett sett med vanskeligere toppsjikt: flere åpne grafmodelleringsoppgaver (SCC, reversert Dijkstra, MST) og en drøftingsoppgave, der A/B-karakteren skilles.
Dette er det tredje og vanskeligste av de tre øvingssettene. Tyngdepunktet er
grafmodellering: Del 2 har tre grafoppgaver, én tre-algoritme, én
datastruktur-design og én drøfting. Alle oppgavene er nyskrevet for denne boka.
Det er her toppkarakteren avgjøres. På de settene boka bygger på, er de siste én
til to Del 2-oppgavene nesten alltid åpen grafmodellering — du får en historie om
regneark, strømnett eller utrykningskjøretøy, og du skal selv finne ut hvilken
pensumalgoritme som ligger under. Den som ser det, skriver et halvt svar på fem
minutter. Den som ikke ser det, skriver et helt svar på tjue.
Formen: digital skoleeksamen i Inspera, som er UiOs digitale eksamenssystem,
fire timer, ingen hjelpemidler, karakter A til F, teller 100 prosent.
Settet har 80 poeng:
| Del | Innhold | Poeng | Anbefalt tid |
|---|---|---|---|
| Oppvarming | to korte definisjonsspørsmål | 2 | 5 min |
| Del 1 | kompakt: sant/usant, kode til O, én håndkjøring, én matrise | 20 | 45 min |
| Del 2 | seks tunge modellerings- og designoppgaver | 58 | 170 min |
Legg merke til at de anbefalte tidene summerer til 5 + 45 + 170 = 220 minutter, ikke 240.
De tjue som er til overs, er bevisst buffer: å lese gjennom hele settet før
du begynner, å komme tilbake til en oppgave du hoppet over, og å lese gjennom
svarene til slutt. Bruker du dem opp på den første oppgaven som setter seg fast,
har du ingen igjen til den siste.
Legg merke til vektingen: Del 1 er nesten halvert i forhold til
kap. 8.3, og Del 2 utgjør nesten tre firedeler av settet.
Det speiler et sett der de billige poengene er få og de dyre er mange.
Fire råd som er verdt mer på dette settet enn på de to andre:
1. Les oppgaveteksten svært nøye. Det er det mest gjentatte rådet i
sensorveiledningene, og på modelleringsoppgaver er det avgjørende: ett ord i
teksten — «enveiskjørt», «alle par», «allerede bygget» — bestemmer hvilken
algoritme som er riktig.
2. Navngi problemet før du skriver noe som helst. «Dette er et minimalt
spenntre.» Da har du allerede sikret hovedmomentet i poengfordelingen.
3. Velg lavest mulig kjøretid. Trappen er eksplisitt i denne sjangeren, og
forskjellen mellom én kjøring og én kjøring per node er en hel faktor .
4. Oppgi antagelser og kjøretid selv om du ikke rekker hele algoritmen. De
leddene gis det poeng for uavhengig av hverandre.
Antigjettings-skaleringen står i oppgave 1. Blankt og feil teller likt, så
svar på alt — men bare de påstandene du kan sikkert, blir til poeng.
Sett klokka på fire timer. Løsningsforslagene ligger i lukkede bokser under
oppgavene.
Forkunnskaper
| Oppgave | Tema | Kapittel |
|---|---|---|
| 1 | graf-, spenntre- og NP-fakta | kap. 1.4, kap. 6.3, kap. 7.3 |
| 2 | kjøretid fra kode | kap. 1.2, kap. 1.3 |
| 3 | min-heap, RemoveMin | kap. 4.4, kap. 4.5 |
| 4 | korteste-vei-matrisen og kjøretider | kap. 6.2, kap. 6.5 |
| 5 | balanserte trær og tre-rekursjon | kap. 4.2, kap. 4.3 |
| 6 | topologisk sortering og sterkt sammenhengende komponenter | kap. 6.1, kap. 5.4 |
| 7 | minimale spenntrær | kap. 6.3 |
| 8 | bredde-først-søk og avstander | kap. 5.2, kap. 6.2 |
| 9 | datastruktur-design | kap. 7.1, kap. 4.3 |
| 10 | drøft to strategier, grafrepresentasjon | kap. 5.1, kap. 7.2 |
Mønstergjenkjenningen er drillet i kap. 5.5 og
kap. 6.5, og strategien for å velge lavest kjøretid i
kap. 8.1.
Oppvarming (2 poeng)
Oppgave 0. Svar med høyst fire setninger på hvert punkt.
a) Hva er en algoritme?
b) Hva er en datastruktur?
Del 1 — auto-rettet (20 poeng)
---
Oppgave 1 (8 poeng). Sant eller usant?
Antigjettings-skalering: blokken har 8 påstander, og poengsummen regnes som
, der er antall riktige.
a) En rettet graf har en topologisk rekkefølge hvis og bare hvis den er asyklisk.
b) Et bredde-først-søk finner et minimalt spenntre i en vektet urettet graf.
c) Et spenntre over noder har alltid nøyaktig kanter.
d) Prims og Dijkstras algoritmer har samme asymptotiske kjøretid når begge bruker en binær prioritetskø.
e) Å finne alle sterkt sammenhengende komponenter i en rettet graf kan gjøres i .
f) Hvis et problem ligger i , kan det ikke ligge i .
g) Å redusere problemet ditt til et kjent NP-komplett problem viser at problemet ditt er NP-hardt.
h) At det finnes en verifikator som sjekker et sertifikat i polynomisk tid, viser at problemet ligger i .
---
Oppgave 2 (4 poeng). Oppgi kjøretiden.
Svar med det strammeste -uttrykket. To poeng per delspørsmål.
a)
Procedure R1(A)
Input: array A med n tall, indeks fra 0
Output: en telling
n = A.length
c = 0
for i = 0 to n-1:
for j = 1 to n:
k = 1
while k < j:
k = k * 2
c = c + 1
return cb)
Procedure R2(A)
Input: array A med n tall, indeks fra 0
Output: en telling
n = A.length
c = 0
i = n
while i > 0:
for j = 0 to n-1:
c = c + 1
i = i / 2
return c---
Oppgave 3 (3 poeng). Håndkjøring av min-heap.
En min-heap ligger i arrayet 4, 9, 7, 21, 13, 12, 18 med indeks fra 0.
a) Utfør RemoveMin to ganger, og oppgi arrayet etter hver av dem.
b) Hvor mange elementer måtte flyttes nedover i den andre operasjonen?
---
Oppgave 4 (5 poeng). Grafalgoritmer: valg og kjøretid.
a) For hver graftype: oppgi den raskeste korrekte algoritmen for korteste vei
fra én kilde.
1. uvektet
2. vektet, alle vekter positive
3. vektet med noen negative kanter, ingen negativ sykel
b) Oppgi kjøretiden for hver av disse to:
1. å finne alle sterkt sammenhengende komponenter
2. Dijkstras algoritme med binær prioritetskø
Del 2 — modellering og design (58 poeng)
For hver oppgave: navngi problemet, oppgi antagelser om representasjon, gi
algoritmen, og oppgi kjøretiden med , eller definert. Pseudokode
og klar forklaring i naturlig språk gir like mye uttelling.
Oppgavene stiger i vanskelighet. Rekker du ikke alt, er det bedre å levere en
treg, korrekt løsning på alle enn en perfekt løsning på halvparten.
---
Oppgave 5 (10 poeng). Et binært tre kalles høydebalansert hvis de to
subtrærne til hver node skiller seg med høyst 1 i høyde. Det er kravet et
AVL-tre oppfyller.
a) Skriv en algoritme som avgjør om et binært tre er høydebalansert. Oppgi
antagelser og kjøretid.
b) En kandidat foreslår: «For hver node regner jeg ut høyden til venstre og
høyre subtre og sammenligner.» Hva er kjøretiden for det, og hvorfor er din
løsning raskere?
c) Et binært søketre er bygget ved å sette inn 40, 20, 60, 10, 30, 50, 5 og 3
i denne rekkefølgen. Er det høydebalansert? Hvis ikke: hvilken node er den
første som bryter kravet?
---
Oppgave 6 (12 poeng). Et regnearkprogram lar hver celle inneholde en formel
som viser til andre celler. Avhengighetene mellom åtte celler er gitt som en
rettet graf, der en kant fra til betyr at bruker verdien i :
A1: B2, E3
B2: C4
C4: D1, G5
D1: B2
E3: F2
F2: G5
G5: (ingen)
H1: A1a) Skriv en algoritme som finner en lovlig beregningsrekkefølge, eller
melder at ingen finnes. Oppgi antagelser og kjøretid.
b) Kjør algoritmen på grafen over. Hva svarer den?
c) Når ingen rekkefølge finnes, vil brukeren vite nøyaktig hvilke celler
som inngår i en sirkulær referanse. Skriv en algoritme for det, og oppgi
kjøretiden.
d) Kjør den på grafen over. Hvilke celler er det?
---
Oppgave 7 (10 poeng). Sju målestasjoner skal knyttes sammen med fiberkabel.
Alle strekninger som kan graves, er kartlagt med en anleggskostnad i
hundretusen kroner. Strekningen mellom og har kostnad 0, fordi det
allerede ligger en kabel der:
| Strekning | Kostnad | Strekning | Kostnad |
|---|---|---|---|
| – | 0 | – | 6 |
| – | 9 | – | 8 |
| – | 4 | – | 5 |
| – | 7 | – | 2 |
| – | 3 | – | 11 |
| – | 10 |
a) Navngi problemet, og skriv algoritmen du vil bruke. Oppgi antagelser og
kjøretid.
b) Kjør algoritmen for hånd. Oppgi hvilke strekninger som graves og hva det
koster totalt.
c) Hvilken av de valgte strekningene er dyrest, og hva forteller det?
d) En kandidat foreslår å bruke Dijkstras algoritme fra . Hva blir galt?
---
Oppgave 8 (10 poeng). En kommune har tolv bydeler forbundet med gangbroer.
Broene er gitt som en urettet graf:
A: B, F, L
B: A, C
C: B, D, G
D: C, E, H
E: D, J
F: A, G
G: C, F, H
H: D, G, I
I: H, J
J: E, I, K
K: J, L
L: A, KDet finnes legevakter i bydelene , og . Kommunen vil vite, for hverbydel, hvor mange broer man minst må krysse for å komme til nærmeste legevakt.
a) Skriv algoritmen. Oppgi antagelser og kjøretid.
b) En kandidat foreslår å kjøre ett bredde-først-søk fra hver legevakt og ta
minimum for hver bydel. Hva er kjøretiden for det, og når er forskjellen viktig?
c) Kjør algoritmen på grafen over, og oppgi avstanden for hver av de tolv
bydelene.
---
Oppgave 9 (8 poeng). En strømmetjeneste skal holde orden på ventende
avspillingsjobber. Strukturen skal støtte tre operasjoner, alle så raskt som
mulig:
- SettInn(x) — legg til en jobb med prioritet
- FjernMinste() — fjern og returner jobben med lavest prioritet
- FjernStorste() — fjern og returner jobben med høyest prioritet
a) Forklar hvorfor én min-heap ikke er nok.
b) Foreslå en struktur som støtter alle tre. Oppgi kjøretiden per operasjon
og begrunn valget.
c) Finnes det et alternativ som også virker? Sammenlign kort.
---
Oppgave 10 (8 poeng). En graf med noder og kanter skal lagres.
To operasjoner er hyppige:
- ErNabo(u, v) — finnes det en kant mellom og ?
- AlleNaboer(u) — gå gjennom alle naboene til
Sammenlign nabomatrise og nabolister på kjøretid for begge operasjonene
og på minnebruk, og konkludér om når hver representasjon lønner seg. Definér
størrelsene du bruker.
Under ligger løsningsforslag med poengfordeling — én lukket boks per oppgave.
De er skrevet for denne boka, ikke hentet fra noe reelt sett og ikke fra noen
studentbesvarelse.
Etter den siste boksen ligger en ærlig merket midtnivåbesvarelse, en
poengoversikt og en selvdiagnose-liste.
Poengoversikt og selvdiagnose
| Del | Oppgave | Poeng |
|---|---|---|
| Oppvarming | 0 | 2 |
| Del 1 | 1 sant/usant (skalert) | 8 |
| Del 1 | 2 kjøretid fra kode | 4 |
| Del 1 | 3 min-heap | 3 |
| Del 1 | 4 grafalgoritmer | 5 |
| Del 2 | 5 høydebalansert tre | 10 |
| Del 2 | 6 regnearket | 12 |
| Del 2 | 7 fiberkabelen | 10 |
| Del 2 | 8 nærmeste legevakt | 10 |
| Del 2 | 9 kø med begge ender | 8 |
| Del 2 | 10 nabomatrise mot nabolister | 8 |
| Sum | 80 |
Om vektingen: Del 2 utgjør 58 av 80 poeng her. Det betyr at en kandidat som
sitter med full Del 1 og halve Del 2, lander rundt 50 prosent. Det er den
realistiske veien til midtsjiktet — og hele veien videre går gjennom å velge den
raskeste algoritmen på de seks store oppgavene.
Gå gjennom din egen besvarelse med én spørsmålsliste: hvor mange av de seks
Del 2-oppgavene valgte du den raskeste korrekte løsningen på? Det tallet er den
beste enkeltindikatoren på karakteren.
---
Selvdiagnose
☐ Navngav du problemet i hver Del 2-oppgave, før du begynte å skrive
algoritmen?
☐ Oppga du antagelser om representasjon i hver oppgave — minst hvilke felt en
node har, og om grafen er gitt som nabolister?
☐ Oppga du kjøretid overalt, og matcher hver kjøretid den algoritmen du faktisk
skrev?
☐ Definerte du , og der du brukte dem?
☐ I oppgave 5: returnerte traverseringen din høyden oppover, eller regnet du
den ut på nytt i hver node?
☐ I oppgave 6: meldte algoritmen fra om sirkulær referanse, og skilte du mellom
cellene som er i ringen og cellene som bare venter på den?
☐ I oppgave 7: kontrollregnet du at spenntreet har kanter?
☐ I oppgave 8: la du alle kildene i køen før løkken startet?
☐ I oppgave 9: oppga du kjøretiden for hver av de tre operasjonene?
☐ I oppgave 10: er konklusjonen din betinget — sier den når hver representasjon
lønner seg?
☐ Lot du noen oppgave stå blank? Den naive løsningen er alltid verdt poeng, og
trappen bunner aldri i null.
---
Du har nå tatt alle tre settene. Er du usikker på et område, går veien
tilbake gjennom drillkapitlene: kap. 1.3 for kode til O,
kap. 3.3 for hashing, kap. 4.5 for
håndkjøring, kap. 5.5 for grafalgoritmer,
kap. 6.5 for korteste vei og spenntrær, og
kap. 8.1 for selve strategien.
Og et siste råd som er verdt mer enn det ser ut: ta minst ett av de tre settene
om igjen på tid, noen dager før eksamen. Ikke for å se om du husker svarene —
for å kjenne hvor lang tid fire timer faktisk er.
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.