Tilbake
8.4

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.

240 min
0 oppgaver
Øvingseksamen 3grafmodellerings-tungt topp-sett
Din fremgang i kapitlet
0 / 0 oppgaver

Forkunnskaper

OppgaveTemaKapittel
1graf-, spenntre- og NP-faktakap. 1.4, kap. 6.3, kap. 7.3
2kjøretid fra kodekap. 1.2, kap. 1.3
3min-heap, RemoveMinkap. 4.4, kap. 4.5
4korteste-vei-matrisen og kjøretiderkap. 6.2, kap. 6.5
5balanserte trær og tre-rekursjonkap. 4.2, kap. 4.3
6topologisk sortering og sterkt sammenhengende komponenterkap. 6.1, kap. 5.4
7minimale spenntrærkap. 6.3
8bredde-først-søk og avstanderkap. 5.2, kap. 6.2
9datastruktur-designkap. 7.1, kap. 4.3
10drøft to strategier, grafrepresentasjonkap. 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
2max(n4, 0)2 \cdot \max(n - 4,\ 0), der nn 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 V|V| noder har alltid nøyaktig V1|V| - 1 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 O(V+E)O(|V| + |E|).
f) Hvis et problem ligger i NPNP, kan det ikke ligge i PP.
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 NPNP.

---

Oppgave 2 (4 poeng). Oppgi kjøretiden.

Svar med det strammeste OO-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 c

b)

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 V|V|, E|E| eller nn 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 XX til YY betyr at YY bruker verdien i XX:

A1: B2, E3
B2: C4
C4: D1, G5
D1: B2
E3: F2
F2: G5
G5: (ingen)
H1: A1

a) 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 S1S_1 og S2S_2 har kostnad 0, fordi det
allerede ligger en kabel der:

StrekningKostnadStrekningKostnad
S1S_1S2S_20S3S_3S5S_56
S1S_1S3S_39S4S_4S5S_58
S2S_2S3S_34S4S_4S6S_65
S2S_2S4S_47S5S_5S6S_62
S3S_3S4S_43S5S_5S7S_711
S6S_6S7S_710

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 S1S_1. 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, K
Det finnes legevakter i bydelene AA, EE og HH. Kommunen vil vite, for hver
bydel
, 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 xx
- 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 V|V| noder og E|E| kanter skal lagres.
To operasjoner er hyppige:

- ErNabo(u, v) — finnes det en kant mellom uu og vv?
- AlleNaboer(u) — gå gjennom alle naboene til uu
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.

Løsningsforslag — Oppvarming (2 poeng)
Løsningsforslag — Oppgave 1: sant/usant (8 poeng)
Løsningsforslag — Oppgave 2: kjøretid fra kode (4 poeng)
Løsningsforslag — Oppgave 3: min-heap (3 poeng)
Løsningsforslag — Oppgave 4: grafalgoritmer (5 poeng)
Løsningsforslag — Oppgave 5: er treet høydebalansert? (10 poeng)
Løsningsforslag — Oppgave 6: regnearket (12 poeng)
Løsningsforslag — Oppgave 7: fiberkabelen (10 poeng)
Løsningsforslag — Oppgave 8: nærmeste legevakt (10 poeng)
Løsningsforslag — Oppgave 9: kø med begge ender (8 poeng)
Løsningsforslag — Oppgave 10: nabomatrise mot nabolister (8 poeng)
Én midtnivåbesvarelse, ærlig merket — hva skiller den fra full pott?

Poengoversikt og selvdiagnose

DelOppgavePoeng
Oppvarming02
Del 11 sant/usant (skalert)8
Del 12 kjøretid fra kode4
Del 13 min-heap3
Del 14 grafalgoritmer5
Del 25 høydebalansert tre10
Del 26 regnearket12
Del 27 fiberkabelen10
Del 28 nærmeste legevakt10
Del 29 kø med begge ender8
Del 210 nabomatrise mot nabolister8
Sum80

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 V|V|, E|E| og nn 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 V1|V| - 1 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.