Tilbake
6.5

6.5 DRILL — Korteste-vei-matrisen og MST-modellering

Drill på sjanger F (korteste-avstander-matrisen, kjøretid per grafalgoritme) og H (MST-modellering, reversert Dijkstra) — velg alltid lavest kjøretid.

85 min
12 oppgaver
DRILLKorteste-vei-matrisenMST-modellering
Din fremgang i kapitlet
0 / 12 oppgaver

Sist du var her — forkunnskaper i kortform

Fire resultater fra Del 6 brukes i hver eneste oppgave her. De står ferdig
oppfrisket:

1. Korteste-avstander-matrisen. Uvektet gir BFS; vektet DAG gir topologisk
sortering; ingen negative kanter gir Dijkstra; negative kanter uten negativ sykel
gir Bellman-Ford. Se kap. 6.2.

2. Kjøretidene, som må sitte hjelpemiddelfritt.

AlgoritmeKjøretid
BFS, DFS-full, topologisk sortering, DAG-korteste-veiO(V+E)O(\lvert V \rvert + \lvert E \rvert)
Dijkstra og Prim med binær prioritetskøO((V+E)logV)O((\lvert V \rvert + \lvert E \rvert)\log \lvert V \rvert)
KruskalO(ElogE)O(\lvert E \rvert \log \lvert E \rvert)
Bellman-FordO(VE)O(\lvert V \rvert \cdot \lvert E \rvert)
HuffmanO(nlogn)O(n \log n), nn = antall symboler

3. BFS og DFS finner ikke minimale spenntrær. De leser ikke kantvektene i det
hele tatt. Se kap. 6.3.
4. Reversert Dijkstra. Flere mulige utgangspunkt og ett mål: snu grafen, kjør
én Dijkstra fra målet. Se kap. 6.2.
Notasjons- og pseudokodeliste
📜Løsningsoppskriften — tre spørsmål og en poengtrapp

Alle oppgavene i Del 6 kan angripes med den samme faste framgangsmåten.

Steg 1 — hva slags problem er dette? Les oppgaveteksten og finn signalordene:

Ser du …Er problemet …Bruk
«raskest fram», «korteste rute», «minst tid»korteste veiBFS / topsort / Dijkstra / Bellman-Ford
«koble alt sammen billigst», «minst mulig graving totalt»minimalt spenntrePrim eller Kruskal
«må gjøres før», «avhengigheter», «sirkulær»topologisk sorteringKahn
«hvilket av flere utgangspunkt er nærmest»korteste vei, reversertén Dijkstra i GRG^R
«korteste vei i det ferdige nettet»traversering i et treBFS eller DFS
«kort kode til vanlige tegn», «færrest bits»optimal prefikskodeHuffman

Steg 2 — hvilken variant? For korteste vei: still de to spørsmålene i
rekkefølge. Har grafen vekter? Er den asyklisk? Finnes en negativ kant? Velg den
øverste raden i matrisen som passer.
Steg 3 — skriv svaret i fire ledd. Dette er sensors faktiske krav, og mangler
ett av dem, trekkes det:
1. Navngi problemet — «dette er et minimalt spenntre».
2. Oppgi antagelser om representasjon — nabolister, kantliste, hvilke felt en

node har.
3. Algoritmen — pseudokode eller en klar forklaring i naturlig språk. Begge
gir full uttelling; kravet er at svaret er entydig, ikke at det er syntaks.

4. Kjøretid som matcher algoritmen du faktisk ga, med V|V| og E|E| definert —
og én setning om hvorfor dette er lavest mulig.

Poengtrappen, som ligger under alt: «lavere kjøretidskompleksitet er mer
poenggivende». På samme oppgave gir O(V+E)O(|V| + |E|) full pott,
O((V+E)logV)O((|V| + |E|)\log |V|) mindre, og O(VE)O(|V| \cdot |E|) eller
O(U(V+E)logV)O(|U| \cdot (|V| + |E|)\log |V|) minst. Å velge riktig algoritme er å velge
poeng.

✏️Eksempel 1: Gjennomkjørt eksamenscase med sensor-margnotater

Et sensornettverk har seks målestasjoner. Meldinger sendes langs faste,
enveiskjørte radiolenker, og hver lenke har en forsinkelse i millisekunder:
A -> B 6, A -> C 1, C -> B 2, C -> D 5, B -> D 3, B -> E 9,
D -> E 2, D -> F 7, E -> F 1.

a) Hvor lang tid tar det før en melding fra AA når hver av de andre
stasjonene? Oppgi algoritme og kjøretid.

b) Stasjonene skal i tillegg kobles sammen med kabel. Alle par kan kobles, og
hver kabelstrekning har en kjent anleggspris. Hvilket problem er det, og hvilken
algoritme velger du?

c) En kollega foreslår å bruke Bellman-Ford i deloppgave a), «for sikkerhets
skyld». Hva blir konsekvensen?

a) Steg 1 — hva slags problem? «Hvor lang tid tar det» og «fra AA» er
signalordene for korteste vei fra én kilde.

Sensor-margnotat: å navngi problemet er hovedmomentet, og det gir mest av alt.
En besvarelse som starter med å skrive kode uten å si hva problemet er, mister
typisk et helt poeng selv om koden er riktig.

Steg 2 — hvilken variant? Kantene har vekter, så BFS er ute. Grafen har ingen
negative vekter, og selv om alle kantene her går «framover» alfabetisk, sier ikke
oppgaven noe om at nettet er asyklisk — radiolenker kan gå begge veier i andre
oppsett. Vi velger derfor Dijkstra, som er raden «ingen negative kanter».

Sensor-margnotat: hadde oppgaven eksplisitt sagt at grafen er en DAG, ville
topologisk sortering vært det øverste trinnet i trappen (O(V+E)O(|V| + |E|)) og
Dijkstra gitt noe mindre. Les oppgaveteksten svært nøye — det er det mest
gjentatte rådet i hele arkivet.

Steg 3 — svaret i fire ledd.

Problemet navngitt: korteste vei fra én kilde i en rettet, vektet graf med
ikke-negative vekter.

Antagelser om representasjon: grafen G=(V,E)G = (V, E) er gitt som nabolister, der
G.naboer(v) gir parene (w, vekt). Prioritetskøen er en binær min-heap med
RemoveMin og DecreaseKey i O(logV)O(\log |V|).

Algoritmen: Dijkstra. Kjøringen på tallene:

StegFerdig (tatt ut av køen)Relakserte kanteravstand-tabell etterPrioritetskø etter (heap-array)
1A (avstand 0)B: ∞ -> 6, C: ∞ -> 1A=0, B=6, C=1, D=∞, E=∞, F=∞(1, C), (∞, F), (6, B), (∞, D), (∞, E)
2C (avstand 1)B: 6 -> 3, D: ∞ -> 6A=0, B=3, C=1, D=6, E=∞, F=∞(3, B), (6, D), (∞, E), (∞, F)
3B (avstand 3)E: ∞ -> 12A=0, B=3, C=1, D=6, E=12, F=∞(6, D), (∞, F), (12, E)
4D (avstand 6)E: 12 -> 8, F: ∞ -> 13A=0, B=3, C=1, D=6, E=8, F=13(8, E), (13, F)
5E (avstand 8)F: 13 -> 9A=0, B=3, C=1, D=6, E=8, F=9(9, F)
6F (avstand 9)ingenA=0, B=3, C=1, D=6, E=8, F=9tom

Sluttilstand:
A=0, B=3, C=1, D=6, E=8, F=9
Kjøretid: O((V+E)logV)O((|V| + |E|)\log |V|), der V=6|V| = 6 er antall målestasjoner og
E=9|E| = 9 er antall radiolenker. V|V| uttak fra prioritetskøen à O(logV)O(\log |V|),
pluss opptil E|E| DecreaseKey à O(logV)O(\log |V|).
Sensor-margnotat: kjøretiden matche algoritmen du faktisk ga. Skriver du
Dijkstra og oppgir O(V+E)O(|V| + |E|), trekkes det — ikke fordi tallet er lavt, men

fordi det er feil for koden din.

Merk hva som skjedde med BB. Den direkte lenken A -> B tar 6 ms, men veien

via CC tar 1+2=31 + 2 = 3. I steg 2 senkes avstanden, og forgjenger[B] blir CC.
Og se på FF: først 13 via DD, så 9 via EE. Den nest siste relakseringen avgjorde
svaret.

b) Steg 1 — hva slags problem? «Kobles sammen» og «anleggspris» er signalordene
for et minimalt spenntre. Vekten er en kostnad ved å ha kabelen, ikke ved å
bruke den.

Algoritmen: Prim med binær prioritetskø. Siden alle par kan kobles, er grafen
komplett, og E=V(V1)/2|E| = |V|(|V|-1)/2. Kjøretiden blir da O(V2logV)O(|V|^2 \log |V|).

Sensor-margnotat: «alle par kan kobles» er et signal som er verdt et halvt
poeng i seg selv — det er invitasjonen til å oppgi kjøretiden i

O(V2logV)O(|V|^2 \log |V|)-form. Kruskal med O(ElogE)O(|E| \log |E|) er like riktig.


Merk at dette er et helt annet problem enn a), på det samme nodesettet.
Korteste vei minimerer avstander fra én node; MST minimerer summen av kantene. Å

levere Dijkstra på b) er blant de dyreste enkeltfeilene i Del 6.
c) Bellman-Ford gir riktig svar, men koster O(VE)O(|V| \cdot |E|) i stedet for

O((V+E)logV)O((|V| + |E|)\log |V|). Det er en tregere algoritme på et problem der en raskere
finnes, og poengtrappen straffer det direkte: typisk full pott for Dijkstra, klart
mindre for Bellman-Ford, på samme oppgave.

Sensor-margnotat: «for sikkerhets skyld» er aldri en god strategi i dette
faget. Den tregeste korrekte algoritmen er nesten alltid den som gir færrest
poeng. Bruk heller ti sekunder på å stille de to spørsmålene i matrisen.

Tolv oppgaver på eksamensnivå

Oppgavene roterer de tre sjangrene: matriseavkryssing (F), håndkjøring (E) og
modellering i pseudokode (H). Alle har full fasit med poengfordeling. Ta dem på
tid — rundt 7 minutter hver.

📝Oppgave 1

(Innstegsoppgave, sjanger F — matriseavkryssing, altså at du kobler graftype til
algoritme.) Fyll inn den raskeste korrekte algoritmen og dens kjøretid i hver rad.

Grafen er …AlgoritmeKjøretid
uvektet??
vektet DAG??
vektet, ingen negative kanter??
vektet med negative kanter, ingen negativ sykel??

📝Oppgave 2
Sjanger F

Fyll inn kjøretiden for hver grafalgoritme, med binær prioritetskø
der det er relevant.

a) Full dybde-først-traversering (DFS-full)
b) Topologisk sortering med Kahns algoritme
c) Prims algoritme
d) Bellman-Ford
e) Kruskals algoritme

📝Oppgave 3
Sjanger F

Sett kryss for hver algoritme: finner den et minimalt spenntre?

a) Prim
b) Bredde-først-søk
c) Kruskal
d) Dijkstra
e) Borůvka
f) Dybde-først-søk

📝Oppgave 4
Sjanger E

En urettet vektet graf har kantene AABB 5, AACC 9,
BBCC 3, BBDD 8, CCDD 2, CCEE 7, DDEE 4, DDFF 6, EEFF 1.

a) Kjør Prim fra AA. Oppgi kantene i treet og totalvekten.
b) Kontrollér antall kanter.
c) Hvilke kanter ble aldri med, og hvorfor ikke?

📝Oppgave 5
Sjanger E

Kjør Kruskals algoritme på den samme grafen som i oppgave 4:
AABB 5, AACC 9, BBCC 3, BBDD 8, CCDD 2, CCEE 7, DDEE 4,
DDFF 6, EEFF 1.

a) Sett opp kantene i sortert rekkefølge.
b) Vis kjøringen med union-find-tilstanden underveis.
c) Sammenlign med Prim-svaret fra oppgave 4.

📝Oppgave 6
Sjanger E

Fem statuskoder har frekvensene KK 11, LL 7, MM 5, NN 3, OO 2.

a) Bygg Huffman-treet og oppgi kodelengden per symbol.
b) Hvor mange bits trengs totalt?
c) Hvor mye spares mot en fast koding?

📝Oppgave 7
Sjanger H

Et bibliotek av programmoduler har
avhengighetene A -> C, B -> C, C -> D, C -> E, D -> F, E -> F,
F -> G, B -> E.

a) Hvilket problem er dette, og hvilken algoritme velger du?
b) Håndkjør algoritmen og oppgi rekkefølgen.
c) Skriv algoritmen i pseudokode, med kjøretid.

📝Oppgave 8
Sjanger H

En vektet DAG har kantene A -> B 2, A -> C 6, B -> C 3,
B -> D 9, C -> D 1, C -> E 4, D -> F 2, E -> F 5.

a) Hvilken algoritme gir korteste vei fra AA med lavest kjøretid, og hvorfor?
b) Kjør den og oppgi avstandstabellen.
c) Hva ville Dijkstra kostet på samme graf?

📝Oppgave 9
Sjanger H

Et distribusjonsnett har fire lagre og ett mottak TT. Reisetidene er
enveiskjørte: P -> C 5, Q -> C 8, Q -> D 2, R -> D 4, C -> T 3,
D -> T 6.

a) Hvilket lager er nærmest TT? Vis hvordan du finner det med én
algoritmekjøring.
b) Oppgi kjøretiden, og sammenlign med den naive løsningen.
c) Hvorfor gir metoden også svaret for lagre som legges til senere?

📝Oppgave 10
Sjanger H

Etter at spenntreet fra oppgave 4 er bygget — kantene AABB,
BBCC, CCDD, DDEE, EEFF — skal en tekniker gå fra AA til FF
gjennom nettet.

a) Hvilken algoritme velger du, og hvorfor ikke Dijkstra?
b) Kjør den og oppgi antall strekk fra AA til hver node.
c) Hva blir kjøretiden, uttrykt i V|V|?

📝Oppgave 11
Sjanger H, krevende

En kommune har V|V| adressepunkter og E|E| mulige
grøfter, hver med en gravekostnad. De vil ha svar på tre ting:

a) Billigste nett som kobler alle adressene sammen.
b) Hvilken av tre mulige sentraler som ligger nærmest en bestemt adresse, målt
i kjøretid langs veinettet (en annen graf, med reisetider).
c) Om et sett med rekkefølgekrav for gravearbeidet lar seg gjennomføre.

For hver deloppgave: navngi problemet, oppgi algoritme og kjøretid, og si hva den
naive løsningen ville kostet.

📝Oppgave 12
Sjanger H, krevende

En kollega leverer denne besvarelsen på oppgaven «finn
korteste reisetid fra depotet til alle utsalgssteder i et veinett med
enveiskjøring og positive reisetider»:

«Jeg bruker Bellman-Ford. Den relakserer alle kantene nn ganger og gir korteste
vei. Kjøretiden er O(n2)O(n^2)

a) Hva er riktig ved besvarelsen?
b) Finn de tre problemene med den.
c) Skriv en besvarelse som ville fått full uttelling.

Begrepsbank

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

Korteste-vei-matrisen på ti sekunder

Still to spørsmål: har grafen vekter, og er den asyklisk?

Ingen vekter gir BFS. Asyklisk gir topologisk sortering. Ellers: ingen negativ
kant gir Dijkstra, negativ kant gir Bellman-Ford. Velg alltid den øverste
raden som passer — den er raskest.

Kjøretidstabellen for grafalgoritmer
O(V+E)O(|V| + |E|): BFS, DFS-full, topologisk sortering, DAG-korteste-vei, SCC.
O((V+E)logV)O((|V| + |E|)\log |V|): Dijkstra og Prim med binær prioritetskø.
O(ElogE)O(|E| \log |E|): Kruskal.
O(VE)O(|V| \cdot |E|): Bellman-Ford.

Merk at DFS fra én node er O(E)O(|E|), mens DFS-full er O(V+E)O(|V| + |E|)
felle #6.

Signalordene i Del 6

«Raskest fram» gir korteste vei. «Koble alt sammen billigst» gir minimalt
spenntre. «Må gjøres før» gir topologisk sortering. «Hvilket av flere utgangspunkt»
gir reversert Dijkstra. «Korteste vei i det ferdige nettet» gir BFS eller DFS.
«Færrest bits» gir Huffman.

Halve jobben på Del 2 er å kjenne igjen mønsteret; resten er å skrive ned
algoritmen du allerede kan.

Del 2-svarformen — fire ledd

1. Navngi problemet. 2. Oppgi antagelser om representasjon. 3. Algoritmen, som
pseudokode eller klar forklaring. 4. Kjøretid som matcher koden, med V|V| og
E|E| definert.

Mangler ett av leddene, trekkes det. En klar naturlig-språk-forklaring gir like
mye som pseudokode — kravet er entydighet, ikke syntaks.

Poengtrappen

«Lavere kjøretidskompleksitet er mer poenggivende.» På samme oppgave gir
O(V+E)O(|V| + |E|) full pott, O((V+E)logV)O((|V| + |E|)\log |V|) mindre, og O(VE)O(|V| \cdot |E|)
minst.

Å velge riktig algoritme er å velge poeng. Den tregeste korrekte løsningen er
nesten alltid den som gir færrest poeng — «for sikkerhets skyld» er ingen
strategi.

Felle #1 i grafdelen

Full eller naiv gjennomgang der ett grep holdt: Dijkstra fra hvert utgangspunkt i
stedet for én kjøring i den reverserte grafen, eller søk fra hver node i stedet for
én SCC-kjøring.

Koster typisk halve poengsummen på Del 2, og det er dokumentert som A/B-skillet på
korteste-vei-oppgaver.

Kontrollregningene i Del 6
Spenntre: nøyaktig V1|V| - 1 kanter.
Topologisk sortering: antall prosesserte noder mot V|V|.
Dijkstra: avstandene på nodene du tar ut skal aldri synke.
Huffman: n1n - 1 sammenslåinger, og kodelengder motsatt vei av frekvensene.

Hver av dem tar under ti sekunder og fanger de fleste håndkjøringsfeil.

To grafer over de samme punktene

En eksamensoppgave gir ofte to helt forskjellige grafer over det samme nodesettet:
én med anleggskostnader (som gir et spenntreproblem) og én med reisetider
(som gir et korteste-vei-problem).

Spørsmålet som skiller dem: måler vekten en kostnad ved å ha kanten, eller ved
å bruke den?

Prim og Dijkstra er samme algoritme med én linje forskjell

Begge tar ut den minste noden fra en prioritetskø og relakserer naboene. Prim
sammenligner med vekt, Dijkstra med avstand[u] + vekt.

Derfor har de identisk kjøretid, O((V+E)logV)O((|V| + |E|)\log |V|) — og derfor er det så
lett å skrive den ene når man mente den andre.

Hva sensor faktisk trekker for

Manglende kjøretid. Kjøretid som ikke matcher algoritmen du ga. nn brukt uten
definisjon. Manglende antagelser om representasjon. Pseudokode som ikke er
forståelig etter to gjennomlesninger.

De fem punktene er de mest gjentatte i arkivet, og alle fem er gratis å unngå — de
handler om form, ikke om fag.

Repetisjon — Del 6 på ett kort

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.