Professional Documents
Culture Documents
Algoritmer og Datastrukturer
Studienummer :
Navn :
Vejledning og pointgivning
For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.
For en opgave med vægt v % og med n delspørgsmål, hvor du opnår samlet s point, beregnes
din besvarelse af opgaven som:
s
· v%
n
Bemærk at det er muligt at få negative point for en opgave.
Algoritmer og Datastrukturer (eksamen maj 2020) Side 3 af 15
n5 er O(3n ) A
@ B
n3 / log n er O(n2 ) A B
@
n2 /2 er O(log n) A B
@
√
33 er O( n) A
@ B
23 log n er O(3n ) A
@ B
n2 er O(n · log n) A B
@
√
n · log n + (log n)3 er O( n · log n) A B
@
√
5 · 2log n + n er O(n3/2 ) A
@ B
log(n!) er Ω(n2 ) A B
@
loop1 A B C D E
@ F G H
loop2 A B C D E
@ F G H
loop3 A B C D E
@ F G H
loop4 A B
@ C D E F G H
Algoritmer og Datastrukturer (eksamen maj 2020) Side 4 af 15
14
7 28
5 12 16 30
3 6 E F G 26 J K
A B C D H I
Angiv i hvilke blade A–K i ovenstående ubalancerede binære søgetræ elementerne 21, 13, 27, 4
og 19 skal indsættes (det antages at før hver indsættelse indeholder træet kun ovenstående ti
elementer).
A B C D E F G H I J K
Insert(21) A B C D E F G H
@ I J K
Insert(13) A B C D E F
@ G H I J K
Insert(27) A B C D E F G H I
@ J K
Insert(4) A B
@ C D E F G H I J K
Insert(19) A B C D E F G H
@ I J K
Opgave 4 (Max-Heap-Insert, 4 %)
Angiv den binære max-heap efter indsættelse af elementerne 13, 6, 11, 10, 12, 14 og 3 i den
givne rækkefølge med Max-Heap-Insert, startende med den tomme heap.
1 2 3 4 5 6 7
13 6 11 10 12 14 3 A
1 2 3 4 5 6 7
13 12 14 10 6 11 3 B
1 2 3 4 5 6 7
14 13 12 11 10 6 3 C
1 2 3 4 5 6 7
14 12 13 6 10 11 3 D
@
1 2 3 4 5 6 7
14 12 13 10 6 11 3 E
Algoritmer og Datastrukturer (eksamen maj 2020) Side 5 af 15
Opgave 5 (Build-Max-Heap, 4 %)
1 2 3 4 5 6 7 8 9
9 3 5 1 4 7 8 6 2
1 2 3 4 5 6 7 8 9
9 6 8 3 4 7 5 1 2 A
@
1 2 3 4 5 6 7 8 9
9 6 8 4 3 5 7 1 2 B
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 C
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 D
1 2 3 4 5 6 7 8 9
9 4 8 6 3 7 5 1 2 E
Opgave 6 (Heap-Extract-Max, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13
26 21 17 12 19 16 2 1 9 8 11 13 15
1 2 3 4 5 6 7 8 9 10 11 12
21 19 17 12 15 16 2 1 9 8 11 13 A
@
1 2 3 4 5 6 7 8 9 10 11 12
21 19 17 12 11 16 2 1 9 8 15 13 B
1 2 3 4 5 6 7 8 9 10 11 12
21 19 17 12 11 16 2 1 9 8 13 15 C
1 2 3 4 5 6 7 8 9 10 11 12 13
21 19 17 12 11 16 2 1 9 8 13 15 D
1 2 3 4 5 6 7 8 9 10 11 12
21 19 15 17 16 12 1 9 8 11 13 2 E
Algoritmer og Datastrukturer (eksamen maj 2020) Side 6 af 15
Opgave 7 (Partition, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10 20 16 3 30 6 21 24 7 2 26 29 9 14 22
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10 2 3 6 7 9 16 20 21 24 26 29 30 14 22 A
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10 3 6 7 2 9 20 16 30 21 24 26 29 14 22 B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
10 3 6 7 2 9 21 24 20 30 26 29 16 14 22 C
@
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 6 7 9 10 14 16 20 21 22 24 26 29 30 D
0 1 2 3 4 5 6 7 8 9 10
11 0 12 9 16
0 1 2 3 4 5 6 7 8 9 10
Insert(1) A B C D
@ E F G H I J K
Insert(5) A B C D
@ E F G H I J K
Insert(6) A B C D
@ E F G H I J K
Insert(8) A B C D E F
@ G H I J K
Insert(10) A B C D E F G H I J
@ K
Algoritmer og Datastrukturer (eksamen maj 2020) Side 7 af 15
0 1 2 3 4 5 6 7 8 9 10
11 0 19 17 20
0 1 2 3 4 5 6 7 8 9 10
Insert(2) A B C D E
@ F G H I J K
Insert(3) A B C
@ D E F G H I J K
Insert(5) A B C D E F G H I J K
@
Insert(6) A B C D E
@ F G H I J K
Insert(9) A B C D
@ E F G H I J K
Opgave 10 (Rekursionsligninger, 4 %)
√
Θ(log n) Θ( n) Θ(n) Θ(n log n) Θ(n2 ) Θ(n2 log n) Θ(n3 )
T (n) = 2 · T (n/5) + n A B C
@ D E F G
T (n) = 3 · T (n/9) + 1 A B
@ C D E F G
T (n) = 4 · T (n/2) + n2 A B C D E F
@ G
T (n) = T (n − 1) + log n A B C D
@ E F G
T (n) = T (n − 1) + n2 A B C D E F G
@
6 Ja Nej
3 8 2, 3, 4, 8 A
@ B
1 5 7 9 2, 4, 6 A B
@
2 4 2, 3, 4, 7, 9 A
@ B
1, 2, 4, 5, 7, 9 A B
@
2, 4 A
@ B
Algoritmer og Datastrukturer (eksamen maj 2020) Side 8 af 15
17
8 23
2 11 18
7 9 15
Angiv det resulterende rød-sorte træ når man indsætter 5 i ovenstående rød-sorte træ (dob-
beltcirkler angiver røde knuder).
A B C
@ D
17 11 17 17
8 23 8 18 8 23 8 23
2 11 18 5 9 17 23 5 11 18 2 11 18
7 9 15 2 7 15 2 7 9 15 7 9 15
5 5
Opgave 13 (Union-find, 4 %)
Angiv den resulterende union-find struktur efter nedenstående sekvens af operationer, når der
anvendes union-by-rank og stikomprimering.
makeset(a)
makeset(b)
makeset(c)
makeset(d)
makeset(e)
makeset(f )
union(a, b)
union(f , c)
union(a, f )
union(e, d)
union(a, e)
Find-Set(b)
A
@ B C D
2 3 2 2
c d c c
0 1 1 0 1 2 0 0 1 1 0 0 1 1 0
a b d f b c e a b d e f b d f
0 0 0 0 0
e a f a e
Algoritmer og Datastrukturer (eksamen maj 2020) Side 9 af 15
Opgave 14 (BFS, 4 %)
E L D J
C B I F
G K A H
For et bredde først gennemløb (BFS) af ovenstående graf startende i knuden A, angiv ræk-
kefølgen knuderne bliver indsat i køen Q i BFS-algoritmen. Det antages, at grafen er givet ved
incidenslister, hvor incidenslisterne er sorteret alfabetisk.
A B C
@ D
Opgave 15 (DFS, 4 %)
F H G
A I D
B E C
Betragt et dybde først gennemløb (DFS) af ovenstående graf, hvor DFS-gennemløbet starter
i knuden A, hvor de udgående kanter til en knude besøges i alfabetisk rækkefølge. Angiv i
hvilken rækkefølge knuderne får tildelt finishing time.
A
@ B C D
Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.
(I, D) A B C
@ D
(H, F) A
@ B C D
(I, E) A B
@ C D
(A, F) A B C D
@
Algoritmer og Datastrukturer (eksamen maj 2020) Side 10 af 15
4
D E
5 4
4
A B
4 2 3
6
C F
Antag Dijkstras algoritme anvendes til at finde korteste afstande fra knuden A til alle knuder i
ovenstående graf. Angiv hvilken rækkefølge knuderne bliver taget ud af prioritetskøen i Dijkstra’s
algoritme.
A B
@ C D
11 3
E A D J
2 8 15
4 11 6
8 10
B H G
-3 15
15 9
14
F I
6
4
Antag Prims algoritme anvendes til at finde et minimum udspændende træ for ovenstående graf,
og algoritmen starter i knuden A. Angiv hvilken rækkefølge knuderne bliver inkluderet i det
minimum udspændende træ (taget ud af prioritetskøen i Prims algoritme).
A B C
@ D
C D
B A
Angiv for hver af nedenstående ordninger af knuderne i ovenstående graf om det er en lovlig
topologisk sortering.
Ja Nej
ACBD A
@ B
CBDA A B
@
DABC A B
@
CABD A
@ B
CADB A
@ B
F G A B
E I J K
L D C H
A B C D E
@ F G H I J K L
1 2 3 4 5 6 7 8 9 10 11 12
Algoritmer og Datastrukturer (eksamen maj 2020) Side 12 af 15
Opgave 20 (Invariant, 4 %)
Algoritme Multiplikation(n)
Inputbetingelse : Heltal n ≥ 0 og m ≥ 0
Outputkrav : r = n0 · m0
Metode :r←0
{I} while n > 0 do
if n er ulige then
r ←r+m
n←n−1
else
m←m∗2
n ← n/2
Ja Nej
0 ≤ n ≤ n0 A
@ B
0 ≤ m ≤ m0 A B
@
r =m·n A B
@
n0 · m0 = r + n · m A
@ B
n0 · m0 + r = n · m A B
@
Algoritmer og Datastrukturer (eksamen maj 2020) Side 13 af 15
Dynamisk programmering
De næste fire opgaver vedrører at løse LCS2 problemet ved hjælp af dynamisk programmering.
Vi antager at vi har givet to strenge A=a0 a1 . . . an−1 og B=b0 b1 . . . bm−1 af længde henholdsvis
n og m. En fælles delsekvens er en sekvens af tegn der både er en delsekvens af A og B. F.eks.
er a b a b b en fælles delsekvens for A=a b a b c b og B=a b c a b b. En anden fælles delsekvens
for A=a b a b c b og B=a b c a b b består af to sammenhængde blokke a b c og b, af længde hen-
holdsvis 3 og 1, fra både A og B. I LCS2 problemet ønsker vi at finde en fælles delsekvens hvor
summen af kvadraterne af blok-længderne er størst mulig, også betegnet LCS2 scoren. I dette
eksempel er 32 + 12 = 10 den maksimale LCS2 score. Bemærk at en fælles delsekvens, der opnår
en maksimal LCS2 score, er ikke nødvendigvis en længste fælles delsekvens.
Vi lader S(i, j) betegne den maksimale LCS2 score for ai ai+1 . . . an−1 og bj bj+1 . . . bm−1 .
S(i, j) kan bestemmes ved følgende rekursionsformel.
0 hvis i = n eller j = m
n o
S(i, j) = max S(i + 1, j), S(i, j + 1), max (S(i + k, j + k) + k 2) ellers
0<k≤min(n−i,m−j)
ai ...ai+k−1 =bj ...bj+k−1
Algoritme LCS2(A, B)
n = |A|
m = |B|
Opret tom tabel T [0..n, 0..m] til S(i, j)
Opret tom tabel K[0..n, 0..m] til back-tracking
for . . .
<< Opgave 21: iterer over T >>
for . . .
<< Opgave 24: udskriv delsekvens med maksimal LCS2 score >>
Opgave 21 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja A Ja A Ja A
@
Nej @
B Nej @
B Nej B
Opgave 22 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
if i = n or j = m then
T [i, j] = 0
else
T [i, j] = max(T [i + 1, j], T [i, j + 1])
Ja A k = min(n − i, m − j)
Nej @
B while k ≥ 1 and A[i + k − 1] = B[j + k − 1] do
if k 2 + T [i + k, j + k] > T [i, j] then
T [i, j] = k 2 + T [i + k, j + k]
K[i, j] = k
k =k−1
if i = n or j = m then
T [i, j] = 0
else
T [i, j] = max(T [i + 1, j], T [i, j + 1])
Ja A
@ k=1
Nej B while k ≤ min(n − i, m − j) and A[i + k − 1] = B[j + k − 1] do
if k 2 + T [i + k, j + k] > T [i, j] then
T [i, j] = k 2 + T [i + k, j + k]
K[i, j] = k
k =k+1
if i = n or j = m then
T [i, j] = 0
else
Ja A T [i, j] = max(T [i + 1, j], T [i, j + 1])
for k = 1 to min(n − i, m − j)
Nej @
B
if A[i + k − 1] = B[j + k − 1] and k 2 + T [i + k, j + k] > T [i, j] then
T [i, j] = k 2 + T [i + k, j + k]
K[i, j] = k
Opgave 23 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja A
@ Ja A Ja A
Nej B Nej @
B Nej @
B
Opgave 24 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
i=0
j=0
while i < n and j < m do
Ja A
k = K[i, j]
Nej @
B print ai ai+1 . . . ai+k−1
i=i+k
j =j+k
i=0
j=0
while i < n and j < m do
if T [i, j] = T [i + 1, j] or T [i, j] = T [i, j + 1] then
i=i+1
Ja A
j =j+1
Nej @
B else
k = K[i, j]
print ai ai+1 . . . ai+k−1
i=i+k
j =j+k
i=0
j=0
while i < n and j < m do
if T [i, j] = T [i + 1, j] then
i=i+1
Ja A
@ else if T [i, j] = T [i, j + 1] then
j =j+1
Nej B
else
k = K[i, j]
print ai ai+1 . . . ai+k−1
i=i+k
j =j+k
Algoritmer og Datastrukturer (januar 2021) Side 1 af 14
EKSAMEN
Algoritmer og Datastrukturer
Tilladte hjælpemidler:
Alle, inklusive internet.
Det er ikke tilladt at kommunikere med andre under eksamen.
Studienummer :
Navn :
Algoritmer og Datastrukturer (januar 2021) Side 2 af 14
Vejledning og pointgivning
For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.
For en opgave med vægt v % og med n delspørgsmål, hvor du opnår samlet s point,
beregnes din besvarelse af opgaven som:
s
· v%
n
Bemærk at det er muligt at få negative point for en opgave.
Algoritmer og Datastrukturer (januar 2021) Side 3 af 14
Ja Nej
3n3/2 + log n er O(n2/3 ) A B
@
6n3/2 er O(8log n ) A
@ B
22 log n er O(log(n!)) A B
@
n2 er O(n3/2 ) A B
@
n0.1 er O(n) A
@ B
n er O(n1/3 ) A B
@
√
n er Θ(n · log n) A B
@
n2/3 er Ω(n) A B
@
n2 er Θ(n0.1 ) A B
@
loop2 A B C D
@ E F G H
loop3 A B C D E F G H
@
loop4 A B C D E F
@ G H
Algoritmer og Datastrukturer (januar 2021) Side 4 af 14
15
13 25
10 14 23 28
A B C D 18 G 27 29
E F H I J K
Angiv i hvilke blade A–K i ovenstående ubalancerede binære søgetræ elementerne 22, 17,
26, 30 og 16 skal indsættes (det antages at før hver indsættelse indeholder træet kun
ovenstående ti elementer).
A B C D E F G H I J K
Insert(22) A B C D E F
@ G H I J K
Insert(17) A B C D E
@ F G H I J K
Insert(26) A B C D E F G H
@ I J K
Insert(30) A B C D E F G H I J K
@
Insert(16) A B C D E
@ F G H I J K
Opgave 4 (Build-Max-Heap, 4 %)
1 2 3 4 5 6 7 8 9
6 1 3 8 2 9 5 7 4
9 8 7 6 5 4 3 2 1 A
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 B
1 2 3 4 5 6 7 8 9
6 8 9 7 2 3 5 1 4 C
1 2 3 4 5 6 7 8 9
9 8 6 7 2 3 5 1 4 D
@
1 2 3 4 5 6 7 8 9
9 7 8 6 2 3 5 1 4 E
Algoritmer og Datastrukturer (januar 2021) Side 5 af 14
Opgave 5 (Heap-Extract-Max, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13
22 19 17 14 16 15 13 3 9 2 8 4 11
19 16 17 14 8 15 13 3 9 2 4 11 A
1 2 3 4 5 6 7 8 9 10 11 12
19 16 17 14 8 15 13 3 9 2 4 11 B
1 2 3 4 5 6 7 8 9 10 11 12
19 16 17 14 8 15 13 3 9 2 11 4 C
1 2 3 4 5 6 7 8 9 10 11 12
19 16 17 14 11 15 13 3 9 2 8 4 D
@
1 2 3 4 5 6 7 8 9 10 11 12
19 17 14 16 15 13 3 9 2 8 4 11 E
0 1 2 3 4 5 6 7 8 9 10
15 9 13 2 18
0 1 2 3 4 5 6 7 8 9 10
Insert(4) A B C
@ D E F G H I J K
Insert(5) A B C D E
@ F G H I J K
Insert(6) A B C D E F G H I
@ J K
Insert(7) A
@ B C D E F G H I J K
A
Insert(11) @ B C D E F G H I J K
Opgave 7 (Merge-Sort, 4 %)
Antag Merge-Sort udføres på et input af størrelse n og indeholdende to elementer x og y.
Hvad er worst-case antal sammenligninger af x med y under udførelsen af Merge-Sort?
A
@ B C D E
Algoritmer og Datastrukturer (januar 2021) Side 6 af 14
2 7
1 3 5 8
6 9
Ja Nej
6, 9 A
@ B
2, 6, 7, 9 A
@ B
2, 5, 6, 8, 9 A B
@
1, 3, 6, 7, 9 @
A B
4, 6, 9 A B
@
23
8 25
6 12
3 7 11 15
Angiv det resulterende rød-sorte træ når man indsætter 22 i ovenstående rød-sorte træ
(dobbeltcirkler angiver røde knuder).
12 23 12 23
6 23 8 25 8 23 8 25
3 8 15 25 6 12 6 11 15 25 6 12
7 11 22 3 7 11 15 3 7 22 3 7 11 15
22 22
A B C
@ D
Algoritmer og Datastrukturer (januar 2021) Side 7 af 14
Opgave 10 (Union-find, 4 %)
Angiv den resulterende union-find struktur efter nedenstående sekvens af operationer, når
der anvendes union-by-rank og stikomprimering.
makeset(a)
makeset(b)
makeset(c)
makeset(d)
makeset(e)
makeset(f )
union(f , d)
union(f , b)
union(a, e)
union(b, a)
union(f , c)
Find-Set(a)
2 4 2 2
e c e e
0 0 0 1 0 0 3 0 0 1 0 0 1 0
a b c d f a e a c d a c d f
2 1 0 0 0 0
b d f b f b
A B C D
@
Opgave 11 (Rekursionsligninger, 4 %)
Angiv løsningen for hver af nedenstående rekursionsligninger, hvor T (n) = 1 for n ≤ 1.
√
Θ(log n) Θ( n) Θ(n) Θ(n log n) Θ(n2 ) Θ(n2 log n) Θ(n3 )
T (n) = 4 · T (n/4) + n A B C D
@ E F G
T (n) = 4 · T (n/2) + 2 A B C D E
@ F G
T (n) = 3 · T (n/9) + 1 A B
@ C D E F G
T (n) = T (n − 1) + 3 A B C
@ D E F G
T (n) = T (n/3) + 2 A
@ B C D E F G
Opgave 12 (Alle-par-korteste-veje, 4 %)
Antag vi har en orienteret graf med n knuder og postitivt vægtede kanter, hvor vi løbende
tilføjer yderligere kanter. Vi ønsker at vedligeholde en afstands-tabel over de korteste
afstande mellem alle par af knuder.
Hvad er den bedste worst-case tid man kan opnå for at opdatere afstands-tabellen, når
man tilføjer en ny kant med positiv vægt til grafen?
√ √
Θ(1) Θ( n) Θ(n) Θ(n · log n) Θ(n · n) Θ(n2 ) Θ(n3 )
A B C D E F
@ G
Algoritmer og Datastrukturer (januar 2021) Side 8 af 14
Opgave 13 (BFS, 4 %)
E H B
I D C F
G A J
For et bredde først gennemløb (BFS) af ovenstående graf startende i knuden A, angiv
rækkefølgen knuderne bliver indsat i køen Q i BFS-algoritmen. Det antages, at grafen er
givet ved incidenslister, hvor incidenslisterne er sorteret alfabetisk.
A B
@ C D
Opgave 14 (DFS, 4 %)
A I G E
J H C
F B
A B C D
@
Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.
(A, J) A B C D
@
(J, A) A B
@ C D
(J, H) A
@ B C D
Algoritmer og Datastrukturer (januar 2021) Side 9 af 14
E
3
2
4
F B
5 4
2 2
5 7
A C D
Antag Dijkstras algoritme anvendes til at finde korteste afstande fra knuden A til alle
knuder i ovenstående graf. Angiv hvilken rækkefølge knuderne bliver taget ud af priori-
tetskøen i Dijkstra’s algoritme.
A B C
@ D
-1 11
G J I H
1 15 1
5 14 9
2 9
F A D
10 14
14 6
6
B C
-2
12
Antag Prims algoritme anvendes til at finde et minimum udspændende træ for ovenstående
graf, og algoritmen starter i knuden A. Angiv hvilken rækkefølge knuderne bliver inklu-
deret i det minimum udspændende træ (taget ud af prioritetskøen i Prims algoritme).
A
@ B C D
Algoritmer og Datastrukturer (januar 2021) Side 10 af 14
C A
D B
Ja Nej
DABC A B
@
BDAC @
A B
ABDC A B
@
CADB A B
@
BADC @
A B
Ja Nej
N A B
@
M A B
@
N · log N A
@ B
M · log N A
@ B
N · log M A B
@
M · log M A B
@
Algoritmer og Datastrukturer (januar 2021) Side 11 af 14
Opgave 19 (Invarianter, 4 %)
Givet et positivt heltal n, så beregner nedenstående algoritme n3 .
Algoritme Power3(n)
Inputbetingelse : Heltal n ≥ 1
Outputkrav : r = n3
Metode :i←1
s←1
r←1
{I} while i < n do
i←i+1
s ← s + 2i − 1
r ← r + 3s − 3i + 1
Ja Nej
1≤i<n A B
@
1≤i≤s≤r A
@ B
r = i3 A
@ B
r = n3 A B
@
s = s + 2i − 1 A B
@
v
v.l v.r
Angiv hvorledes v.closest og kan beregnes når min, max og closest værdierne er kendt
ved de to børn v.l og v.r (det kan antages at disse begge eksisterer).
Dynamisk programmering
De næste fire opgaver vedrører at løse strengkonkatenerings problemet ved hjælp af dyna-
misk programmering.
Lad T være en streng af længde n, og lad S1 , S2 , . . . , Sk være k strenge. Vi ønsker at afgøre
om T kan skrives som en konkatenation af strenge fra S1 , S2 , . . . , Sk , hvor hvert Si kan
forekomme et vilkårligt antal gange (0, 1, eller flere gange). F.eks. kan strengen
T = ABBBBDABABB
S1 = A B B S2 = A C A A S3 = B B S4 = A B A S5 = D
<< Opgave 23: sæt solution til True eller False >>
if solution then
<< Opgave 24: Udskriv en løsning >>
else
print “Not possible”
Algoritmer og Datastrukturer (januar 2021) Side 13 af 14
Opgave 21 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
for j = 1 to n + 1 A B
@
for j = n + 1 to 1 step −1 A
@ B
Opgave 22 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
if j = n + 1 then
D[j] = True
else if j + |Si | − 1 ≤ n and D[j + |Si |] and T [j .. j + |Si | − 1] = Si then
D[j] = True A B
@
else
D[j] = False
if j = n + 1 then
D[j] = True
else
D[j] = False A
@ B
for i = 1 to k
if j + |Si | − 1 ≤ n and D[j + |Si |] and T [j .. j + |Si | − 1] = Si then
D[j] = True
D[j] = True
for i = 1 to k
if j + |Si | − 1 ≤ n and D[j + |Si |] and T [j .. j + |Si | − 1] 6= Si then
D[j] = False A B
@
Algoritmer og Datastrukturer (januar 2021) Side 14 af 14
Opgave 23 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
solution = D[n + 1] A B
@
solution = D[1] A
@ B
solution = True
for j = 1 to n A B
@
if D[j] = False then
solution = False
Opgave 24 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
j=1
while j ≤ n do
for i = 1 to k
if D[j + |Si |] then A B
@
t=i
print St
j = j + |St |
j =n+1
while j > 1 do
for i = 1 to k
if j − |Si | + 1 ≥ 1 and D[j − |Si |] and T [j − |Si | + 1 .. j] = Si then A B
@
t=i
print St
j = j − |St |
j=1
while j ≤ n do
for i = 1 to k
if j + |Si | − 1 ≤ n and D[j + |Si |] and T [j .. j + |Si | − 1] = Si then A
@ B
t=i
print St
j = j + |St |
Algoritmer og Datastrukturer (maj 2021) Side 1 af 14
EKSAMEN
Algoritmer og Datastrukturer
Studienummer :
Navn :
Algoritmer og Datastrukturer (maj 2021) Side 2 af 14
Vejledning og pointgivning
For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.
For en opgave med vægt v % og med n delspørgsmål, hvor du opnår samlet s point,
beregnes din besvarelse af opgaven som:
s
· v%
n
Bemærk at det er muligt at få negative point for en opgave.
Algoritmer og Datastrukturer (maj 2021) Side 3 af 14
Ja Nej
(log n)2 er O(n2 ) A
@ B
n · log n er O(n2 ) A
@ B
√
n er O((log n)3 ) A B
@
n3 er O(n) A B
@
√
n · log n er O(n) A
@ B
n3 er O(log(n!)) A B
@
n2 er O(n2/3 ) A B
@
2log n er Ω(n0.01 ) A
@ B
loop2 A B C D E F
@ G H
loop3 A B C D E F
@ G H
loop4 A B C D E F G
@ H
Algoritmer og Datastrukturer (maj 2021) Side 4 af 14
Opgave 3 (Max-Heap-Insert, 4 %)
Angiv den binære max-heap efter indsættelse af elementerne 6, 12, 13, 4, 8, 14 og 5 i den
givne rækkefølge med Max-Heap-Insert, startende med den tomme heap.
1 2 3 4 5 6 7
14 12 13 4 8 6 5 A
1 2 3 4 5 6 7
6 12 13 4 8 14 5 B
1 2 3 4 5 6 7
14 8 13 4 6 12 5 C
@
1 2 3 4 5 6 7
14 13 12 8 6 5 4 D
1 2 3 4 5 6 7
13 12 14 4 8 6 5 E
Opgave 4 (Heap-Extract-Max, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13
25 24 20 13 23 16 15 1 9 4 3 12 14
24 23 20 13 4 16 15 1 9 3 12 14 A
1 2 3 4 5 6 7 8 9 10 11 12
24 23 20 13 4 16 15 1 9 3 12 14 B
1 2 3 4 5 6 7 8 9 10 11 12
24 23 20 13 4 16 15 1 9 14 3 12 C
1 2 3 4 5 6 7 8 9 10 11 12
24 23 20 13 14 16 15 1 9 4 3 12 D
@
1 2 3 4 5 6 7 8 9 10 11 12
24 23 15 20 16 14 1 9 4 3 12 13 E
Opgave 5 (Sorteringsalgoritmer, 4 %)
Givet et array af størrelse n indeholdende tallene 1, 2, . . . , n i voksende rækkefølge, hvad
er worst-cast tiden for følgende sorteringsalgoritmer, når de anvendes på arrayet ?
HeapSort A B
@ C
MergeSort A B
@ C
QuickSort A B C
@
Algoritmer og Datastrukturer (maj 2021) Side 5 af 14
Opgave 6 (Partition, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
21 17 28 14 9 18 6 1 26 15 30 7 13 19 2
21 17 28 1 6 7 9 13 14 15 18 26 30 19 2 A
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 6 7 9 13 14 15 17 18 19 21 26 28 30 B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
21 17 28 9 6 1 7 13 14 18 26 15 30 19 2 C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
21 17 28 9 6 1 7 13 26 15 30 14 18 19 2 D
@
12
3 19
A 6 13 23
B 9 F G 22 K
C 10 20 J
D E H I
Angiv i hvilke blade A–K i ovenstående ubalancerede binære søgetræ elementerne 24,
18, 21, 17 og 8 skal indsættes (det antages at før hver indsættelse indeholder træet kun
ovenstående ti elementer).
A B C D E F G H I J K
Insert(24) A B C D E F G H I J K
@
Insert(18) A B C D E F G
@ H I J K
Insert(21) A B C D E F G H I
@ J K
Insert(17) A B C D E F G
@ H I J K
Insert(8) A B C
@ D E F G H I J K
Algoritmer og Datastrukturer (maj 2021) Side 6 af 14
3 7
2 4 6 9
1 8
Ja Nej
1, 3, 6, 8, 9 A B
@
1, 8 A
@ B
1, 2, 4, 7, 8 A B
@
1, 5, 8 A B
@
1, 3, 7, 8 A
@ B
24
18 26
5 20 27
2 7 23
Angiv det resulterende rød-sorte træ når man indsætter 21 i ovenstående rød-sorte træ
(dobbeltcirkler angiver røde knuder).
24 21 24 24
18 26 5 26 18 26 18 26
5 20 27 2 18 24 27 5 21 27 5 20 27
2 7 23 7 20 23 2 7 20 23 2 7 23
21 21
A B C
@ D
Algoritmer og Datastrukturer (maj 2021) Side 7 af 14
0 1 2 3 4 5 6 7 8 9 10
0 18 19 8 16
0 1 2 3 4 5 6 7 8 9 10
Insert(2) A B C D E
@ F G H I J K
Insert(3) A B C D E F G H
@ I J K
Insert(5) A B
@ C D E F G H I J K
Insert(7) A B C D E
@ F G H I J K
Insert(11) A B
@ C D E F G H I J K
Opgave 11 (Union-find, 4 %)
Angiv den resulterende union-find struktur efter nedenstående sekvens af operationer, når
der anvendes union-by-rank og stikomprimering.
makeset(a)
makeset(b)
makeset(c)
makeset(d)
makeset(e)
makeset(f )
union(e, a)
union(a, f )
union(d, b)
union(e, b)
union(c, f )
Find-Set(b)
2 2 3 2
b b b b
1 0 0 0 1 0 0 0 0 0 0 2 1 0 0
a c d f a c d e f c d f a c d
0 1 0 0 0
e a e e f
A
@ B C D
Algoritmer og Datastrukturer (maj 2021) Side 8 af 14
Opgave 12 (BFS, 4 %)
A G J I
C H D
B E
For et bredde først gennemløb (BFS) af ovenstående graf startende i knuden A, angiv
rækkefølgen knuderne bliver indsat i køen Q i BFS-algoritmen. Det antages, at grafen er
givet ved incidenslister, hvor incidenslisterne er sorteret alfabetisk.
A B C D
@
Opgave 13 (DFS, 4 %)
E D H
A G F
I B C
A B
@ C D
Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.
(A, G) A B C D
@
(G, B) A
@ B C D
(H, F) A B C
@ D
Algoritmer og Datastrukturer (maj 2021) Side 9 af 14
6
G E
4 1
7 8
2 6
A C F
4 1
1 4
2
B D
Antag Dijkstras algoritme anvendes til at finde korteste afstande fra knuden A til alle
knuder i ovenstående graf. Angiv hvilken rækkefølge knuderne bliver taget ud af priori-
tetskøen i Dijkstra’s algoritme.
A
@ B C D
8 9 10
E A G H
0 5 7 3 10
12 2 5
F C D B
Antag Prims algoritme anvendes til at finde et minimum udspændende træ for ovenstående
graf, og algoritmen starter i knuden A. Angiv hvilken rækkefølge knuderne bliver inklu-
deret i det minimum udspændende træ (taget ud af prioritetskøen i Prims algoritme).
A
@ B C D
Opgave 16 (Rekursionsligninger, 4 %)
Angiv løsningen for hver af nedenstående rekursionsligninger, hvor T (n) = 1 for n ≤ 1.
√
Θ(log n) Θ( n) Θ(n) Θ(n log n) Θ(n2 ) Θ(n2 log n) Θ(n3 )
T (n) = 4 · T (n/2) + n2 A B C D E F
@ G
T (n) = 2 · T (n/5) + n A B C
@ D E F G
T (n) = T (n − 1) + log n A B C D
@ E F G
T (n) = T (n/4) + 5 A
@ B C D E F G
T (n) = 4 · T (n/2) + 1 A B C D E
@ F G
Algoritmer og Datastrukturer (maj 2021) Side 10 af 14
B A
C D
Ja Nej
DCBA @
A B
BCDA A B
@
ACBD A B
@
DCAB A B
@
CDBA A B
@
Ja Nej
n A B
@
N A B
@
n−N A B
@
n · log n A
@ B
N · log n A B
@
(n − N ) · log n @
A B
Algoritmer og Datastrukturer (maj 2021) Side 11 af 14
Opgave 19 (Invarianter, 4 %)
Givet et ikke-negativt heltal x og et positive heltal y, så beregner nedenstående algorit-
me bx/yc.
Algoritme Division(x, y)
Inputbetingelse : Heltal x ≥ 0 og y ≥ 1
Outputkrav : r = bx/yc
Metode :r←0
{I} while x ≥ y do
x←x−y
r ←r+1
For hvert af følgende udsagn, angiv om de er en invariant I for algoritmen Division, hvor
x0 og y0 angiver værdierne for henholdsvis x og y i starten.
Ja Nej
r = bx/yc A B
@
r = bx0 /y0 c A B
@
r = b(x0 − x)/yc @
A B
x + ry = x0 A
@ B
r(x − x0 ) = y A B
@
v
v.l v.r
Angiv hvorledes v.ssg kan beregnes når v.min, v.max og v.ssg er kendt ved de to børn v.l
og v.r (det kan antages at disse begge eksisterer).
v.ssg = v.l .ssg + (v.x − v.l .max )2 + (v.x − v.r .min)2 + v.r .ssg @
C
Dynamisk programmering
De næste fire opgaver vedrører at løse forbindelses problemet ved hjælp af dynamisk
programmering. Vi er givet to mængder af knuder U = {u1 , . . . , um } og V = {v1 , . . . , vn },
som ligger på to parallelle linjer fra venstre-mod-højre. Vi ønsker at forbinde par af knuder
(ui , vj ) med rette linjer, således at ingen linjer overlapper på nær i endepunkter.
u1 u2 ui um
v1 v2 vj ··· vn
Hver mulig forbindelse (ui , vj ) har en reel værdi w(i, j), muligvis negativ. Vi ønsker at finde
en mængde af ikke-overlappende forbindelse med maksimal samlet værdi. For 0 ≤ i ≤ m
og 0 ≤ j ≤ n lader vi W (i, j) angive den maksimale værdi man kan opnå ved at forbinde
{u1 . . . , ui } med {v1 , . . . , vj } med ikke-overlappende forbindelse
W (i, j) kan bestemmes ved følgende rekursionsformel.
0
i = 0 eller j = 0
W (i, j) =
max{0, w(i, j)} + max{W (i − 1, j), W (i, j − 1)} ellers
Algoritme Connect(w)
Opret tom tabel W [0 .. m, 0 .. n]
for . . .
<< Opgave 21: iterer over W >>
Opgave 21 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
for i = 0 to m
A B
for j = 0 to n @
for j = 0 to n
A B
for i = 0 to m @
for i = m to 0 step −1
A B
for j = 0 to n @
for j = n to 0 step −1
A B
for i = 0 to m step −1 @
Opgave 22 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
W [i, j] = max(0, w[i, j] + max(W [i − 1, j], W [i, j − 1])) A B
@
W [i, j] = 0
if i > 0 and j > 0 then A
@ B
W [i, j] = max(0, w[i, j]) + max(W [i − 1, j], W [i, j − 1])
if i = 0 or j = 0 then
W [i, j] = 0
else
if w[i, j] > 0 then A B
@
W [i, j] = w[i, j]
else
W [i, j] = 0
W [i, j] = W [i, j] + max(W [i − 1, j], W [i, j − 1])
Algoritmer og Datastrukturer (maj 2021) Side 14 af 14
Opgave 23 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
solution = W [0, 0] A B
@
solution = W [m, n] A
@ B
solution = 0
for i = 0 to m A
@ B
for j = 0 to n
solution = max{solution, W [i, j]}
Opgave 24 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
i=m
j=n
while i > 0 and j > 0 do
if i = j then
A B
print (i, j) @
if i > j then
i=i−1
else
j =j−1
i=m
j=n
while i > 0 and j > 0 do
if w[i, j] > 0 then
A B
print (i, j) @
if W [i − 1, j] > W [i, j − 1] then
i=i−1
else
j =j−1
i=1
j=1
while i < m and j < n do
if w[i, j] > 0 then
A B
print (i, j) @
if W [i + 1, j] > W [i, j + 1] then
i=i+1
else
j =j+1
Algoritmer og Datastrukturer (januar 2022) Side 1 af 13
EKSAMEN
Algoritmer og Datastrukturer
Vejledning og pointgivning
Svarene på opgaverne angives på det separate svarark som afleveres.
For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.
For en opgave med vægt v % og med n delspørgsmål, hvor du opnår samlet s point,
beregnes din besvarelse af opgaven som:
s
· v%
n
Bemærk at det er muligt at få negative point for en opgave.
Algoritmer og Datastrukturer (januar 2022) Side 3 af 13
Ja Nej
42 er O((log n)7 ) A
@ B 1.1
√
n er O(n1/3 ) A B
@ 1.2
√ 1.3
log n er O( n · log n) A
@ B
√
2 n er O(n2/3 ) A
@ B 1.4
n0.001 er O(n2 ) A
@ B 1.5
√
(log n)2 er O( n) A
@ B 1.6
√
7n · log n + n2 er O( n) A B
@ 1.7
2n er O(8log n ) A B
@ 1.9
√
n2/3 er Ω( n) A
@ B 1.10
3n er Ω(n5 ) A
@ B 1.11
1 er Ω(log n) A B
@ 1.12
loop2 A B C D E F
@ G H 2.2
loop3 A B C D E
@ F G H 2.3
loop4 A B C D E F G H
@ 2.4
Algoritmer og Datastrukturer (januar 2022) Side 4 af 13
16
4 18
2 11 F 28
A 3 D E 26 29
B C 23 I J K
G H
Angiv i hvilke blade A–K i ovenstående ubalancerede binære søgetræ elementerne 19,
7, 6, 30 og 24 skal indsættes (det antages at før hver indsættelse indeholder træet kun
ovenstående ti elementer).
A B C D E F G H I J K
Insert(19) A B C D E F G
@ H I J K 3.1
Insert(7) A B C D
@ E F G H I J K 3.2
Insert(6) A B C D
@ E F G H I J K 3.3
Insert(30) A B C D E F G H I J K
@ 3.4
Insert(24) A B C D E F G H
@ I J K 3.5
Opgave 4 (Max-Heap-Insert, 4 %)
Angiv den binære max-heap efter indsættelse af elementerne 8, 2, 10, 6, 13, 5 og 4 i den
givne rækkefølge med Max-Heap-Insert, startende med den tomme heap.
1 2 3 4 5 6 7
13 8 10 6 2 5 4 A
1 2 3 4 5 6 7
13 10 8 2 6 5 4 B
@
1 2 3 4 5 6 7
13 10 8 6 5 4 2 C
1 2 3 4 5 6 7
10 13 8 6 2 5 4 D
1 2 3 4 5 6 7
8 2 10 6 13 5 4 E
Algoritmer og Datastrukturer (januar 2022) Side 5 af 13
Opgave 5 (Build-Max-Heap, 4 %)
1 2 3 4 5 6 7 8 9
6 3 2 5 1 4 8 7 9
9 8 6 7 1 2 4 3 5 A
1 2 3 4 5 6 7 8 9
6 5 8 9 1 4 2 7 3 B
1 2 3 4 5 6 7 8 9
9 7 8 6 1 4 2 3 5 C
@
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 D
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 E
Opgave 6 (Heap-Extract-Max, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13
25 18 17 12 14 15 11 1 10 5 2 3 6
18 14 17 12 5 15 11 1 10 2 3 6 A
1 2 3 4 5 6 7 8 9 10 11 12
18 17 12 14 15 11 1 10 5 2 3 6 B
1 2 3 4 5 6 7 8 9 10 11 12
18 14 17 12 6 15 11 1 10 5 2 3 C
@
1 2 3 4 5 6 7 8 9 10 11 12
18 14 17 12 5 15 11 1 10 6 2 3 D
1 2 3 4 5 6 7 8 9 10 11 12
18 14 17 12 5 15 11 1 10 2 3 6 E
Algoritmer og Datastrukturer (januar 2022) Side 6 af 13
Opgave 7 (Partition, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
14 22 1 11 23 18 2 27 25 26 8 15 29 9 6
14 22 1 11 2 8 15 27 25 26 18 23 29 9 6 A
@
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
14 22 1 2 8 11 15 18 23 25 26 27 29 9 6 B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 6 8 9 11 14 15 18 22 23 25 26 27 29 C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
14 22 1 11 2 8 15 23 18 27 25 26 29 9 6 D
Opgave 8 (Rekursionsligninger, 4 %)
Angiv løsningen for hver af nedenstående rekursionsligninger, hvor T (n) = 1 for n ≤ 1.
√
Θ(log n) Θ( n) Θ(n) Θ(n log n) Θ(n2 ) Θ(n2 log n) Θ(n3 )
T (n) = T (n − 1) + n2 A B C D E F G
@ 8.1
T (n) = 4 · T (n/5) + n A B C
@ D E F G 8.2
T (n) = T (n − 1) + n A B C D E
@ F G 8.3
T (n) = T (n/5) + 2 A
@ B C D E F G 8.4
T (n) = 2 · T (n/4) + 3 A B
@ C D E F G 8.5
0 1 2 3 4 5 6 7 8 9 10
13 21 2 16 19
0 1 2 3 4 5 6 7 8 9 10
Insert(1) A B C D E
@ F G H I J K 9.1
Insert(3) A B
@ C D E F G H I J K 9.2
Insert(8) A B
@ C D E F G H I J K 9.3
Insert(9) A B C D
@ E F G H I J K 9.4
Insert(10) A B
@ C D E F G H I J K 9.5
Algoritmer og Datastrukturer (januar 2022) Side 7 af 13
0 1 2 3 4 5 6 7 8 9 10
20 15 10 19 4
0 1 2 3 4 5 6 7 8 9 10
A
Insert(0) @ B C D E F G H I J K 10.1
Insert(3) A B C D E
@ F G H I J K 10.2
Insert(6) A B C D E F G H I
@ J K 10.3
Insert(7) A B C D E F
@ G H I J K 10.4
A
Insert(8) @ B C D E F G H I J K 10.5
2 8
1 3 6 9
5 7
Ja Nej
4, 5, 7 A B
@ 11.1
5, 7 A
@ B 11.2
2, 5, 7, 8 A
@ B 11.3
1, 3, 5, 7, 8 @
A B 11.4
2, 5, 6, 7, 9 A B
@ 11.5
Algoritmer og Datastrukturer (januar 2022) Side 8 af 13
16
12 22
4 15 17 26
6 23
Angiv det resulterende rød-sorte træ når man indsætter 10 i ovenstående rød-sorte træ
(dobbeltcirkler angiver røde knuder).
16 16 16 16
12 22 12 22 6 23 12 22
4 15 17 26 4 15 17 26 4 12 22 26 6 15 17 26
6 23 6 23 10 15 17 4 10 23
10 10
A B C D
@
Opgave 13 (Union-find, 4 %)
Angiv den resulterende union-find struktur efter nedenstående sekvens af operationer, når
der anvendes union-by-rank og stikomprimering.
makeset(a)
makeset(b)
makeset(c)
makeset(d)
makeset(e)
makeset(f )
union(d, a)
union(f , c)
union(a, f )
union(e, b)
union(d, e)
Find-Set(a)
2 2 2 3
c c c b
1 1 0 0 1 1 0 1 1 0 0 0 1 2 0
a b d f a b f a b d e f a c e
0 0 0 0 0
e d e d f
A
@ B C D
Algoritmer og Datastrukturer (januar 2022) Side 9 af 13
4 5
C H D
3 5 6
5 4
6 2
I B A
6 3
8 3 3
2 7
G E F
Antag Dijkstras algoritme anvendes til at finde korteste afstande fra knuden A til alle
knuder i ovenstående graf. Angiv hvilken rækkefølge knuderne bliver taget ud af priori-
tetskøen i Dijkstra’s algoritme.
A B
@ C D
Opgave 16 (BFS, 4 %)
G F H E
J C B
I D
For et bredde først gennemløb (BFS) af ovenstående graf startende i knuden A, angiv
rækkefølgen knuderne bliver indsat i køen Q i BFS-algoritmen. Det antages, at grafen er
givet ved incidenslister, hvor incidenslisterne er sorteret alfabetisk.
A B C
@ D
Algoritmer og Datastrukturer (januar 2022) Side 10 af 13
Opgave 17 (DFS, 4 %)
H I G B
J F E
A D
A
@ B C D 17.1
Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.
(F, D) A
@ B C D 17.3
(E, G) A B
@ C D 17.4
(B, E) A
@ B C D 17.5
C D
A B
Ja Nej
CBAD @
A B 18.1
ABDC A B
@ 18.2
BCDA @
A B 18.3
BDCA A B
@ 18.4
CBDA @
A B 18.5
Algoritmer og Datastrukturer (januar 2022) Side 11 af 13
8 -3 -2
G C F B
7 2 6 -1 4
11 3 9
A H D E
Antag Kruskals algoritme anvendes til at finde et minimum udspændende træ for
ovenstående graf. Angiv hvilken kant sidst inkluderes i det minimum udspændende træ.
(C , H) (C , F) (B , E) (D , H) (C , G)
A B C D E
@
Opgave 20 (Invarianter, 4 %)
Givet et ikke-negativt heltal x og et positivt heltal y, så beregner nedenstående algorit-
me ⌊x/y⌋.
For hvert af følgende udsagn, angiv om det er en invariant I for algoritmen Fibonacci-
Division, hvor x0 og y0 angiver værdierne for henholdsvis x og y i starten.
Ja Nej
⌊x/y⌋ = ⌊x0 /y0 ⌋ A B
@ 20.1
x0 = x + r · y A
@ B 20.2
x − x0 = f · y A B
@ 20.4
f ≤x A B
@ 20.5
Algoritmer og Datastrukturer (januar 2022) Side 12 af 13
Ja Nej
N −n A B
@ 21.1
t−s A B
@ 21.2
s+t A B
@ 21.3
|N − 3s| + |3t − 2N | A
@ B 21.5
Dynamisk programmering
De næste tre opgaver vedrører at løse delsums problemet ved hjælp af dynamisk program-
mering. Lad x1 , x2 , . . . , xn være en sekvens af n positive heltal og V et positivt heltal. Vi
ønsker at finde en delsekvens xi1 , xi2 , . . . , xij , hvor i1 < i2 < · · · < ij , med størst mulig
sum ≤ V . F.eks. for sekvensen 19, 14, 17, 20, 17, 16, 18 og V = 46, har delsekvensen 19, 20
med sum 39 størst mulig sum ≤ 46.
For 0 ≤ k ≤ n og 0 ≤ v ≤ V , lader vi S(k, v) angive den størst mulig sum ≤ v en
delsekvens af x1 , . . . , xk kan opnå. S(k, v) kan bestemmes ved følgende rekursionsformel.
0 hvis k = 0
S(k, v) = S(k − 1, v) hvis 1 ≤ k ≤ n og xk > v
max(S(k − 1, v), x + S(k − 1, v − x )) hvis 1 ≤ k ≤ n og x ≤ v
k k k
Opgave 22 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
for v = 1 to V A B 22.1
@
for k = 1 to n
for k = 1 to n A B 22.3
@
for v = V to 1 step - 1
Opgave 23 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
if xk > v then
T [k, v] = T [k − 1, v] 23.1
A
@ B
else
T [k, v] = max(T [k − 1, v], xk + T [k − 1, v − xk ])
T [k, v] = T [k − 1, v]
if xk ≤ v then A
@ B 23.2
Opgave 24 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
v = T [n, V ]
for k = 1 to n
if T [k, v] ̸= T [k − 1, v] then
udskriv xk A B
@ 24.1
v = v − xk
v = T [n, V ]
for k = n to 1 step −1
if T [k, v] ̸= T [k − 1, v] then A
@ B 24.2
udskriv xk
v = v − xk
v=V
for k = 1 to n
if xk ≤ T [k, v] then
udskriv xk A B
@ 24.3
v = v − xk
Algoritmer og Datastrukturer (maj 2022) Side 1 af 14
EKSAMEN
Algoritmer og Datastrukturer
Vejledning og pointgivning
Svarene på opgaverne angives på det separate svarark som afleveres.
For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.
For en opgave med vægt v % og med n delspørgsmål, hvor du opnår samlet s point,
beregnes din besvarelse af opgaven som:
s
· v%
n
Bemærk at det er muligt at få negative point for en opgave.
Algoritmer og Datastrukturer (maj 2022) Side 3 af 14
Ja Nej
√ 1.1
log n er O( n) A
@ B
√ √ 1.2
n · log n er O( n) A B
@
√
n n er O(n2 log n) A
@ B 1.3
n · log n er O(n0.01 ) A B
@ 1.5
n! er O(n · log n) A B
@ 1.9
2log n er Θ(n) A
@ B 1.10
n0.001 er Ω(n2 ) A B
@ 1.11
√
n n er Θ(n3/2 ) A
@ B 1.12
Θ(n2 ) Θ(n2 · log n) Θ((log n)2 ) Θ(n log n) Θ(log n) Θ(n3 ) Θ( logloglogn n ) Θ(n)
loop1 A B C D E F
@ G H 2.1
loop2 A B C D E F G H
@ 2.2
loop3 A B C D E F
@ G H 2.3
loop4 A B C
@ D E F G H 2.4
Algoritmer og Datastrukturer (maj 2022) Side 4 af 14
18
6 28
5 10 25 30
2 C D E 24 26 J K
A B F G H I
Angiv i hvilke blade A–K i ovenstående ubalancerede binære søgetræ elementerne 8, 23,
14, 31 og 9 skal indsættes (det antages at før hver indsættelse indeholder træet kun
ovenstående ti elementer).
A B C D E F G H I J K
Insert(8) A B C D
@ E F G H I J K 3.1
Insert(23) A B C D E F
@ G H I J K 3.2
Insert(14) A B C D E
@ F G H I J K 3.3
Insert(31) A B C D E F G H I J K
@ 3.4
Insert(9) A B C D
@ E F G H I J K 3.5
Opgave 4 (Max-Heap-Insert, 4 %)
Angiv den binære max-heap efter indsættelse af elementerne 6, 8, 13, 12, 7, 4 og 14 i den
givne rækkefølge med Max-Heap-Insert, startende med den tomme heap.
1 2 3 4 5 6 7
14 12 13 6 7 4 8 A
@
1 2 3 4 5 6 7
14 12 13 8 7 4 6 B
1 2 3 4 5 6 7
14 13 12 8 7 6 4 C
1 2 3 4 5 6 7
6 8 13 12 7 4 14 D
1 2 3 4 5 6 7
13 12 14 8 7 4 6 E
Algoritmer og Datastrukturer (maj 2022) Side 5 af 14
Opgave 5 (Build-Max-Heap, 4 %)
1 2 3 4 5 6 7 8 9
5 2 8 6 7 4 3 9 1
9 8 7 6 5 4 3 2 1 A
1 2 3 4 5 6 7 8 9
8 7 5 9 2 4 3 6 1 B
1 2 3 4 5 6 7 8 9
9 7 8 6 5 4 3 2 1 C
@
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 D
1 2 3 4 5 6 7 8 9
9 8 5 7 6 4 3 2 1 E
Opgave 6 (Heap-Extract-Max, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13
26 25 18 15 9 17 4 7 2 1 5 14 16
25 18 16 9 17 15 7 2 1 5 14 4 A
1 2 3 4 5 6 7 8 9 10 11 12
25 15 18 7 9 17 4 2 1 5 14 16 B
1 2 3 4 5 6 7 8 9 10 11 12
25 15 18 7 9 17 4 16 2 1 5 14 C
1 2 3 4 5 6 7 8 9 10 11 12
25 16 18 15 9 17 4 7 2 1 5 14 D
@
1 2 3 4 5 6 7 8 9 10 11 12 13
25 15 18 7 9 17 4 2 1 5 14 16 E
Algoritmer og Datastrukturer (maj 2022) Side 6 af 14
Opgave 7 (Partition, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
11 3 29 23 9 20 28 16 5 8 15 30 1 27 2
11 3 29 1 23 9 20 28 16 5 8 15 30 27 2 A
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
11 3 29 1 5 8 9 15 16 20 23 28 30 27 2 B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 5 8 9 11 15 16 20 23 27 28 29 30 C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
11 3 29 1 9 20 28 16 5 8 15 30 23 27 2 D
@
Opgave 8 (Radix-sort, 4 %)
Betragt Radix-Sort anvendt på ovenstående liste af tal (d = 4, k = 5). Angiv den delvist
sortede liste efter at Radix-Sort har sorteret tallene efter de to mindst betydende cifre.
0 1 2 3 4 5 6 7 8 9 10
19 9 10 14 21
0 1 2 3 4 5 6 7 8 9 10
Insert(1) A B C D
@ E F G H I J K 9.1
Insert(2) A B C D E F G
@ H I J K 9.2
A
Insert(3) @ B C D E F G H I J K 9.3
Insert(4) A B
@ C D E F G H I J K 9.4
A
Insert(7) @ B C D E F G H I J K 9.5
Algoritmer og Datastrukturer (maj 2022) Side 7 af 14
0 1 2 3 4 5 6 7 8 9 10
22 12 1 3 18
0 1 2 3 4 5 6 7 8 9 10
Insert(5) A B C D E
@ F G H I J K 10.1
Insert(7) A B C D E F G
@ H I J K 10.2
Insert(8) A B C
@ D E F G H I J K 10.3
Insert(9) A B C D E F
@ G H I J K 10.4
Insert(11) A B C D E F
@ G H I J K 10.5
4 8
2 5 7 9
1 3
Ja Nej
1, 2, 3, 5, 8 A B
@ 11.1
1, 3, 6 A B
@ 11.2
1, 3, 4, 8 A
@ B 11.3
1, 3 A
@ B 11.4
1, 3, 4, 7, 9 @
A B 11.5
Algoritmer og Datastrukturer (maj 2022) Side 8 af 14
18
13 25
6 14 24 27
15 21
Angiv det resulterende rød-sorte træ når man indsætter 23 i ovenstående rød-sorte træ
(dobbeltcirkler angiver røde knuder).
18 21 18 18
13 25 15 24 13 25 13 25
6 14 24 27 13 18 23 25 6 14 23 27 6 14 24 27
15 21 6 14 27 15 21 24 15 21
23 23
A B C
@ D
Opgave 13 (Union-find, 4 %)
Angiv den resulterende union-find struktur efter nedenstående sekvens af operationer, når
der anvendes union-by-rank og stikomprimering.
makeset(a)
makeset(b)
makeset(c)
makeset(d)
makeset(e)
makeset(f )
union(c, e)
union(c, d)
union(f , a)
union(c, a)
union(b, d)
Find-Set(b)
3 2 2 2
a a a a
0 2 0 0 0 0 1 0 0 0 1 0 0 1 0
b d f b c d e f b d e f b e f
0 1 0 0 0
c e c c d
A B C
@ D
Algoritmer og Datastrukturer (maj 2022) Side 9 af 14
Opgave 14 (Rekursionsligninger, 4 %)
Angiv løsningen for hver af nedenstående rekursionsligninger, hvor T (n) = 1 for n ≤ 1.
√
Θ(log n) Θ( n) Θ(n) Θ(n log n) Θ(n2 ) Θ(n2 log n) Θ(n3 )
T (n) = 4 · T (n/2) + n2 A B C D E F
@ G 14.1
T (n) = 4 · T (n/5) + n A B C
@ D E F G 14.2
T (n) = T (n − 1) + n A B C D E
@ F G 14.3
T (n) = T (n/5) + 5 A
@ B C D E F G 14.4
T (n) = 4 · T (n/5) + n3 A B C D E F G
@ 14.5
Opgave 15 (DFS, 4 %)
C G F
H B
E A D
A B C D
@ 15.1
Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.
(B, A) A B
@ C D 15.3
(H, C) A
@ B C D 15.4
(H, G) A B C D
@ 15.5
Algoritmer og Datastrukturer (maj 2022) Side 10 af 14
4
A B
8 7
-2
F D
2 9 -3
-1
C E
Antag Kruskals algoritme anvendes til at finde et minimum udspændende træ for
ovenstående graf. Angiv hvilken kant sidst inkluderes i det mininmum udspændende træ.
(D , E) (C , E) (D , F) (C , F) (B , D)
A B C D E
@
E G
5 2
7 8
8 8
F B H
4 8
2 6
4
C A
3
5
Antag Dijkstras algoritme anvendes til at finde korteste afstande fra knuden A til alle
knuder i ovenstående graf. Angiv hvilken rækkefølge knuderne bliver taget ud af priori-
tetskøen i Dijkstra’s algoritme.
A
@ B C D
Algoritmer og Datastrukturer (maj 2022) Side 11 af 14
Opgave 18 (BFS, 4 %)
A I
E H B
G J C F
For et bredde først gennemløb (BFS) af ovenstående graf startende i knuden A, angiv
rækkefølgen knuderne bliver indsat i køen Q i BFS-algoritmen. Det antages, at grafen er
givet ved incidenslister, hvor incidenslisterne er sorteret alfabetisk.
A B C
@ D
B C
D A
Ja Nej
BDCA A B
@ 19.1
DCAB @
A B 19.2
CBAD A B
@ 19.3
CDBA @
A B 19.4
CDAB @
A B 19.5
Algoritmer og Datastrukturer (maj 2022) Side 12 af 14
Ja Nej
log n A B
@ 20.1
n A B
@ 20.2
Pn 20.3
i=1 log i
A
@ B
n · log n A
@ B 20.4
n2 A B
@ 20.5
Opgave 21 (Invarianter, 4 %)
Nedenstående algoritme Multiplikation beregner produktet n · m af to heltal n og m, der
kan være positive, negative og nul.
Algoritme Multiplikation(n, m)
Inputbetingelse : Heltal n og m
Outputkrav : r = n0 · m0
Metode :r←0
{I} while n ̸= 0 do
if n < 0 then
r ←r−m
n←n+1
else
r ←r+m
n←n−1
For hvert af følgende udsagn, angiv om det er en invariant I for algoritmen Multiplikation,
hvor n0 og m0 angiver værdierne for henholdsvis n og m i starten.
Ja Nej
|n| = |n| − 1 A B
@ 21.1
|n| ≤ |n0 | A
@ B 21.2
r =m·n A B
@ 21.3
n0 · m0 = r + n · m @
A B 21.4
n · m = r + n0 · m0 A B
@ 21.5
Algoritmer og Datastrukturer (maj 2022) Side 13 af 14
Dynamisk programmering
De næste tre opgaver vedrører at løse det begrænsede møntopdelings problem ved hjælp
af dynamisk programmering. Lad C = {c1 , c2 , . . . , cn } betegne n forskellig positive og
heltallige møntværdier. Vi ønsker at afgøre om en heltallig værdi V kan opnås med højest
M mønter (den samme møntværdi må gerne indgå flere gange). F.eks. for møntværdierne
C = {2, 5, 10} kan værdien V = 19 opnås for M = 5, da 19 = 2 + 2 + 5 + 10, men ikke for
M = 3, da 19 ikke er summen af tre mønter.
For 0 ≤ v ≤ V og 0 ≤ m ≤ M , lader vi P (v, m) angive om det er muligt at opnå værdien v
med højest m mønter. P (v, m) kan bestemmes ved følgende rekursionsformel.
Sand hvis v = 0
Falsk hvis v > 0 og m = 0
P (v, m) =
Sand hvis m > 0 og der findes en mønt ci ≤ v hvor P (v − ci , m − 1) er Sand
Falsk ellers
else
print ikke muligt
Opgave 22 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
for v = 0 to V A B 22.1
@
for m = 0 to M
for v = 0 to V A B 22.2
@
for m = M to 0 step - 1
Opgave 23 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
if v = 0 then
P [v, m] = Sand 23.1
A B
@
for i = 1 to n
if P [v − ci , m − 1] = Sand then
P [v, m] = Sand
if v = 0 then
P [v, m] = Sand 23.2
A B
@
for i = 1 to n
if ci ≤ v and P [v − ci , m − 1] = Sand then
P [v, m] = Sand
if v = 0 then
P [v, m] = Sand 23.3
A
@ B
if m > 0 then
for i = 1 to n
if ci ≤ v and P [v − ci , m − 1] = Sand then
P [v, m] = Sand
Opgave 24 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
while V > 0 do
for i = 1 to n
if ci ≤ V and P [V − ci , M − 1] = Sand then
print ci A
@ B 24.1
V = V − ci
M =M −1
for i = 1 to n
while ci ≤ V and P [V − ci , M − 1] = Sand do
print ci A
@ B 24.2
V = V − ci
M =M −1
for i = 1 to n
if ci ≤ V and P [V − ci , M − 1] = Sand then
print ci
V = V − ci A B
@ 24.3
M =M −1
Algoritmer og Datastrukturer (januar 2023) Side 1 af 14
EKSAMEN
Algoritmer og Datastrukturer
Vejledning og pointgivning
Svarene på opgaverne angives på det separate svarark som afleveres.
For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.
For en opgave med vægt v % og med n delspørgsmål, hvor du opnår samlet s point,
beregnes din besvarelse af opgaven som:
s
· v%
n
Bemærk at det er muligt at få negative point for en opgave.
Algoritmer og Datastrukturer (januar 2023) Side 3 af 14
Ja Nej
(log n)5 /6 er O((log n)3 ) A B
@ 1.1
n · log n er O(n0.1 ) A B
@ 1.2
√
n er O(n0.1 ) A B
@ 1.3
√ √
n0.1 + n er O( n · log n) A
@ B 1.4
log n er O(n) A
@ B 1.5
n1/3 er O(n) A
@ B 1.7
√ √ 1.8
n · log n er O( n) A B
@
√ √ √ 1.9
5n n + n er O( n · log n) A B
@
log(n!) + n2 /3 er Ω(n) A
@ B 1.10
loop2 A B C D
@ E F G H 2.2
loop3 A B C D E F
@ G H 2.3
loop4 A
@ B C D E F G H 2.4
Algoritmer og Datastrukturer (januar 2023) Side 4 af 14
Opgave 3 (Max-Heap-Insert, 4 %)
Angiv den binære max-heap efter indsættelse af elementerne 6, 12, 9, 11, 14, 2 og 8 i den
givne rækkefølge med Max-Heap-Insert, startende med den tomme heap.
1 2 3 4 5 6 7
12 14 9 11 6 2 8 A
1 2 3 4 5 6 7
6 12 9 11 14 2 8 B
1 2 3 4 5 6 7
14 12 9 11 6 2 8 C
1 2 3 4 5 6 7
14 12 11 9 8 6 2 D
1 2 3 4 5 6 7
14 12 9 6 11 2 8 E
@
Opgave 4 (Build-Max-Heap, 4 %)
1 2 3 4 5 6 7 8 9
6 4 5 1 8 9 2 7 3
6 8 9 7 4 5 2 1 3 A
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 B
1 2 3 4 5 6 7 8 9
9 7 8 6 4 5 2 1 3 C
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 D
1 2 3 4 5 6 7 8 9
9 8 6 7 4 5 2 1 3 E
@
Opgave 5 (Rekursionsligninger, 4 %)
Angiv løsningen for hver af nedenstående rekursionsligninger, hvor T (n) = 1 for n ≤ 1.
√
Θ(log n) Θ( n) Θ(n) Θ(n log n) Θ(n2 ) Θ(n2 log n) Θ(n3 )
T (n) = 9 · T (n/3) + 2 A B C D E
@ F G 5.1
T (n) = T (n − 1) + log n A B C D
@ E F G 5.2
T (n) = 4 · T (n/5) + n2 A B C D E
@ F G 5.3
T (n) = T (n − 2) + n2 A B C D E F G
@ 5.4
T (n) = 3 · T (n/9) + 2 A B
@ C D E F G 5.5
Algoritmer og Datastrukturer (januar 2023) Side 5 af 14
0 1 2 3 4 5 6 7 8 9 10
0 22 11 16 5
0 1 2 3 4 5 6 7 8 9 10
Insert(3) A B C D
@ E F G H I J K 6.1
Insert(4) A B C D E F
@ G H I J K 6.2
Insert(6) A B C D
@ E F G H I J K 6.3
Insert(8) A B C D
@ E F G H I J K 6.4
Insert(9) A B C D
@ E F G H I J K 6.5
0 1 2 3 4 5 6 7 8 9 10
0 9 13 14 2
0 1 2 3 4 5 6 7 8 9 10
Insert(3) A B
@ C D E F G H I J K 7.1
Insert(4) A B
@ C D E F G H I J K 7.2
Insert(5) A B C D E
@ F G H I J K 7.3
Insert(10) A B C D E F G H I
@ J K 7.4
Insert(11) A B C D
@ E F G H I J K 7.5
Algoritmer og Datastrukturer (januar 2023) Side 6 af 14
19
6 27
4 17 23 K
A B 12 F 20 24
C 15 G H I J
D E
Angiv i hvilke blade A–K i ovenstående ubalancerede binære søgetræ elementerne 7, 14,
16, 11 og 22 skal indsættes (det antages at før hver indsættelse indeholder træet kun
ovenstående ti elementer).
A B C D E F G H I J K
Insert(7) A B C
@ D E F G H I J K 8.1
Insert(14) A B C D
@ E F G H I J K 8.2
Insert(16) A B C D E
@ F G H I J K 8.3
Insert(11) A B C
@ D E F G H I J K 8.4
Insert(22) A B C D E F G H
@ I J K 8.5
2 7
1 3 5 8
6 9
Ja Nej
2, 6, 7, 9 A
@ B 9.1
1, 3, 5, 6, 8, 9 A B
@ 9.2
6, 9 A
@ B 9.3
1, 3, 6, 7, 9 A
@ B 9.4
4, 6, 9 A B
@ 9.5
Algoritmer og Datastrukturer (januar 2023) Side 7 af 14
10
4 16
2 8 11 27
7 22
Angiv det resulterende rød-sorte træ når man indsætter 19 i ovenstående rød-sorte træ
(dobbeltcirkler angiver røde knuder).
10 11 10 10
4 16 4 19 4 16 4 16
2 8 11 27 2 8 16 22 2 8 11 27 2 8 11 22
7 22 7 10 27 7 22 7 19 27
19 19
A B C D
@
Opgave 11 (Union-find, 4 %)
Angiv den resulterende union-find struktur efter nedenstående sekvens af operationer, når
der anvendes union-by-rank og stikomprimering.
makeset(a)
makeset(b)
makeset(c)
makeset(d)
makeset(e)
makeset(f )
union(b, e)
union(b, c)
union(a, d)
union(c, d)
union(f , c)
Find-Set(b)
2 3 2 2
d d d d
0 0 0 1 0 0 0 2 1 0 0 0 1 0 0 0 1 0
a b c e f a b c e f a c e f a b e f
0 0
b c
A
@ B C D
Algoritmer og Datastrukturer (januar 2023) Side 8 af 14
Opgave 12 (BFS, 4 %)
J E I
B F A C
H D G
For et bredde først gennemløb (BFS) af ovenstående graf startende i knuden A, angiv
rækkefølgen knuderne bliver indsat i køen Q i BFS-algoritmen. Det antages, at grafen er
givet ved incidenslister, hvor incidenslisterne er sorteret alfabetisk.
A B C D
@
Opgave 13 (DFS, 4 %)
F B
D H G E I
A C
A B C
@ D 13.1
Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.
(I, B) A B C
@ D 13.3
(C, H) A
@ B C D 13.4
(A, H) A B C D
@ 13.5
Algoritmer og Datastrukturer (januar 2023) Side 9 af 14
3 7
C H G
4 4
7 8
7
F D
5 1
5 3
1 3
B E A
Antag Dijkstras algoritme anvendes til at finde korteste afstande fra knuden A til alle
knuder i ovenstående graf. Angiv hvilken rækkefølge knuderne bliver taget ud af priori-
tetskøen i Dijkstra’s algoritme.
A
@ B C D
4 8
E C B
2 0 6
13 5
8 4
D H A
3 -2 -2
12 7
5 13
I F G
Antag Prims algoritme anvendes til at finde et minimum udspændende træ for ovenstående
graf, og algoritmen starter i knuden A. Angiv hvilken rækkefølge knuderne bliver inklu-
deret i det minimum udspændende træ (taget ud af prioritetskøen i Prims algoritme).
A
@ B C D
Algoritmer og Datastrukturer (januar 2023) Side 10 af 14
E A B
D F
G C H
1 2 3 4 5 6 7 8
A B
@ C D E F G H
B A
C D
Ja Nej
ADBC @
A B 17.1
CBDA A B
@ 17.2
ADCB A B
@ 17.3
ABDC @
A B 17.4
CDBA A B
@ 17.5
Opgave 18 (Select, 4 %)
Angiv worst-case og forventede tid for Randomized-Select og Deterministic-Select.
Ja Nej
log n A B
@ 19.1
n A B
@ 19.2
n log n A
@ B 19.3
n2 A B
@ 19.4
Pn 19.5
i=1 log i
A
@ B
Pn 19.6
i=1 i
A B
@
Opgave 20 (Invarianter, 4 %)
Givet to ikke-negative heltal x og y, så beregner nedenstående algoritme x + y.
Algoritme Addition(x, y)
Inputbetingelse : Heltal x ≥ 0 og y ≥ 0
Outputkrav : r = x0 + y0
Metode :r←0
{I} while x > 0 or y > 0 do
if x > 0 then
r ←r+1
x←x−1
else
r ←r+1
y ←y−1
For hvert af følgende udsagn, angiv om det er en invariant I for algoritmen Addition, hvor
x0 og y0 angiver værdierne for henholdsvis x og y i starten.
Ja Nej
r =x+y A B
@ 20.1
r ≤x+y A B
@ 20.2
r = x0 + y0 A B
@ 20.3
r + x + y = x 0 + y0 @
A B 20.4
r + x0 + y0 = x + y A B
@ 20.5
Algoritmer og Datastrukturer (januar 2023) Side 12 af 14
Dynamisk programmering
De næste tre opgaver vedrører at løse grenopsavnings problemet ved hjælp af dynamisk
programmering. Antag at vi har en gren af længde n centimeter, og vi skal save denne i
mindre stykker, alle af længde ≤ m centimeter, ved at bruge mindst mulig energi. Lad ei
betegne energien, der skal bruges til at save grenen over efter i centimeter. Lad Ei være
den minimale energi der skal til for at save de første i centimeter af grenen i stykker af
længde ≤ m, som kan bestemmes ved følgende rekursionsformel:
0 hvis 0 ≤ i ≤ m
Ei =
mini−m≤j<i (Ej + ej ) hvis m < i ≤ n
<< Opgave 23: Udskriv en løsning der kræver minimal energi >>
Opgave 21 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
for i = 0 to n A
@ B 21.1
for i = n to 0 step −1 A B
@ 21.2
Algoritmer og Datastrukturer (januar 2023) Side 13 af 14
Opgave 22 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
E[i] = 0
if i > m then 22.1
A B
for j = i − m to i − 1
@
E[i] = min(E[i], ej + E[j])
if i ≤ m then
E[i] = 0
else A B 22.2
@
E[i] = ∞
for j = i − m to i − 1
E[i] = min(E[i], ej + E[j])
if i ≤ m then
E[i] = 0
else A B 22.3
@
E[i] = ∞
for j = i − 1 to i − m step −1
E[i] = min(E[i], ej + E[j])
Opgave 23 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
i=n
while i > m do
j =i−1
while E[i] ̸= ej + E[j] do A
@ B 23.1
j =j−1
i=j
print i
i = E[n]
while i > m do
print i A B
@ 23.2
i = E[i]
i=n
j =n−1
while j > 0 do
if E[i] = ej + E[j] do A
@ B 23.3
i=j
print i
j =j−1
Algoritmer og Datastrukturer (januar 2023) Side 14 af 14
v
v.l v.r
Angiv hvorledes v.total kan beregnes når den tilsvarende information er kendt ved de to
børn v.l og v.r (det kan antages at disse begge eksisterer).
v.total = max(v.l .total , v.l .total + v.w, v.l .total + v.w + v.r .total ) C
EKSAMEN
Algoritmer og Datastrukturer
Vejledning og pointgivning
Svarene på opgaverne angives på det separate svarark som afleveres.
For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.
For en opgave med vægt v % og med n delspørgsmål, hvor du opnår samlet s point,
beregnes din besvarelse af opgaven som:
s
· v%
n
Bemærk at det er muligt at få negative point for en opgave.
Algoritmer og Datastrukturer (maj 2023) Side 3 af 14
Ja Nej
n3 + 5(log n)6 er O(n3/2 ) A B
@ 1.1
2n er O(nn ) A
@ B 1.2
2log n er O(n3/2 ) A
@ B 1.3
√
n n er O(n2/3 ) A B
@ 1.4
n0.1 er O(n2/3 ) A
@ B 1.5
n · log n er O(8log n ) A
@ B 1.6
3nn er O(n1/3 ) A B
@ 1.7
√
n + n · log n er O(2n ) A
@ B 1.8
√
4log n er O( n) A B
@ 1.9
n2 er Θ(log n) A B
@ 1.12
loop2 A B C D
@ E F G H 2.2
loop3 A B C
@ D E F G H 2.3
loop4 A
@ B C D E F G H 2.4
Algoritmer og Datastrukturer (maj 2023) Side 4 af 14
10
6 16
2 7 13 19
A B C D 12 H 17 K
11 G I J
E F
Angiv i hvilke blade A–K i ovenstående ubalancerede binære søgetræ elementerne 15,
14, 20, 4 og 5 skal indsættes (det antages at før hver indsættelse indeholder træet kun
ovenstående ti elementer).
A B C D E F G H I J K
Insert(15) A B C D E F G H
@ I J K 3.1
Insert(14) A B C D E F G H
@ I J K 3.2
Insert(20) A B C D E F G H I J K
@ 3.3
Insert(4) A B
@ C D E F G H I J K 3.4
Insert(5) A B
@ C D E F G H I J K 3.5
Opgave 4 (Max-Heap-Insert, 4 %)
Angiv den binære max-heap efter indsættelse af elementerne 4, 7, 3, 9, 6, 1 og 14 i den
givne rækkefølge med Max-Heap-Insert, startende med den tomme heap.
1 2 3 4 5 6 7
14 9 7 6 4 3 1 A
1 2 3 4 5 6 7
4 7 3 9 6 1 14 B
1 2 3 4 5 6 7
14 9 4 7 6 1 3 C
1 2 3 4 5 6 7
7 9 14 4 6 1 3 D
1 2 3 4 5 6 7
14 7 9 4 6 1 3 E
@
Algoritmer og Datastrukturer (maj 2023) Side 5 af 14
Opgave 5 (Heap-Extract-Max, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13
23 22 20 19 21 16 2 3 4 10 9 1 14
22 21 20 19 14 16 2 3 4 10 9 1 A
@
1 2 3 4 5 6 7 8 9 10 11 12
22 21 19 20 16 14 3 4 10 9 1 2 B
1 2 3 4 5 6 7 8 9 10 11 12
22 21 20 19 10 16 2 3 4 14 9 1 C
1 2 3 4 5 6 7 8 9 10 11 12
22 21 20 19 10 16 2 3 4 9 1 14 D
1 2 3 4 5 6 7 8 9 10 11 12 13
22 21 20 19 10 16 2 3 4 9 1 14 E
Opgave 6 (Partition, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
4 21 25 12 26 2 3 17 7 9 1 10 20 19 18
4 21 25 12 2 3 17 7 9 1 10 19 26 20 18 A
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
4 21 25 1 2 3 7 9 10 12 17 19 20 26 18 B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
4 21 25 12 2 3 17 7 9 1 10 19 20 26 18 C
@
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 2 3 4 7 9 10 12 17 18 19 20 21 25 26 D
Opgave 7 (Radix-sort, 4 %)
Betragt Radix-Sort anvendt på ovenstående liste af tal (d = 4, k = 5). Angiv den delvist
sortede liste efter at Radix-Sort har sorteret tallene efter de to mindst betydende cifre.
0 1 2 3 4 5 6 7 8 9 10
6 19 8 4 16
0 1 2 3 4 5 6 7 8 9 10
Insert(0) A
@ B C D E F G H I J K 8.1
Insert(3) A B C D E F G H
@ I J K 8.2
Insert(5) A
@ B C D E F G H I J K 8.3
Insert(9) A B C D E F G H
@ I J K 8.4
Insert(10) A B C D E F G H I J
@ K 8.5
0 1 2 3 4 5 6 7 8 9 10
0 9 2 22 14
0 1 2 3 4 5 6 7 8 9 10
Insert(3) A B
@ C D E F G H I J K 9.1
Insert(5) A B C D E
@ F G H I J K 9.2
Insert(6) A B C D
@ E F G H I J K 9.3
Insert(7) A B C D E F G H I J K
@ 9.4
Insert(10) A B C D E F G H I
@ J K 9.5
Algoritmer og Datastrukturer (maj 2023) Side 7 af 14
3 8
2 4 6 9
1 7
Ja Nej
1, 5, 7 A B
@ 10.1
1, 3, 7, 8 A
@ B 10.2
1, 2, 4, 7, 8 A B
@ 10.3
1, 7 A
@ B 10.4
1, 3, 6, 7, 9 A B
@ 10.5
17
14 20
2 15 18 23
11 21
Angiv det resulterende rød-sorte træ når man indsætter 9 i ovenstående rød-sorte træ
(dobbeltcirkler angiver røde knuder).
17 17 17 17
14 21 14 20 14 20 14 20
9 15 18 23 9 15 18 23 2 15 18 23 2 15 18 23
2 11 20 2 11 21 11 21 11 21
9 9
A B
@ C D
Algoritmer og Datastrukturer (maj 2023) Side 8 af 14
Opgave 12 (Union-find, 4 %)
Angiv den resulterende union-find struktur efter nedenstående sekvens af operationer, når
der anvendes union-by-rank og stikomprimering.
makeset(a)
makeset(b)
makeset(c)
makeset(d)
makeset(e)
makeset(f )
union(d, f )
union(f , e)
union(c, a)
union(e, c)
union(d, b)
Find-Set(b)
4 2 2 2
b a a a
3 0 0 1 0 0 0 0 1 0 0 0 1
a b c f b c d e f b c d f
0 0 2 1 0 0 0
c d e f d e e
A B C D
@
Opgave 13 (Rekursionsligninger, 4 %)
Angiv løsningen for hver af nedenstående rekursionsligninger, hvor T (n) = 1 for n ≤ 1.
√
Θ(log n) Θ( n) Θ(n) Θ(n log n) Θ(n2 ) Θ(n2 log n) Θ(n3 )
T (n) = T (n/4) + 2 A
@ B C D E F G 13.1
T (n) = 2 · T (n/5) + n3 A B C D E F G
@ 13.2
T (n) = 9 · T (n/3) + n2 A B C D E F
@ G 13.3
T (n) = 4 · T (n/2) + 3 A B C D E
@ F G 13.4
T (n) = T (n − 1) + log n A B C D
@ E F G 13.5
Algoritmer og Datastrukturer (maj 2023) Side 9 af 14
Opgave 14 (BFS, 4 %)
G C E B
I H D
A F
For et bredde først gennemløb (BFS) af ovenstående graf startende i knuden A, angiv
rækkefølgen knuderne bliver indsat i køen Q i BFS-algoritmen. Det antages, at grafen er
givet ved incidenslister, hvor incidenslisterne er sorteret alfabetisk.
A
@ B C D
C F
B E
A D
Angiv for hver af nedenstående mængder af kanter om de udgør et lovligt BFS træ for et
bredde først gennemløb af ovenstående graf startende i knuden A og for en vilkårlig
ordning af grafens incidenslister.
Ja Nej
(A,B) (A,D) (B,C) (B,E) (C,F) @
A B 15.1
Opgave 16 (DFS, 4 %)
B A
F E D
C G
A B C D
@ 16.1
Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.
(E, G) A B C
@ D 16.3
(B, A) A B
@ C D 16.4
(A, B) A
@ B C D 16.5
G
1
5
7
E C
5 7
5 8
2 8
J I A
4 4 1
4 6 2
8 3 3
B D H F
Antag Dijkstras algoritme anvendes til at finde korteste afstande fra knuden A til alle
knuder i ovenstående graf. Angiv hvilken rækkefølge knuderne bliver taget ud af priori-
tetskøen i Dijkstra’s algoritme.
A B C
@ D
Algoritmer og Datastrukturer (maj 2023) Side 11 af 14
H
4
13
-2
F D
-3 14
12 10
11 1
J B C
-1 9 15
6 7 8
5 0 3
A E I G
Antag Kruskals algoritme anvendes til at finde et minimum udspændende træ for
ovenstående graf. Angiv hvilken kant sidst inkluderes i det mininmum udspændende træ.
(D , H) (B , C) (G , I) (B , E) (D , F)
A B C D
@ E
D B
C A
Ja Nej
DCAB A B
@ 19.1
CADB @
A B 19.2
CDBA A B
@ 19.3
CBAD A B
@ 19.4
CDAB @
A B 19.5
Algoritmer og Datastrukturer (maj 2023) Side 12 af 14
Dynamisk programmering
De næste tre opgaver vedrører at løse LCSk problemet ved hjælp af dynamisk program-
mering. Antag at vi har to strenge S[1..s] og T [1..t], hvor vi ønsker at finde længden af en
længst mulig fælles delsekvens X, således at X forekommer som en delsekvens af S[i1 ..i2 ]
og T [j1 ..j2 ], 1 ≤ i1 ≤ i2 ≤ s og 1 ≤ j1 ≤ j2 ≤ t, hvor der højest bliver indsat yderlige k
tegn i S og T tilsammen, dvs. (|S[i1 ..i2 ]| − |X|) + (|T [j1 ..j2 ]| − |X|) ≤ k.
F.eks. for k = 4 er X = common en sådan længste delsekvens i nedenstående S og T (den
fælles delsekvens X er understreget, og de højest k indsatte tegn har en streg over).
S = abccomxymonab
T = cbacomzmuonba
Opgave 20 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
for m = 0 to k
for i = 0 to s A
@ B 20.1
for j = 0 to t
for m = 0 to k
for i = s to 0 step −1 A B
@ 20.2
for j = 0 to t
for m = 0 to k
for i = 0 to s A
@ B 20.3
for j = t to 0 step −1
Algoritmer og Datastrukturer (maj 2023) Side 13 af 14
Opgave 21 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
if i = 0 or j = 0 or m = 0 then
L[i, j, m] = 0
else if S[i] = T [j] then A B
@ 21.1
L[i, j, m] = 1 + L[i − 1, j − 1, m]
else
L[i, j, m] = max(L[i − 1, j, m − 1], L[i, j − 1, m − 1])
if i = 0 or j = 0 then
L[i, j, m] = 0
else if S[i] = T [j] then
L[i, j, m] = 1 + L[i − 1, j − 1, m] A B 21.2
@
else if m = 0 then
L[i, j, m] = 0
else
L[i, j, m] = max(L[i − 1, j, m − 1], L[i, j − 1, m − 1])
if i = 0 or j = 0 then
L[i, j, m] = 0
else if S[i] = T [j] then
L[i, j, m] = 1 + L[i − 1, j − 1, m]
else if m = 0 then A B 21.3
@
L[i, j, m] = 0
else if L[i − 1, j, m − 1] < L[i, j − 1, m − 1] then
L[i, j, m] = L[i, j − 1, m − 1]
else
L[i, j, m] = L[i − 1, j, m − 1]
Opgave 22 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
print L[s, t, k] A B
@ 22.1
x=0
for m = 0 to k
for i = 0 to s A B 22.2
@
for j = 0 to t
x = max(x, L[i, j, m])
print x
x=0
for i = 0 to s
A B 22.3
for j = 0 to t @
x = max(x, L[i, j, k])
print x
Algoritmer og Datastrukturer (maj 2023) Side 14 af 14
Ja Nej
log n A B
@ 23.1
n A B
@ 23.2
n · log n A
@ B 23.3
n2 A B
@ 23.4
Pn 23.5
i=1 log i
A
@ B
Opgave 24 (Invarianter, 4 %)
Givet to ikke-negative heltal x og y, så beregner nedenstående algoritme x · y.
Algoritme Multiplikation(x, y)
Inputbetingelse : Heltal x ≥ 0 og y ≥ 0
Outputkrav : r = x0 · y0
Metode :r←0
i←0
{I} while i < y do
if 0 < i and i + i ≤ y then
r ←r+r
i←i+i
else
r ←r+x
i←i+1
For hvert af følgende udsagn, angiv om det er en invariant I for algoritmen Multiplikation,
hvor x0 og y0 angiver værdierne for henholdsvis x og y i starten.
Ja Nej
0≤i<y A B
@ 24.1
0≤i≤r A B
@ 24.2
r =i·x A
@ B 24.3
r =i·y A B
@ 24.4
r =x·y A B
@ 24.5
Algoritmer og Datastrukturer (Januar 2024) Side 1 af 14
EKSAMEN
Algoritmer og Datastrukturer
Vejledning og pointgivning
Svarene på opgaverne angives på det separate svarark som afleveres.
For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.
For en opgave med vægt v % og med n delspørgsmål, hvor du opnår samlet s point,
beregnes din besvarelse af opgaven som:
s
· v%
n
Bemærk at det er muligt at få negative point for en opgave.
Algoritmer og Datastrukturer (Januar 2024) Side 3 af 14
Ja Nej
√ √ 1.1
n er O( n · log n) A
@ B
n0.01 er O(4) A B
@ 1.3
n! er O(n2 ) A B
@ 1.5
n log n er Θ(n2 ) A B
@ 1.12
loop2 A B
@ C D E F G H 2.2
loop3 A B C D
@ E F G H 2.3
loop4 A B C
@ D E F G H 2.4
Algoritmer og Datastrukturer (Januar 2024) Side 4 af 14
14
11 15
10 F G 29
4 E 27 K
2 6 26 J
A B C D H I
Angiv i hvilke blade A–K i ovenstående ubalancerede binære søgetræ elementerne 30,
12, 5, 23 og 3 skal indsættes (det antages at før hver indsættelse indeholder træet kun
ovenstående ti elementer).
A B C D E F G H I J K
Insert(30) A B C D E F G H I J K
@ 3.1
Insert(12) A B C D E F
@ G H I J K 3.2
Insert(5) A B C
@ D E F G H I J K 3.3
Insert(23) A B C D E F G H
@ I J K 3.4
Insert(3) A B
@ C D E F G H I J K 3.5
Opgave 4 (Heap-Extract-Max, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13
26 25 22 17 12 21 6 16 14 1 8 4 18
25 17 22 16 12 21 6 14 1 8 4 18 A
1 2 3 4 5 6 7 8 9 10 11 12
25 22 18 14 21 17 16 12 1 8 4 6 B
1 2 3 4 5 6 7 8 9 10 11 12 13
25 17 22 16 12 21 6 14 1 8 4 18 C
1 2 3 4 5 6 7 8 9 10 11 12
25 17 22 16 12 21 6 18 14 1 8 4 D
1 2 3 4 5 6 7 8 9 10 11 12
25 18 22 17 12 21 6 16 14 1 8 4 E
@
Algoritmer og Datastrukturer (Januar 2024) Side 5 af 14
Opgave 5 (Build-Max-Heap, 4 %)
1 2 3 4 5 6 7 8 9
3 2 8 7 9 1 6 5 4
8 9 6 7 2 1 3 5 4 A
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 B
1 2 3 4 5 6 7 8 9
9 7 8 5 2 1 6 3 4 C
@
1 2 3 4 5 6 7 8 9
9 8 6 5 7 1 3 2 4 D
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 E
Opgave 6 (Partition, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
22 8 17 6 30 23 1 28 12 7 25 5 4 20 3
22 8 17 1 5 23 6 28 12 7 25 30 4 20 3 A
@
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 3 4 5 6 7 8 12 17 20 22 23 25 28 30 B
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
22 8 17 1 5 6 7 12 23 25 28 30 4 20 3 C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
22 8 17 1 5 6 30 23 28 12 7 25 4 20 3 D
Opgave 7 (Randomized-Quicksort, 4 %)
Angiv antal gange Randomized-Quicksort kalder Partition på et input af størrelse n.
0 1 2 3 4 5 6 7 8 9 10
22 15 13 2 18
0 1 2 3 4 5 6 7 8 9 10
Insert(0) A B C
@ D E F G H I J K 8.1
Insert(4) A B C
@ D E F G H I J K 8.2
Insert(6) A B C D E F G H I
@ J K 8.3
Insert(7) A B C
@ D E F G H I J K 8.4
Insert(8) A B C
@ D E F G H I J K 8.5
0 1 2 3 4 5 6 7 8 9 10
11 18 3 19 14
0 1 2 3 4 5 6 7 8 9 10
Insert(0) A B
@ C D E F G H I J K 9.1
Insert(1) A B C D E F
@ G H I J K 9.2
Insert(2) A B C D E F G
@ H I J K 9.3
Insert(7) A B C D E F G
@ H I J K 9.4
Insert(8) A B
@ C D E F G H I J K 9.5
Algoritmer og Datastrukturer (Januar 2024) Side 7 af 14
2 8
1 3 6 9
5 7
Ja Nej
5, 7 A
@ B 10.1
4, 5, 7 A B
@ 10.2
2, 5, 7, 8 A
@ B 10.3
1, 3, 5, 7, 8 @
A B 10.4
2, 5, 6, 7, 9 A B
@ 10.5
16
5 24
2 13 20 27
10 15
Angiv det resulterende rød-sorte træ når man indsætter 26 i ovenstående rød-sorte træ
(dobbeltcirkler angiver røde knuder).
16 16 16 16
5 24 5 24 5 24 5 24
2 13 20 27 2 13 20 27 2 13 20 27 2 13 20 27
10 15 26 10 15 26 10 15 26 10 15 26
A B
@ C D
Algoritmer og Datastrukturer (Januar 2024) Side 8 af 14
Opgave 12 (Union-find, 4 %)
Angiv den resulterende union-find struktur efter nedenstående sekvens af operationer, når
der anvendes union-by-rank og stikomprimering.
makeset(a)
makeset(b)
makeset(c)
makeset(d)
makeset(e)
makeset(f )
union(c, b)
union(c, d)
union(f , a)
union(d, f )
union(e, c)
Find-Set(d)
2 2 3 2
a a a a
1 0 0 0 1 0 0 1 0 2 0 0 1 0 0 0 0
b c e f b e f b c d e f b c d e f
0 0 0
d c d
A B C D
@
Opgave 13 (Rekursionsligninger, 4 %)
Angiv løsningen for hver af nedenstående rekursionsligninger, hvor T (n) = 1 for n ≤ 1.
√
Θ(log n) Θ( n) Θ(n) Θ(n log n) Θ(n2 ) Θ(n2 log n) Θ(n3 )
T (n) = T (n − 1) + n A B C D E
@ F G 13.1
T (n) = 2 · T (n/3) + n A B C
@ D E F G 13.2
T (n) = 2 · T (n/2) + n A B C D
@ E F G 13.3
T (n) = 4 · T (n/2) + n2 A B C D E F
@ G 13.4
T (n) = 3 · T (n/5) + n A B C
@ D E F G 13.5
Algoritmer og Datastrukturer (Januar 2024) Side 9 af 14
Opgave 14 (BFS, 4 %)
B H
E C A I D
F G
For et bredde først gennemløb (BFS) af ovenstående graf startende i knuden A, angiv
rækkefølgen knuderne bliver udtaget af køen Q i BFS-algoritmen. Det antages, at grafen
er givet ved incidenslister, hvor incidenslisterne er sorteret alfabetisk.
A B C D
@
Opgave 15 (DFS, 4 %)
D I A E
F B G
H C
A
@ B C D 15.1
Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.
(B, H) A B C D
@ 15.3
(G, B) A B C
@ D 15.4
(I, D) A
@ B C D 15.5
Algoritmer og Datastrukturer (Januar 2024) Side 10 af 14
6 8
F B D
5 6 7 2
7 1
E A C
Antag Dijkstras algoritme anvendes til at finde korteste afstande fra knuden A til alle
knuder i ovenstående graf. Angiv hvilken rækkefølge knuderne bliver taget ud af priori-
tetskøen i Dijkstras algoritme.
A B C
@ D
D
1
5
3
F B
6 -2
-3 7
9 2
E C A
Antag Kruskals algoritme anvendes til at finde et minimum udspændende træ for
ovenstående graf. Angiv hvilken kant sidst inkluderes i det mininmum udspændende træ.
(E , F) (A , C) (B , D) (C , E) (B , F)
A B C D E
@
D C
B A
Ja Nej
CDAB A B
@ 19.1
BADC @
A B 19.2
ADBC A B
@ 19.3
BDAC @
A B 19.4
DABC A B
@ 19.5
Opgave 20 (Invarianter, 4 %)
√
Givet et ikke-negative heltal n, så beregner nedenstående algoritme ⌊ n⌋.
Algoritme HeltalsKvadratrod(n)
Inputbetingelse : Heltal n ≥ 0
√
Outputkrav : low = ⌊ n⌋
Metode : low ← 0
high ← n + 1
{I} while low + 1 < high do
m ← ⌊(low + high)/2⌋
if m ∗ m ≤ n then
low ← m
else
high ← m
For hvert af følgende udsagn, angiv om det er en invariant I for algoritmen Heltals-
Kvadratrod.
Ja Nej
0 ≤ low < n A B
@ 20.1
low ≤ high A
@ B 20.2
low 2 < n A B
@ 20.4
n < high 2 A
@ B 20.5
Algoritmer og Datastrukturer (Januar 2024) Side 12 af 14
Dynamisk programmering
Antag vi har m heltallige møntværdier c1 < c2 < · · · < cm , hvor c1 = 1. Givet et heltal n,
ønsker vi at finde et heltal k, hvor 0 ≤ k ≤ n, som vil kræve flest mønter at opnå. En
møntværdi må bruges et vilkårligt antal gange. For mønterne c1 = 1, c2 = 2, c3 = 5, c4 =
10, c5 = 20 og n = 50, vil k = 39 kræve 5 mønter (39 = 2 + 2 + 5 + 10 + 20). Alle andre
værdier fra 0 til 50 kan også opnås med højst 5 mønter.
Vi lader Ti betegne det færreste antal mønter, der skal til for at opnå værdien i, hvor i er
et ikke negativt heltal, som kan bestemmes ved følgende rekursionsformel:
0
hvis i = 0
Ti =
min{1 + Ti−c | 1 ≤ j ≤ m ∧ cj ≤ i} hvis i > 0
j
Opgave 21 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
for i = 0 to n A
@ B 21.1
for i = n to 0 step −1 A B
@ 21.2
for i = 1 to m A B
@ 21.3
Algoritmer og Datastrukturer (Januar 2024) Side 13 af 14
Opgave 22 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
T [i] = 0
if i > 0 then 22.1
A B
@
for j = 1 to m
if cj ≤ i then
T [i] = min(T [i], 1 + T [i − cj ])
if i = 0 then
T [i] = 0 22.2
A
@ B
else
T [i] = +∞
for j = 1 to m
if cj ≤ i then
T [i] = min(T [i], 1 + T [i − cj ])
if i = 0 then
T [i] = 0
else A B 22.3
@
T [i] = +∞
j=1
while j ≤ m ∧ cj ≤ i do
T [i] = min(T [i], 1 + T [i − cj ])
j =j+1
Opgave 23 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja Nej
print T [n] A B
@ 23.1
for k = 1 to n
if T [k] = m do A B
@ 23.2
print k
k=0
for i = 1 to n
if T [i] > T [k] do A
@ B 23.3
k=i
print k
Algoritmer og Datastrukturer (Januar 2024) Side 14 af 14
Ja Nej
(k + n) log n A B
@ 24.1
n log n A
@ B 24.2
2n log n A
@ B 24.3
n log k A B
@ 24.4
k log n A B
@ 24.5
EKSAMEN
Algoritmer og Datastrukturer
Studienummer :
Navn :
Algoritmer og Datastrukturer (eksamen januar 2020) Side 2 af 16
Vejledning og pointgivning
For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.
For en opgave med vægt v % og med n delspørgsmål, hvor du opnår samlet s point,
beregnes din besvarelse af opgaven som:
s
· v%
n
Bemærk at det er muligt at få negative point for en opgave.
Algoritmer og Datastrukturer (eksamen januar 2020) Side 3 af 16
Ja Nej
log(n!) er O(log n2 ) A B
@
n2/3 + n3 er O(n2 ) A B
@
55 + n · log n er O(n2/3 ) A B
@
n0.001 er O(1) A B
@
3n er O(23 log n ) A B
@
n2 er Θ(22 log n ) A
@ B
44 er Ω((log n)6 ) A B
@
n!/4 er Ω(n3 ) A
@ B
√ √
Θ( n) Θ(n) Θ(n n) Θ(n3 ) Θ(n log n) Θ(log n) Θ(n2 ) Θ(log log n)
loop1 A B C D E F G
@ H
loop2 A B
@ C D E F G H
loop3 A B C D
@ E F G H
loop4 A B
@ C D E F G H
Algoritmer og Datastrukturer (eksamen januar 2020) Side 4 af 16
11
3 22
2 7 12 27
A B 4 E F G H 30
C D 28 K
I J
Angiv i hvilke blade A–K i ovenstående ubalancerede binære søgetræ elementerne 23,
13, 31, 14 og 6 skal indsættes (det antages at før hver indsættelse indeholder træet kun
ovenstående ti elementer).
A B C D E F G H I J K
Insert(23) A B C D E F G H
@ I J K
Insert(13) A B C D E F G
@ H I J K
Insert(31) A B C D E F G H I J K
@
Insert(14) A B C D E F G
@ H I J K
Insert(6) A B C D
@ E F G H I J K
Opgave 4 (Max-Heap-Insert, 4 %)
1 2 3 4 5 6 7
11 8 7 4 5 3 6 A
1 2 3 4 5 6 7
3 5 6 4 8 7 11 B
1 2 3 4 5 6 7
11 6 8 3 4 5 7 C
@
1 2 3 4 5 6 7
11 8 7 6 5 4 3 D
1 2 3 4 5 6 7
6 8 11 4 5 7 3 E
Algoritmer og Datastrukturer (eksamen januar 2020) Side 5 af 16
Opgave 5 (Build-Max-Heap, 4 %)
1 2 3 4 5 6 7 8 9
7 3 1 9 5 2 8 6 4
1 2 3 4 5 6 7 8 9
9 8 7 6 5 4 3 2 1 A
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 B
1 2 3 4 5 6 7 8 9
9 7 8 6 5 1 2 3 4 C
1 2 3 4 5 6 7 8 9
9 7 8 6 5 2 1 3 4 D
@
1 2 3 4 5 6 7 8 9
7 9 8 6 5 2 1 3 4 E
Opgave 6 (Heap-Extract-Max, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13
26 25 24 14 13 21 22 9 2 6 10 20 18
1 2 3 4 5 6 7 8 9 10 11 12
25 14 24 9 13 21 22 18 2 6 10 20 A
1 2 3 4 5 6 7 8 9 10 11 12
25 18 24 14 13 21 22 9 2 6 10 20 B
@
1 2 3 4 5 6 7 8 9 10 11 12
25 14 24 9 13 21 22 2 6 10 20 18 C
1 2 3 4 5 6 7 8 9 10 11 12 13
25 14 24 9 13 21 22 2 6 10 20 18 D
1 2 3 4 5 6 7 8 9 10 11 12
25 24 22 13 21 18 9 2 6 10 20 14 E
Algoritmer og Datastrukturer (eksamen januar 2020) Side 6 af 16
Opgave 7 (Partition, 4 %)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 5 3 19 29 23 16 6 12 25 9 13 14 20 24
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 3 5 6 9 12 13 14 16 19 20 23 24 25 29 A
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 5 3 19 16 6 12 9 13 14 20 29 25 23 24 B
@
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 5 3 19 16 6 12 9 13 14 20 29 23 25 24 C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
2 5 3 6 9 12 13 14 16 19 20 23 25 29 24 D
Opgave 8 (Radix-sort, 4 %)
Betragt Radix-Sort anvendt på ovenstående liste af tal (d = 4, k = 5). Angiv den delvist
sortede liste efter at Radix-Sort har sorteret tallene efter de to mindst betydende cifre.
0 1 2 3 4 5 6 7 8 9 10
11 17 6 10 21
0 1 2 3 4 5 6 7 8 9 10
Insert(0) A B
@ C D E F G H I J K
Insert(3) A B
@ C D E F G H I J K
Insert(7) A B
@ C D E F G H I J K
Insert(8) A B C
@ D E F G H I J K
Insert(9) A B C D E F
@ G H I J K
0 1 2 3 4 5 6 7 8 9 10
4 12 19 15 8
0 1 2 3 4 5 6 7 8 9 10
Insert(0) A
@ B C D E F G H I J K
Insert(5) A B C D E F G H I J K
@
Insert(6) A
@ B C D E F G H I J K
Insert(7) A B C D
@ E F G H I J K
Insert(10) A B C D E F G
@ H I J K
Algoritmer og Datastrukturer (eksamen januar 2020) Side 8 af 16
5 Ja Nej
2 7 1, 3, 4, 7, 8 A B
@
1 3 6 9 4, 5, 8 A B
@
4 8 2, 4, 7, 8 A
@ B
4, 8 A
@ B
2, 4, 6, 8, 9 A B
@
22
8 25
5 15 26
6 13 17
Angiv det resulterende rød-sorte træ når man indsætter 18 i ovenstående rød-sorte træ
(dobbeltcirkler angiver røde knuder).
A
@ B C D
15 22 17 22
8 22 8 25 6 22 8 25
5 13 17 25 5 15 26 5 13 18 25 5 15 26
6 18 26 6 13 17 8 15 26 6 13 17
18 18
Algoritmer og Datastrukturer (eksamen januar 2020) Side 9 af 16
Opgave 13 (Union-find, 4 %)
Angiv den resulterende union-find struktur efter nedenstående sekvens af operationer, når
der anvendes union-by-rank og stikomprimering.
makeset(a)
makeset(b)
makeset(c)
makeset(d)
makeset(e)
makeset(f )
union(f , d)
union(a, d)
union(b, e)
union(a, e)
union(f , c)
Find-Set(b)
A
@ B C D
2 2 2 3
e e e c
0 0 1 0 0 0 1 0 0 0 1 0 0 2
b c d f b c d a b c d f b e
0 0 0 1 0
a a f d f
0
a
Opgave 14 (Rekursionsligninger, 4 %)
√
Θ(log n) Θ( n) Θ(n) Θ(n log n) Θ(n2 ) Θ(n2 log n) Θ(n3 )
T (n) = 3 · T (n/9) + 1 A B
@ C D E F G
T (n) = T (n − 1) + n A B C D E
@ F G
T (n) = 2 · T (n/4) + 1 A B
@ C D E F G
T (n) = 3 · T (n/4) + n A B C
@ D E F G
T (n) = 4 · T (n/2) + n2 A B C D E F
@ G
Algoritmer og Datastrukturer (eksamen januar 2020) Side 10 af 16
Opgave 15 (BFS, 4 %)
A G
E D C
H F
For et bredde først gennemløb (BFS) af ovenstående graf startende i knuden A, angiv
rækkefølgen knuderne bliver udtaget af køen Q i BFS-algoritmen. Det antages, at grafen
er givet ved incidenslister, hvor incidenslisterne er sorteret alfabetisk.
A
@ B C D
C D E
A F B
Angiv for hver af nedenstående mængder af kanter om de udgør et lovligt BFS træ for et
bredde først gennemløb af ovenstående graf startende i knuden A og for en vilkårlig
ordning af grafens incidenslister.
Ja Nej
Opgave 17 (DFS, 4 %)
E I C
D H J A
B F G
A
@ B C D
Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.
(B, D) A
@ B C D
(J, H) A
@ B C D
(I, J) A B
@ C D
(H, B) A B C
@ D
7 4
A H B
1 4
1 1
1
E D
7 2
4 4
8 2
G C F
Antag Dijkstras algoritme anvendes til at finde korteste afstande fra knuden A til alle
knuder i ovenstående graf. Angiv hvilken rækkefølge knuderne bliver taget ud af priori-
tetskøen i Dijkstra’s algoritme.
A B C
@ D
-1 8
A I D
4 13 0
10 12
E G B
9 8 10
-1 10
F H C
Antag Prims algoritme anvendes til at finde et minimum udspændende træ for ovenstående
graf, og algoritmen starter i knuden A. Angiv hvilken rækkefølge knuderne bliver inklu-
deret i det minimum udspændende træ (taget ud af prioritetskøen i Prims algoritme).
A B C
@ D
D A
C B
Ja Nej
CBAD A B
@
BDAC A
@ B
DBAC A
@ B
BCAD A B
@
DBCA A
@ B
Algoritmer og Datastrukturer (eksamen januar 2020) Side 13 af 16
G A F C
B H D E
A B C D
@ E F G H
1 2 3 4 5 6 7 8
Dynamisk programmering
Den samlede sværhedsgrad af det optimale (sværeste) eksamenssæt er altså V (m, t). Hvis
V (m, t) = −∞ betyder det, at det ikke er muligt, at lave et eksamenssæt med præcist t
point.
De følgende 3 opgaver består i at udfylde 3 blokke i følgende algoritmeskabelon.
Algoritme SværtEksamenssæt(P, S, t)
m = |P |
Opret tom tabel T [0..m][0..t]
for . . .
<< Opgave 22: iterer over T >>
for . . .
Opgave 22 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja A
@ Ja A
@ Ja A
@
Opgave 23 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
if k = 0 then
if v = 0 then
T [k][v] = 0
Ja A
@
else
Nej B T [k][v] = −∞
else if pk > v or T [k − 1][v − pk ] = −∞ then
T [k][v] = T [k − 1][v]
else
T [k][v] = max{T [k − 1][v], T [k − 1][v − pk ] + sk }
Ja A
if k > 0 and pk ≤ v and T [k − 1][v − pk ] > −∞ then
@
if k > 0 then
Ja A T [k][v] = T [k − 1][v]
if k > 0 and pk ≤ v and T [k − 1][v − pk ] > −∞ then
Nej @
B
T [k][v] = max{T [k][v], T [k − 1][v − pk ] + sk }
else if k = 0 and v > 0 then
T [k][v] = −∞
else
T [k][v] = 0
Algoritmer og Datastrukturer (eksamen januar 2020) Side 16 af 16
Opgave 24 (4 %)
For hver af nedenstående stykker kode, angiv om det vil kunne føre til en korrekt løsning.
Ja A
for k = m to 1 step −1
Nej @
B if pk ≤ t and T [k − 1][t − pk ] + sk = T [k][t] then
print Exercise k
Ja A
for k = 1 to m
Nej @
B if T [k][t] > −∞ then
print Exercise k
v=t
Ja A
@ for k = m to 1 step −1
if pk ≤ v and T [k − 1][v − pk ] = T [k][v] − sk then
Nej B
print Exercise k
v = v − pk