You are on page 1of 128

EKSAMEN

Algoritmer og Datastrukturer

Fredag den 29. maj 2020, kl. 9.00–11.00

Institut for Datalogi, Naturvidenskabelige Fakultet, Aarhus Universitet

Tilladte hjælpemidler: Alle

Kommunikation med andre om eksamensopgaverne er ikke tilladt under eksamen

Studienummer :

Navn :

I nødstilfælde ring 50 59 54 32 (Gerth Stølting Brodal)


Algoritmer og Datastrukturer (eksamen maj 2020) Side 2 af 15

Vejledning og pointgivning

Dette eksamenssæt består af en mængde multiple-choice-opgaver.

Opgaverne besvares på opgaveformuleringen som afleveres.

For hver opgave er angivet opgavens andel af det samlede eksamenssæt.

Hvert delspørgsmål har præcist ét rigtigt svar.

For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.

Et delspørgsmål bedømmes som følgende:

• Hvis du sætter kryds ved det rigtige svar, får du 1 point.

• Hvis du ikke sætter nogen krydser, får du 0 point.


1
• Hvis du sætter kryds ved et forkert svar, får du − k−1 point, hvor k er antal svarmuligheder.

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

Opgave 1 (Asymptotisk notation, 6 %)

I det følgende angiver log n 2-tals-logaritmen af n.


Ja Nej

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

n0.1 /7 + n3/2 er O(n2/3 ) A B


@

(log n)2 + 23 log n er Ω(n!) A B


@

n er Θ(2n ) A B
@

log(n!) er Ω(n2 ) A B
@

Opgave 2 (Analyse af løkker, 6 %)

Algoritme loop1(n) Algoritme loop2(n)


s=1 s=1
for i = 1 to n for i = 1 to n
for j = 1 to n + 1 − i for j = i to 2 ∗ i
s=s+1 s=s+1

Algoritme loop3(n) Algoritme loop4(n)


i=0 i=1
j=0 while i ≤ n ∗ n
while i < n j=1
if j < n k=1
j =j+1 while k ≤ i
else k =k+j
j=0 j =j+1
i=i+1 i=2∗i
Angiv for hver af ovenstående algoritmer udførselstiden som funktion af n i Θ-notation.
√ √
Θ(n log n) Θ(n) Θ( n) Θ(log n) Θ(n2 ) Θ( n log n) Θ(n3 ) Θ((log n)2 )

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

Opgave 3 (Indsættelser i søgetræer, 4 %)

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

Hvad er resultat af Build-Max-Heap på ovenstående array ?

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

Hvad er resultat af Heap-Extract-Max på ovenstående max-heap ?

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

Angiv resultatet af at anvende Partition(A, 2, 13) på ovenstående array A.

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

Opgave 8 (Lineær probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10
11 0 12 9 16

I ovenstående hashtabel af størrelse 11 er anvendt linear probing med hashfunktionen h(k) =


2k mod 11.
Angiv positionerne de fem elementer 1, 5, 6, 8 og 10 vil blive indsat på i hashtabellen (for hver
af indsættelserne antager vi at hashtabellen kun indeholder elementerne 0, 9, 11, 12 og 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

Opgave 9 (Dobbelt hashing, 4 %)

0 1 2 3 4 5 6 7 8 9 10
11 0 19 17 20

I ovenstående hashtabel af størrelse 11 er anvendt dobbelt hashing med hashfunktionerne h1 (k) =


2k mod 11 og h2 (k) = 1 + (2k mod 10).
Angiv positionerne de fem elementer 2, 3, 5, 6 og 9 vil blive indsat på i hashtabellen (for hver
af indsættelserne antager vi at hashtabellen kun indeholder elementerne 0, 11, 17, 19 og 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 %)

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) = 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
@

Opgave 11 (Rød-sort træ, 4 %)


For hver af nedenstående delmængder, angiv om nedenstående binære træ er et lovligt rød-sort
træ hvis netop disse knuder farves røde.

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

Opgave 12 (Indsættelse i rød-sort træer, 4 %)

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

AHKFGICDBJLE AHFIBCKGLDJE AHKFGICBDLJE AKHGFCIBDLJE

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

GDCFHIEBA FGHDICEBA GHDICEFBA FHIGDCEBA

Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.

Tree edge Back edge Cross edge Forward edge

(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

Opgave 16 (Dijkstras algoritme, 4 %)

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

ACDBFE ACDBEF ACBFDE ACDEBF

Opgave 17 (Prims algoritme, 4 %)

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

ABFECHIGJD ABFECHIGDJ ABFECIHGJD ABFCIGJDHE


Algoritmer og Datastrukturer (eksamen maj 2020) Side 11 af 15

Opgave 18 (Topologisk sortering, 4 %)

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

Opgave 19 (Stærke sammenhængskomponenter, 4 %)

F G A B

E I J K

L D C H

Hvad er antallet af stærke sammenhængskomponenter i ovenstående graf?

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 %)

Givet to ikke-negative heltal n og m, så beregner nedenstående algoritme n · m.

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

For hvert af nedenstående udsagn, angiv om de er en invariant I for algoritmen Multiplikation,


hvor n0 og m0 angiver værdierne for henholdsvis n og m i starten.

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

De følgende 4 opgaver består i at udfylde 4 blokke i følgende algoritmeskabelon.

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 22: beregn T [i, j] = S(i, j) >>

<< Opgave 23: udskriv LCS2 scoren af A og B >>

<< 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

for i = 0 to n for i = n to 0 step −1 for i = n to 0 step −1


for j = 0 to m for j = 0 to m for j = m to 0 step −1
Algoritmer og Datastrukturer (eksamen maj 2020) Side 14 af 15

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

print T [0, 0] print T [n − 1, m − 1] print T [n, m]


Algoritmer og Datastrukturer (eksamen maj 2020) Side 15 af 15

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

Fredag 22. januar 2021, 9:00–11:00

Institut for Datalogi, Naturvidenskabelige Fakultet, Aarhus Universitet

Antal sider i opgavesættet (incl. forsiden): 14

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

Dette eksamenssæt består af en mængde multiple-choice-opgaver.

Opgaverne besvares på opgaveformuleringen som afleveres.

For hver opgave er angivet opgavens andel af det samlede eksamenssæt.

Hvert delspørgsmål har præcist et rigtigt svar.

For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.

Et delspørgsmål bedømmes som følgende:

ˆ Hvis du sætter kryds ved det rigtige svar, får du 1 point.

ˆ Hvis du ikke sætter nogen krydser, får du 0 point.


1
ˆ Hvis du sætter kryds ved et forkert svar, får du − point, hvor k er antal svar-
k−1
muligheder.

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

Opgave 1 (Asymptotisk notation, 6 %)


I det følgende angiver log n 2-tals-logaritmen af n.

Ja Nej
3n3/2 + log n er O(n2/3 ) A B
@

2(log n)4 er O(n2 ) A


@ B

n · log n er O(n) A
@ B

6n3/2 er O(8log n ) A
@ B

4 log(n6 ) er O((log n)2 ) 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
@

Opgave 2 (Analyse af løkker, 6 %)

Algoritme loop1(n) Algoritme loop2(n)


s=1 i=0
for i = 1 to n j=n
for j = 1 to i while i < j
for k = j to i i=i+2
s=s+1 j =j+1

Algoritme loop3(n) Algoritme loop4(n)


i=1 i=n
j=n j=0
while i < j while i > 0
i=2∗i if j < i
j =j+n j =j+1
else
j=0
i=i−1

Angiv for hver af ovenstående algoritmer udførselstiden som funktion af n i Θ-notation.



Θ(n3 ) Θ(n log n) Θ( n) Θ(n) Θ((log n)2 ) Θ(n2 ) Θ(2n ) Θ(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 (januar 2021) Side 4 af 14

Opgave 3 (Indsættelser i søgetræer, 4 %)

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

Hvad er resultat af Build-Max-Heap på ovenstående array ?


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

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

Hvad er resultat af Heap-Extract-Max på ovenstående max-heap ?


1 2 3 4 5 6 7 8 9 10 11 12 13

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

Opgave 6 (Lineær probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

15 9 13 2 18

I ovenstående hashtabel af størrelse 11 er anvendt linear probing med hashfunktionen


h(k) = 3k mod 11.
Angiv positionerne de fem elementer 4, 5, 6, 7 og 11 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 2, 9, 13, 15
og 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?

Θ(1) Θ(log n) Θ(n) Θ(n log n) Θ(n2 )

A
@ B C D E
Algoritmer og Datastrukturer (januar 2021) Side 6 af 14

Opgave 8 (Rød-sort træ, 4 %)


For hver af nedenstående delmængder, angiv om nedenstående binære træ er et lovligt
rød-sort træ hvis netop disse knuder farves røde.

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
@

Opgave 9 (Indsættelse i rød-sort træer, 4 %)

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.

ACDBHJIGFE ACDBHJGIFE ACBFDGIHEJ ACDJHBIGFE

A B
@ C D

Opgave 14 (DFS, 4 %)

A I G E

J H C

F B

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.

DFBECHGJIA EHJFDBCGIA EGFDBCIHJA HJFDBCEGIA

A B C D
@
Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.

Tree edge Back edge Cross edge Forward edge


(E, C) A B C
@ D

(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

Opgave 15 (Dijkstras algoritme, 4 %)

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.

ACFBED AFEBCD AFECBD ACFBDE

A B C
@ D

Opgave 16 (Prims algoritme, 4 %)

-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).

AFGJDICBEH AFGJDICHBE AFGJBECDIH AFGJDIBECH

A
@ B C D
Algoritmer og Datastrukturer (januar 2021) Side 10 af 14

Opgave 17 (Topologisk sortering, 4 %)

C A

D B

Angiv for hver af nedenstående ordninger af knuderne i ovenstående graf om det er en


lovlig topologisk sortering.

Ja Nej
DABC A B
@

BDAC @
A B

ABDC A B
@

CADB A B
@

BADC @
A B

Opgave 18 (Amortiseret analyse, 4 %)


En binær max-heap understøtter Max-Heap-Insert og Heap-Extract-Max i worst-
case tid O(log n), hvor n er antal elementer i heapen. Vi vil nu understøtte operationen
Delete, der givet en pointer til et element i heapen, sletter elementet fra heapen. Vi
implementerer Delete ved blot at markere elementet som slettet i worst-case O(1) tid.
Når vi udfører Heap-Extract-Max gentager vi denne indtil det første ikke-markerede
element bliver returneret. Dvs. hvis Heap-Extract-Max sletter D markerede elementer
bliver worst-case tiden O((D+1) log N ), hvor N er antallet af markerede og ikke-markerede
elementer i heapen.
Angiv for hver af nedenstående funktioner om de er en potentialefunktion, hvormed man
kan argumentere for at operationerne Max-Heap-Insert, Delete, og Heap-Extract-
Max tager amortiseret O(log N ) tid, hvor M betegner antallet af markerede elementer i
heapen.

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

For hvert af følgende udsagn, angiv om de er en invariant I for algoritmen Power3.

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
@

Opgave 20 (Udvidede søgetræer, 4 %)


Betragt et søgetræ hvor hver knude v gemmer et tal v.x, og knuderne er ordnet venstre-
mod-højre efter stigende v.x. Derudover gemmes i en knude v tre værdier v.min, v.max ,
og v.closest. Værdierne v.min og v.max er henholdsvis det mindst og største tal i v’s un-
dertræ, og v.closest den mindste difference mellem to tal i v’s undertræ. Hvis v’s undertræ
kun indeholder et tal er v.closest = +∞.

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).

v.closest = min(v.l.closest, v.r.x − v.l.x, v.r.closest) A

v.closest = min(v.l.closest, v.x − v.l.min, v.r.max − v.x, v.r.closest) B

v.closest = min(v.l.closest, v.x − v.l.max , v.r.min − v.x, v.r.closest) @


C

v.closest = min(v.l.closest, v.r.min − v.l.max , v.r.closest) D

v.closest = v.r.closest − v.l.closest E


Algoritmer og Datastrukturer (januar 2021) Side 12 af 14

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

skrives som en konkatenation af strenge fra

S1 = A B B S2 = A C A A S3 = B B S4 = A B A S5 = D

For 1 ≤ j ≤ n + 1 lader vi C(j) angive om T [j .. n] kan skrives som en konkatenation af


strenge fra S1 , . . . , Sk .
C(j) kan bestemmes ved følgende rekursionsformel.



 sand hvis j = n + 1



 sand hvis j ≤ n og der findes i hvor

C(j) =



 j + |Si | − 1 ≤ n ∧ C(j + |Si |) ∧ Si = T [j .. j + |Si | − 1]



 falsk ellers

De følgende 4 opgaver består i at udfylde 4 blokke i følgende algoritmeskabelon.

Algoritme Concatenation(T, {S1 , . . . , Sk })


n = |T |
Opret tom tabel D[1 .. n + 1]
for . . .
<< Opgave 21: iterer over D >>

<< Opgave 22: beregn D[j] = C(j) >>

<< 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

Torsdag 27. maj 2021, 9:00–11:00

Institut for Datalogi, Naturvidenskabelige Fakultet, Aarhus Universitet

Antal sider i opgavesættet (incl. forsiden): 14

Tilladte medbragte hjælpemidler:


Alle, inklusive internet.
Det er ikke tilladt at kommunikere med andre under eksamen.

Studienummer :

Navn :
Algoritmer og Datastrukturer (maj 2021) Side 2 af 14

Vejledning og pointgivning

Dette eksamenssæt består af en mængde multiple-choice-opgaver.

Opgaverne besvares på opgaveformuleringen som afleveres.

For hver opgave er angivet opgavens andel af det samlede eksamenssæt.

Hvert delspørgsmål har præcist et rigtigt svar.

For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.

Et delspørgsmål bedømmes som følgende:

• Hvis du sætter kryds ved det rigtige svar, får du 1 point.

• Hvis du ikke sætter nogen krydser, får du 0 point.


1
• Hvis du sætter kryds ved et forkert svar, får du − point, hvor k er antal svar-
k−1
muligheder.

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

Opgave 1 (Asymptotisk notation, 6 %)


I det følgende angiver log n 2-tals-logaritmen af n.

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
@

1 + log(n2 ) er O((log n)2 ) A


@ B

log n + log(n!) er O(n2 ) 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
@

7 log n + log(n!) er Θ(n · log n) @


A B

2log n er Ω(n0.01 ) A
@ B

(log n)3 + 3n er Ω(2n ) A


@ B

Opgave 2 (Analyse af løkker, 6 %)

Algoritme loop1(n) Algoritme loop2(n)


s=1 i=n
for i = 1 to n ∗ n while i ≤ n ∗ n
for j = 1 to n i=2∗i
s=s+1

Algoritme loop3(n) Algoritme loop4(n)


i=1 i=1
j =n∗n while i ≤ n
while i ≤ j j=i
i=2∗i while j > 0
j =j−1 j = bj/2c
i=i+i

Angiv for hver af ovenstående algoritmer udførselstiden som funktion af n i Θ-notation.


√ √
Θ( n) Θ(n3 ) Θ(n) Θ( 3 n) Θ(n2 ) Θ(log n) Θ((log n)2 ) Θ(n 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 (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

Hvad er resultat af Heap-Extract-Max på ovenstående max-heap ?


1 2 3 4 5 6 7 8 9 10 11 12 13

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 ?

Θ(n) Θ(n log n) Θ(n2 )


InsertionSort A
@ B C

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

Angiv resultatet af at anvende Partition(A, 4, 13) på ovenstående array A.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

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
@

Opgave 7 (Indsættelser i søgetræer, 4 %)

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

Opgave 8 (Rød-sort træ, 4 %)


For hver af nedenstående delmængder, angiv om nedenstående binære træ er et lovligt
rød-sort træ hvis netop disse knuder farves røde.

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

Opgave 9 (Indsættelse i rød-sort træer, 4 %)

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

Opgave 10 (Lineær probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

0 18 19 8 16

I ovenstående hashtabel af størrelse 11 er anvendt linear probing med hashfunktionen


h(k) = 2k mod 11.
Angiv positionerne de fem elementer 2, 3, 5, 7 og 11 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 0, 8, 16, 18
og 19).

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.

AGCHDIJEBF AGCJHDEIFB AGJCHDEIFB AGCJHDEIBF

A B C D
@

Opgave 13 (DFS, 4 %)

E D H

A G F

I B 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 discovery time.

AGBCFHDEI ADEGBCFHI ADGEBHICF ADGIHBCFE

A B
@ C D

Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.

Tree edge Back edge Cross edge Forward edge


(H, D) A B
@ C D

(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

Opgave 14 (Dijkstras algoritme, 4 %)

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.

ABCDGFE ABCDFEG ABGCDEF ABCFEDG

A
@ B C D

Opgave 15 (Prims algoritme, 4 %)

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).

ACDBGEFH ACDEFBGH ACDBGHFE ACDEFGBH

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

Opgave 17 (Topologisk sortering, 4 %)

B A

C D

Angiv for hver af nedenstående ordninger af knuderne i ovenstående graf om det er en


lovlig topologisk sortering.

Ja Nej
DCBA @
A B

BCDA A B
@

ACBD A B
@

DCAB A B
@

CDBA A B
@

Opgave 18 (Amortiseret analyse)


En binær max-heap understøtter Insert og Heap-Extract-Max på en heap med n
elementer i worst-case O(log n) tid. Bemærk den samme værdi kan være indsat flere gange
i en max-heap. Vi ønsker nu at ændre Heap-Extract-Max, således at den fjerner alle
forekomster af maximum værdien fra heapen, d.v.s. den oprindelige Heap-Extract-Max
operation gentages indtil roden indeholder en mindre værdi eller at heapen er tom. Hvis
maximum forekommer m gange i heapen, så vil Heap-Extract-Max operationen tage
worst-case O(m log n) tid.
Angiv for hver af nedenstående funktioner om de er en potentialefunktion, hvormed man
kan argumentere for at operationerne Insert og Heap-Extract-Max tager amortiseret
O(log n) tid. Antal elementer i heapen betegnes n og antallet af forskellige elementer i
heapen N , hvor N ≤ n.

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
@

Opgave 20 (Udvidede søgetræer, 4 %)


For en sorteret liste af tal x1 ≤ x2 ≤ · · · ≤ xn definerer vi sum of square gaps (ssg)
som i=2..n (xi − xi−1 )2 . Betragt et rød-sort træ hvor hver knude v gemmer et heltal v.x,
P

og knuderne er ordnet venstre-mod-højre efter stigende v.x. Desuden gemmer v værdi-


erne v.min, v.max og v.ssg, som er hhv. det mindste, største og sum of square gaps af
elementerne i undertræet rodet i v.

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.r .ssg A

v.ssg = v.l .ssg + (v.r .min − v.l .max )2 + v.r .ssg B

v.ssg = v.l .ssg + (v.x − v.l .max )2 + (v.x − v.r .min)2 + v.r .ssg @
C

v.ssg = v.l .ssg + (v.r .x − v.l .x )2 + v.r .ssg D

v.ssg = v.l .ssg + (v.x − v.l .x )2 + (v.x − v.r .x )2 + v.r .ssg E


Algoritmer og Datastrukturer (maj 2021) Side 12 af 14

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

De følgende 4 opgaver består i at udfylde 4 blokke i følgende algoritmeskabelon.

Algoritme Connect(w)
Opret tom tabel W [0 .. m, 0 .. n]
for . . .
<< Opgave 21: iterer over W >>

<< Opgave 22: beregn W [i, j] >>

<< Opgave 23: sæt solution til maksimal værdi >>

<< Opgave 24: udskriv en løsning >>


Algoritmer og Datastrukturer (maj 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 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

Onsdag 19. januar 2022, 9:00–11:00

Institut for Datalogi, Naturvidenskabelige Fakultet, Aarhus Universitet

Antal sider i opgavesættet (incl. forsiden): 13

Tilladte medbragte hjælpemidler: Ingen.

Kun det separate svarark skal udfyldes og afleveres.

Denne opgaveformulering skal ikke afleveres.


Algoritmer og Datastrukturer (januar 2022) Side 2 af 13

Vejledning og pointgivning

Dette eksamenssæt består af en mængde multiple-choice-opgaver.

Svarene på opgaverne angives på det separate svarark som afleveres.

For hver opgave er angivet opgavens andel af det samlede eksamenssæt.

Hvert delspørgsmål har præcist et rigtigt svar.

For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.

Et delspørgsmål bedømmes som følgende:

ˆ Hvis du sætter kryds ved det rigtige svar, får du 1 point.

ˆ Hvis du ikke sætter nogen krydser, får du 0 point.


1
ˆ Hvis du sætter kryds ved et forkert svar, får du − point, hvor k er antal svar-
k−1
muligheder.

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

Opgave 1 (Asymptotisk notation, 6 %)


I det følgende angiver log n 2-tals-logaritmen af n.

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

22 log n er O(n · log n) A B


@ 1.8

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

Opgave 2 (Analyse af løkker, 6 %)

Algoritme loop1(n) Algoritme loop2(n)


s=1 i=1
for i = 1 to n while i ≤ n
for j = i to 2 ∗ i j=1
s=s+1 while j ≤ n
j =j+1
i=i+1

Algoritme loop3(n) Algoritme loop4(n)


s=0 i=1
i=0 while i ≤ n
while s ≤ n j=0
i=i+1 while j ≤ n
s=s+i j =j+i
i=2∗i

Angiv for hver af ovenstående algoritmer udførselstiden som funktion af n i Θ-notation.


√ √
Θ( n log n) Θ(log n) Θ(n3 ) Θ(n log n) Θ( n) Θ(n2 ) Θ((log n)2 ) Θ(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 (januar 2022) Side 4 af 13

Opgave 3 (Indsættelser i søgetræer, 4 %)

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

Hvad er resultatet af Build-Max-Heap på ovenstående array ?


1 2 3 4 5 6 7 8 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

Hvad er resultatet af Heap-Extract-Max på ovenstående max-heap ?


1 2 3 4 5 6 7 8 9 10 11 12 13

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

Angiv resultatet af at anvende Partition(A, 3, 12) på ovenstående array A.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

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

Opgave 9 (Lineær probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

13 21 2 16 19

I ovenstående hashtabel af størrelse 11 er anvendt linear probing med hashfunktionen


h(k) = 4k mod 11.
Angiv positionerne de fem elementer 1, 3, 8, 9 og 10 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 2, 13, 16, 19
og 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(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

Opgave 10 (Kvadratisk probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

20 15 10 19 4

I ovenstående hashtabel af størrelse 11 er anvendt kvadratisk probing med hashfunktionerne


h′ (k) = 5k mod 11 og h(k, i) = (h′ (k) + 4i2 ) mod 11.
Angiv positionerne de fem elementer 0, 3, 6, 7 og 8 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 4, 10, 15, 19
og 20).

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

Opgave 11 (Rød-sort træ, 4 %)


For hver af nedenstående delmængder, angiv om nedenstående binære træ er et lovligt
rød-sort træ hvis netop disse knuder farves røde.

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

Opgave 12 (Indsættelse i rød-sort træer, 4 %)

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

Opgave 14 (Stærke sammenhængskomponenter, 4 %)


De stærke sammenshængskomponenter i en orienteret graf kan findes ved at køre to stan-
dard grafalgoritmer efter hinanden.

Topologisk sortering efterfulgt af dybde først søgning. A

Dybde først søgning efterfulgt af dybde først søgning. B


@

Bredde først søgning efterfulgt af dybde først søgning. C

Kruskals algoritme efterfulgt af Prims algoritme. D

Bellman-Fords algoritme efterfulgt af Dijkstras algoritme. E

Opgave 15 (Dijkstras algoritme, 4 %)

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.

ABDEFICHG ABEDICFHG ABDEIFCGH ABEDICHGF

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.

AIDBCFGJEH AIDBCEHJFG AIDBCEHFJG AIDBCHEFJG

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

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.

CDEBGJHIFA JHIEBGCDFA JHICDEBGFA JEHBCIGDFA

A
@ B C D 17.1

Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.

Tree edge Back edge Cross edge Forward edge


(E, D) A B C
@ D 17.2

(F, D) A
@ B C D 17.3

(E, G) A B
@ C D 17.4

(B, E) A
@ B C D 17.5

Opgave 18 (Topologisk sortering, 4 %)

C D

A B

Angiv for hver af nedenstående ordninger af knuderne i ovenstående graf om det er en


lovlig topologisk sortering.

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

Opgave 19 (Kruskals algoritme, 4 %)

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⌋.

Algoritme FibonacciDivision(x, y) Eksempel


Inputbetingelse : Heltal x ≥ 0 og y ≥ 1 x = 92, y = 12
Outputkrav : r = ⌊x/y⌋
Metode :r←0 x y f F r
f ←1
F ←2 92 12 1 2 0
{I} while x ≥ y do 92 12 2 3 0
if f ∗ y ≤ x and x < F ∗ y then
r ←r+f 92 12 3 5 0
x←x−f ∗y 92 12 5 8 0
else if F ∗ y ≤ x then
tmp ← f + F 32 12 5 8 5
f ←F 32 12 3 5 5
F ← tmp
else 32 12 2 3 5
tmp ← F − f 8 12 2 3 7
F ←f
f ← tmp

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

⌊x0 /y0 ⌋ = r + ⌊x/y⌋ @


A B 20.3

x − x0 = f · y A B
@ 20.4

f ≤x A B
@ 20.5
Algoritmer og Datastrukturer (januar 2022) Side 12 af 13

Opgave 21 (Amortiseret analyse, 4 %)


Antag at en kø med n elementer opbevares i et array A[0 .. N − 1] af størrelse N ≥ n,
således at køens elementer er A[s .. t − 1], hvor 0 ≤ s < t ≤ N og n = t − s. Et nyt
element kan indsættes først i køen på plads A[s − 1] og s tælles én ned, og et nyt element
kan indsættes bagerst i køen på plads A[t] og t tælles én op. Hvis der ikke er plads til
indsættelse af et nyt element først eller bagerst i køen, dvs. når henholdsvis s = 0 eller
t = N , så kopieres køens elementer over i den midterste tredjedel af et nyt array med
størrelse N = 3n. Dette tager worst-case tid O(n). Fjernelser først i køen returner A[s] og
s tælles én op, og fjernelser bagerst i køen returnerer A[t − 1] og t tælles én ned.
Angiv for hver af nedenstående funktioner om det er en potentialefunktion, hvormed man
kan argumentere for at operationerne på køen tager amortiseret konstant tid.

Ja Nej
N −n A B
@ 21.1

t−s A B
@ 21.2

s+t A B
@ 21.3

max(0, N − 3s) + max(0, 3t − 2N ) @


A B 21.4

|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

De følgende 3 opgaver består i at udfylde 3 blokke i følgende algoritmeskabelon.

Algoritme Delsum(V, (x1 , . . . , xn ))


Opret tabel T [0 .. n , 0 .. V ] hvor alle indgange er 0
for . . .
<< Opgave 22: iterer over T >>

<< Opgave 23: beregn T [k, v] = S(k, v) >>

<< Opgave 24: Udskriv en løsning i vilkårlig rækkefølge >>


Algoritmer og Datastrukturer (januar 2022) Side 13 af 13

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 = n to 1 step - 1 A B 22.2


@
for v = 1 to V

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

T [k, v] = max(T [k, v], xk + T [k − 1, v − xk ])

T [k, v] = max(T [k − 1, v], xk + T [k − 1, v − xk ]) A B


@ 23.3

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

Onsdag 25. maj 2022, 9:00–11:00

Institut for Datalogi, Naturvidenskabelige Fakultet, Aarhus Universitet

Antal sider i opgavesættet (incl. forsiden): 14

Tilladte medbragte hjælpemidler: Ingen.

Kun det separate svarark skal udfyldes og afleveres.

Denne opgaveformulering skal ikke afleveres.


Algoritmer og Datastrukturer (maj 2022) Side 2 af 14

Vejledning og pointgivning

Dette eksamenssæt består af en mængde multiple-choice-opgaver.

Svarene på opgaverne angives på det separate svarark som afleveres.

For hver opgave er angivet opgavens andel af det samlede eksamenssæt.

Hvert delspørgsmål har præcist et rigtigt svar.

For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.

Et delspørgsmål bedømmes som følgende:

ˆ Hvis du sætter kryds ved det rigtige svar, får du 1 point.

ˆ Hvis du ikke sætter nogen krydser, får du 0 point.


1
ˆ Hvis du sætter kryds ved et forkert svar, får du − point, hvor k er antal svar-
k−1
muligheder.

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

Opgave 1 (Asymptotisk notation, 6 %)


I det følgende angiver log n 2-tals-logaritmen af n.

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

(log n)3 er O(log n) A B


@ 1.4

n · log n er O(n0.01 ) A B
@ 1.5

(log n)6 + 23 log n er O(2n ) @


A B 1.6

n + 5 log(n2 ) er O(n3 ) A
@ B 1.7

22 log n er O(n · log n) A B


@ 1.8

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

Opgave 2 (Analyse af løkker, 6 %)

Algoritme loop1(n) Algoritme loop2(n)


s=0 i=n
for i = 1 to n while i > 0
for j = 1 to n i=i−1
for k = 1 to n
s=s+1

Algoritme loop3(n) Algoritme loop4(n)


s=0 i=1
for i = 1 to n while i ≤ n
for j = i to n j=i
for k = i to j while j > 0
s=s+1 j = ⌊j/2⌋
i=i+i

Angiv for hver af ovenstående algoritmer udførselstiden som funktion af n i Θ-notation.

Θ(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

Opgave 3 (Indsættelser i søgetræer, 4 %)

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

Hvad er resultatet af Build-Max-Heap på ovenstående array ?


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

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

Hvad er resultatet af Heap-Extract-Max på ovenstående max-heap ?


1 2 3 4 5 6 7 8 9 10 11 12

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

Angiv resultatet af at anvende Partition(A, 4, 13) på ovenstående array A.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

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 %)

1222 1122 0403 4410 4403 1322

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.

0403 1122 1222 1322 4410 4403 A

0403 4403 4410 1122 1222 1322 B

4410 1222 1122 1322 0403 4403 C

0403 1122 1222 1322 4403 4410 D

0403 4403 4410 1222 1122 1322 @


E

Opgave 9 (Lineær probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

19 9 10 14 21

I ovenstående hashtabel af størrelse 11 er anvendt linear probing med hashfunktionen


h(k) = 3k mod 11.
Angiv positionerne de fem elementer 1, 2, 3, 4 og 7 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 9, 10, 14, 19
og 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

Opgave 10 (Dobbelt hashing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

22 12 1 3 18

I ovenstående hashtabel af størrelse 11 er anvendt dobbelt hashing med hashfunktionerne


h1 (k) = 3k mod 11 og h2 (k) = 1 + (4k mod 10).
Angiv positionerne de fem elementer 5, 7, 8, 9 og 11 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 1, 3, 12, 18
og 22).

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

Opgave 11 (Rød-sort træ, 4 %)


For hver af nedenstående delmængder, angiv om nedenstående binære træ er et lovligt
rød-sort træ hvis netop disse knuder farves røde.

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

Opgave 12 (Indsættelse i rød-sort træer, 4 %)

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

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.

FDBGCHEA FGCBHEDA EGCHFBDA FGCHBDEA

A B C D
@ 15.1

Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.

Tree edge Back edge Cross edge Forward edge


(E, H) A B C
@ D 15.2

(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

Opgave 16 (Kruskals algoritme, 4 %)

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
@

Opgave 17 (Dijkstras algoritme, 4 %)

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.

ADHBCEFG ABCDFEGH ABDHCEFG ADHBCFEG

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.

ADIHBCFJEG ADHIBJFCGE ADHIBJCFEG ADHIBJFCEG

A B C
@ D

Opgave 19 (Topologisk sortering, 4 %)

B C

D A

Angiv for hver af nedenstående ordninger af knuderne i ovenstående graf om det er en


lovlig topologisk sortering.

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

Opgave 20 (Amortiseret analyse, 4 %)


Et rød-sort søgetræ understøtter Insert(x) og Delete(x), der henholdsvis indsætter et
element x i et rød-sort søgetræ og sletter et element x fra et rød-sort søgetræ, begge
i worst-case O(log n) tid, hvor n er den aktuelle størrelse af det rød-sorte søgetræ. Vi
antager i denne opgave at x altid findes i det rød-sorte træ når vi udfører Delete(x), dvs.
der fjernes et element fra det rød-sorte træ.
Angiv for hver af nedenstående funktioner om den er en potentialefunktion, hvormed man
kan argumentere for at Insert tager amortiseret O(log n) tid og Delete tager amortiseret
O(1) tid.

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

De følgende 3 opgaver består i at udfylde 3 blokke i følgende algoritmeskabelon.

Algoritme Opdeling(V, M, (c1 , . . . , cn ))


Opret tabel P [0 .. V , 0 .. M ] hvor alle indgange er Falsk
for . . .
<< Opgave 22: iterer over P >>
for . . .

<< Opgave 23: beregn P [v, m] >>

if P [V, M ] = Sand then

<< Opgave 24: Udskriv en løsning med højest M mønter >>

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

for v = V to 0 step - 1 A B 22.3


@
for m = 0 to M
Algoritmer og Datastrukturer (maj 2022) 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
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

Mandag 9. januar 2023, 13:00–15:00

Institut for Datalogi, Naturvidenskabelige Fakultet, Aarhus Universitet

Antal sider i opgavesættet (incl. forsiden): 14

Tilladte medbragte hjælpemidler: Ingen.

Kun det separate svarark skal udfyldes og afleveres.

Denne opgaveformulering skal ikke afleveres.


Algoritmer og Datastrukturer (januar 2023) Side 2 af 14

Vejledning og pointgivning

Dette eksamenssæt består af en mængde multiple-choice-opgaver.

Svarene på opgaverne angives på det separate svarark som afleveres.

For hver opgave er angivet opgavens andel af det samlede eksamenssæt.

Hvert delspørgsmål har præcist et rigtigt svar.

For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.

Et delspørgsmål bedømmes som følgende:

ˆ Hvis du sætter kryds ved det rigtige svar, får du 1 point.

ˆ Hvis du ikke sætter nogen krydser, får du 0 point.


1
ˆ Hvis du sætter kryds ved et forkert svar, får du − point, hvor k er antal svar-
k−1
muligheder.

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

Opgave 1 (Asymptotisk notation, 6 %)


I det følgende angiver log n 2-tals-logaritmen af n.

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

3(log n)6 er O(4log n ) A


@ B 1.6

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

log(n!) + n er Θ(n · log n) A


@ B 1.11

n er Ω(23 log n ) A B
@ 1.12

Opgave 2 (Analyse af løkker, 6 %)

Algoritme loop1(n) Algoritme loop2(n)


s=1 s=0
while s ≤ n for i = 1 to n
s=s+1 for j = 1 to i ∗ i
s=s+1

Algoritme loop3(n) Algoritme loop4(n)


for i = 1 to n i=0
j=1 j=0
while j ≤ n while j ≤ n
j =2∗j if i < j then
i=i+1
else
i=0
j =j+1

Angiv for hver af ovenstående algoritmer udførselstiden som funktion af n i Θ-notation.


√ √
Θ(n2 ) Θ(n) Θ((log n)2 ) Θ(n3 ) Θ( 3 n) Θ(n log n) Θ( n) Θ(log 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 (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

Hvad er resultatet af Build-Max-Heap på ovenstående array ?


1 2 3 4 5 6 7 8 9

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

Opgave 6 (Lineær probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

0 22 11 16 5

I ovenstående hashtabel af størrelse 11 er anvendt lineær probing med hashfunktionen


h(k) = 4k mod 11.
Angiv positionerne de fem elementer 3, 4, 6, 8 og 9 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 0, 5, 11, 16
og 22).

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

Opgave 7 (Dobbelt hashing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

0 9 13 14 2

I ovenstående hashtabel af størrelse 11 er anvendt dobbelt hashing med hashfunktionerne


h1 (k) = 3k mod 11 og h2 (k) = 1 + (2k mod 10).
Angiv positionerne de fem elementer 3, 4, 5, 10 og 11 vil blive indsat på i hashtabellen
(for hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 0, 2, 9,
13 og 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 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

Opgave 8 (Indsættelser i søgetræer, 4 %)

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

Opgave 9 (Rød-sorte træer, 4 %)


For hver af nedenstående delmængder, angiv om nedenstående binære træ er et lovligt
rød-sort træ hvis netop disse knuder farves røde.

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

Opgave 10 (Indsættelse i rød-sorte træer, 4 %)

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.

ACDIGFHEBJ ACGDFBHJEI ACDIGHFBEJ ACDIGFHBEJ

A B C D
@

Opgave 13 (DFS, 4 %)

F B

D H G E I

A 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.

BIFEGHDCA DBFIEGHCA BFIEGDHCA DHIBFEGCA

A B C
@ D 13.1

Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.

Tree edge Back edge Cross edge Forward edge


(C, A) A B
@ C D 13.2

(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

Opgave 14 (Dijkstras algoritme, 4 %)

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.

ADEBFGHC ADFBHCGE ADEFGBHC ADEBFHCG

A
@ B C D

Opgave 15 (Prims algoritme, 4 %)

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).

AGHFCEDIB AGFHCEDIB AGHFCEBDI AGHFCBIED

A
@ B C D
Algoritmer og Datastrukturer (januar 2023) Side 10 af 14

Opgave 16 (Stærke sammenhængskomponenter, 4 %)

E A B

D F

G C H

Hvad er antallet af stærke sammenhængskomponenter i ovenstående graf?

1 2 3 4 5 6 7 8

A B
@ C D E F G H

Opgave 17 (Topologisk sortering, 4 %)

B A

C D

Angiv for hver af nedenstående ordninger af knuderne i ovenstående graf om det er en


lovlig topologisk sortering.

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.

Θ(log n) Θ(n) Θ(n log n) Θ(n2 )


Forventede tid, Randomized-Select A B
@ C D 18.1

Worst-case tid, Randomized-Select A B C D


@ 18.2

Forventede tid, Deterministic-Select A B


@ C D 18.3

Worst-case tid, Deterministic-Select A B


@ C D 18.4
Algoritmer og Datastrukturer (januar 2023) Side 11 af 14

Opgave 19 (Amortiseret analyse, 4 %)


Antag vi anvender et rød-sort søgetræ til at gemme en mængde positive heltal, udvidet
med en operation InsertOrDouble(x), som indsætter x i det rød-sorte søgetræ, hvis x
ikke allerede er indsat. Ellers, slettes x fra søgetræet og InsertOrDouble(2 · x) kaldes
rekursivt. F.eks., hvis vi udfører InsertOrDouble(3) på et rød-sort søgetræ, der gemmer
mængden {1, 2, 3, 6, 12, 16, 25}, vil den resulterende mængde være {1, 2, 16, 24, 25}.
Angiv for hver af nedenstående funktioner om det er en potentialefunktion, hvormed man
kan argumentere for at InsertOrDouble tager amortiseret O(log n) tid, hvor n er antal
heltal i mængden før operationen.

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

Antag vi har en gren af længde n = 7, med nedenstående energiforbrug ei for at save


grenen over efter i centimeter. Bemærk e0 = en = 0, da der ikke skal saves noget af.
i 0 1 2 3 4 5 6 7
ei 0 7 1 4 4 2 5 0
For m = 4 vil det kræve mindst energi, hvis grenen saves over efter 2 og 5 centimer, som
vil kræve energi 1 + 2 = 3, og de tre resulterende stykker har længde 2, 3 og 2 centimer.
De følgende 3 opgaver består i at udfylde 3 blokke i følgende algoritmeskabelon.

Algoritme Grenopsavning(m, (e0 , . . . , en ))


Opret tabel E[0 .. n]
for . . .
<< Opgave 21: iterer over E >>

<< Opgave 22: beregn E[i] >>

<< 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

Opgave 24 (Udvidede søgetræer, 4 %)


Betragt et rød-sort søgetræ hvor hver knude gemmer et par af heltal (element, vægt), og
parrene er sorteret fra venstre-mod-højre efter stigende element værdi. For en knude v i
træet lader vi v.e og v.w betegne parret (e, w) gemt i knuden. Desuden gemmer v værdien
v.total som er summen af vægtene i alle knuder i v’s undertræ.

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.w, v.r .total ) A

v.total = v.l .total + v.w + v.r .total B


@

v.total = max(v.l .total , v.l .total + v.w, v.l .total + v.w + v.r .total ) C

v.total = max(v.l .total + v.w, v.r .total + v.w) D


Algoritmer og Datastrukturer (maj 2023) Side 1 af 14

EKSAMEN

Algoritmer og Datastrukturer

Tirsdag 30. maj 2023, 9:00–11:00

Institut for Datalogi, Naturvidenskabelige Fakultet, Aarhus Universitet

Antal sider i opgavesættet (incl. forsiden): 14

Tilladte medbragte hjælpemidler: Ingen.

Kun det separate svarark skal udfyldes og afleveres.

Denne opgaveformulering skal ikke afleveres.


Algoritmer og Datastrukturer (maj 2023) Side 2 af 14

Vejledning og pointgivning

Dette eksamenssæt består af en mængde multiple-choice-opgaver.

Svarene på opgaverne angives på det separate svarark som afleveres.

For hver opgave er angivet opgavens andel af det samlede eksamenssæt.

Hvert delspørgsmål har præcist et rigtigt svar.

For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.

Et delspørgsmål bedømmes som følgende:

ˆ Hvis du sætter kryds ved det rigtige svar, får du 1 point.

ˆ Hvis du ikke sætter nogen krydser, får du 0 point.


1
ˆ Hvis du sætter kryds ved et forkert svar, får du − point, hvor k er antal svar-
k−1
muligheder.

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

Opgave 1 (Asymptotisk notation, 6 %)


I det følgende angiver log n 2-tals-logaritmen af n.

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

(log n)3 er Θ(2) A B


@ 1.10

log(n!) er Θ(n · log n) A


@ B 1.11

n2 er Θ(log n) A B
@ 1.12

Opgave 2 (Analyse af løkker, 6 %)

Algoritme loop1(n) Algoritme loop2(n)


s=1 s=1
while s ≤ n for i = 1 to n
s=s+1 for j = 1 to n
s=s+1

Algoritme loop3(n) Algoritme loop4(n)


i=0 s=0
s=0 i=n
while s ≤ n while i > 1
i=i+1 for j = 1 to n
s=s+i s=s+1
i = ⌊i/2⌋

Angiv for hver af ovenstående algoritmer udførselstiden som funktion af n i Θ-notation.


√ √
Θ(n log n) Θ(n n) Θ( n) Θ(n2 ) Θ(n) Θ((log n)2 ) Θ(log n) Θ(n3 )
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 2023) Side 4 af 14

Opgave 3 (Indsættelser i søgetræer, 4 %)

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

Hvad er resultatet af Heap-Extract-Max på ovenstående max-heap ?


1 2 3 4 5 6 7 8 9 10 11 12

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

Angiv resultatet af at anvende Partition(A, 4, 14) på ovenstående array A.


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 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 %)

0404 3020 0020 1212 3004 3404

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.

0404 3004 3404 1212 3020 0020 @


A

3020 0020 1212 0404 3004 3404 B

0020 0404 1212 3020 3004 3404 C

0404 3004 3404 1212 0020 3020 D

0020 0404 1212 3004 3020 3404 E


Algoritmer og Datastrukturer (maj 2023) Side 6 af 14

Opgave 8 (Lineær probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

6 19 8 4 16

I ovenstående hashtabel af størrelse 11 er anvendt lineær probing med hashfunktionen


h(k) = 2k mod 11.
Angiv positionerne de fem elementer 0, 3, 5, 9 og 10 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 4, 6, 8, 16
og 19).

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

Opgave 9 (Kvadratisk probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

0 9 2 22 14

I ovenstående hashtabel af størrelse 11 er anvendt kvadratisk probing med hashfunktionerne


h′ (k) = 3k mod 11 og h(k, i) = (h′ (k) + 5i + 2i2 ) mod 11.
Angiv positionerne de fem elementer 3, 5, 6, 7 og 10 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 0, 2, 9, 14
og 22).

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

Opgave 10 (Rød-sorte træer, 4 %)


For hver af nedenstående delmængder, angiv om nedenstående binære træ er et lovligt
rød-sort træ hvis netop disse knuder farves røde.

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

Opgave 11 (Indsættelse i rød-sorte træer, 4 %)

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.

AFIGHCEBD AFIGCHEBD AIFGHCEBD AFIGHCEDB

A
@ B C D

Opgave 15 (Lovlige bredde først træer, 4 %)

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

(A,B) (A,D) (B,C) (D,E) (E,F) @


A B 15.2

(A,B) (A,D) (D,E) (E,F) (F,C) A B


@ 15.3

(A,B) (A,D) (B,E) (E,F) (F,C) A B


@ 15.4

(A,B) (A,D) (B,C) (B,E) (E,F) @


A B 15.5
Algoritmer og Datastrukturer (maj 2023) Side 10 af 14

Opgave 16 (DFS, 4 %)

B A

F E D

C G

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.

BFCGDEA CGFEDBA DEGCFBA GCDEFBA

A B C D
@ 16.1

Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.

Tree edge Back edge Cross edge Forward edge


(A, D) A B C D
@ 16.2

(E, G) A B C
@ D 16.3

(B, A) A B
@ C D 16.4

(A, B) A
@ B C D 16.5

Opgave 17 (Dijkstras algoritme, 4 %)

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.

AFHCIJDEGB ACEGFHIDBJ AFHCIJEDGB ACFHIEDJGB

A B C
@ D
Algoritmer og Datastrukturer (maj 2023) Side 11 af 14

Opgave 18 (Kruskals algoritme, 4 %)

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

Opgave 19 (Topologisk sortering, 4 %)

D B

C A

Angiv for hver af nedenstående ordninger af knuderne i ovenstående graf om det er en


lovlig topologisk sortering.

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

For 0 ≤ i ≤ s, 0 ≤ j ≤ t, og 0 ≤ m ≤ k, lad Li,j,m betegne længden af en længste


streng X, som er en delsekvens af både S[i1 ..i] og T [j1 ..j], hvor 0 ≤ i1 ≤ i, 0 ≤ j1 ≤ j og
|S[i1 ..i]| + |T [j1 ..j]| − 2|X| ≤ m. Li,j,m kan bestemmes ved følgende rekursionsformel:



 0 hvis i = 0 eller j = 0



 1 + Li−1,j−1,m

hvis i > 0 og j > 0 og S[i] = T [j]
Li,j,m =



 0 hvis i > 0 og j > 0 og S[i] ̸= T [j] og m = 0


hvis i > 0 og j > 0 og S[i] ̸= T [j] og m > 0

 max(L
i−1,j,m−1 , Li,j−1,m−1 )

De følgende 3 opgaver består i at udfylde 3 blokke i følgende algoritmeskabelon.

Algoritme LCSk (S[1..s], T [1..t], k)


Opret tabel L[0..s, 0..t, 0..k]
for . . .
<< Opgave 20: iterer over L >>

<< Opgave 21: beregn L[i, j, m] >>

<< Opgave 22: Udskriv længden af et længste X >>

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

Opgave 23 (Amortiseret analyse, 4 %)


En binær min-heap understøtter Insert og Heap-Extract-Min på en min-heap med n
elementer i worst-case O(log n) tid. Antag Heap-Sorted-Extract udtager alle elemen-
terne i sorteret rækkefølge ved at kalde Heap-Extract-Min indtil heapen er tom.
Angiv for hver af nedenstående funktioner om den er en potentialefunktion, hvormed man
kan argumentere for at Insert tager amortiseret O(log n) tid og Heap-Extract-Min og
Heap-Sorted-Extract tager amortiseret O(1) tid.

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

Mandag 8. januar 2024, 9:00–11:00

Institut for Datalogi, Naturvidenskabelige Fakultet, Aarhus Universitet

Antal sider i opgavesættet (incl. forsiden): 14

Tilladte medbragte hjælpemidler: Ingen

Kun det separate svarark skal udfyldes og afleveres.

Denne opgaveformulering skal ikke afleveres.


Algoritmer og Datastrukturer (Januar 2024) Side 2 af 14

Vejledning og pointgivning

Dette eksamenssæt består af en mængde multiple-choice-opgaver.

Svarene på opgaverne angives på det separate svarark som afleveres.

For hver opgave er angivet opgavens andel af det samlede eksamenssæt.

Hvert delspørgsmål har præcist et rigtigt svar.

For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.

Et delspørgsmål bedømmes som følgende:

• Hvis du sætter kryds ved det rigtige svar, får du 1 point.

• Hvis du ikke sætter nogen krydser, får du 0 point.


1
• Hvis du sætter kryds ved et forkert svar, får du − point, hvor k er antal svar-
k−1
muligheder.

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

Opgave 1 (Asymptotisk notationer, 6 %)


I det følgende angiver log n 2-tals-logaritmen af n.

Ja Nej
√ √ 1.1
n er O( n · log n) A
@ B

4n + (log n)2 er O((log n)6 ) A B


@ 1.2

n0.01 er O(4) A B
@ 1.3

(log n)3 er O(8log n ) A


@ B 1.4

n! er O(n2 ) A B
@ 1.5

8log n er O(8 · log n) A B


@ 1.6
√ 1.7
log n er O( n · log n) A
@ B

n + n2 · log n er O(n3 ) A
@ B 1.8

n n er O(n!) A
@ B 1.9

n2/3 er Ω(n · log n) A B


@ 1.10

(log n)2 er Ω(n) A B


@ 1.11

n log n er Θ(n2 ) A B
@ 1.12

Opgave 2 (Analyse af løkker, 6 %)

Algoritme loop1(n) Algoritme loop2(n)


s=1 s=1
for i = 1 to n for i = 1 to n
for j = i to n s=s+2
s=s+1

Algoritme loop3(n) Algoritme loop4(n)


i=0 i=1
while i ≤ n 2 j=1
j=0 while i ≤ n
while j ≤ i while j < i
j =j+1 j =2·j
i=i+n i=3·i

Angiv for hver af ovenstående algoritmer udførselstiden som funktion af n i Θ-notation.



Θ(n log n) Θ(n) Θ(log n) Θ(n3 ) Θ(n4 ) Θ((log n)2 ) Θ(n n) Θ(n2 )
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 (Januar 2024) Side 4 af 14

Opgave 3 (Indsættelse i søgetræer, 4 %)

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

Hvad er resultatet af Heap-Extract-Max på ovenstående max-heap ?


1 2 3 4 5 6 7 8 9 10 11 12

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

Hvad er resultatet af Build-Max-Heap på ovenstående array ?


1 2 3 4 5 6 7 8 9

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

Angiv resultatet af at anvende Partition(A, 4, 12) på ovenstående array A.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

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.

Θ(1) Θ(log n) Θ(n) Θ(n log n) Θ(n2 )


Forvented antal kald til Partition A B C
@ D E 7.1

Færreste antal kald til Partition (best case) A B C


@ D E 7.2

Fleste antal kald til Partition (worst case) A B C


@ D E 7.3
Algoritmer og Datastrukturer (Januar 2024) Side 6 af 14

Opgave 8 (Lineær probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

22 15 13 2 18

I ovenstående hashtabel af størrelse 11 er anvendt lineær probing med hashfunktionen


h(k) = 3k mod 11.
Angiv positionerne de fem elementer 0, 4, 6, 7 og 8 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 2, 13, 15, 18
og 22).

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

Opgave 9 (Dobbelt hashing, 4 %)

0 1 2 3 4 5 6 7 8 9 10

11 18 3 19 14

I ovenstående hashtabel af størrelse 11 er anvendt dobbelt hashing med hashfunktionerne


h1 (k) = 5k mod 11 og h2 (k) = 1 + (3k mod 10).
Angiv positionerne de fem elementer 0, 1, 2, 7 og 8 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 3, 11, 14, 18
og 19).

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

Opgave 10 (Rød-sorte træer, 4 %)


For hver af nedenstående delmængder, angiv om nedenstående binære træ er et lovligt
rød-sort træ hvis netop disse knuder farves røde.

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

Opgave 11 (Indsættelse i rød-sorte træer, 4 %)

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.

ABCGIHFED AICGBDEFH ABHIDCEFG ABCGIHEFD

A B C D
@

Opgave 15 (DFS, 4 %)

D I A E

F B G

H 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 discovery time.

ABFHCIDEG ABHFIDCEG ABEFHGICD AEGBFIDHC

A
@ B C D 15.1

Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.

Tree edge Back edge Cross edge Forward edge


(B, A) A B
@ C D 15.2

(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

Opgave 16 (Dijkstras algoritme, 4 %)

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.

ABCDFE ABCEFD ACDBEF ACDBFE

A B C
@ D

Opgave 17 (Kruskals algoritme, 4 %)

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
@

Opgave 18 (DFS på stærk sammenhængende grafer, 4 %)


Antag DFS udføres på en stærk sammenhængende graf med n ≥ 3 knuder og m kanter,
d.v.s. alle knuder udgør én stærk sammenhængskomponent. Det antages desuden at hvis
(u, v) er en kant i grafen, så er (v, u) ikke en kant i grafen. Angiv hvor mange kanter af
hver DFS type der maksimalt kan være.

0 1 n−1 n m−n m−n+1


Største antal træ kanter (tree edges) A B C
@ D E F 18.1

Største antal baglæns kanter (back edges) A B C D E F


@ 18.2

Største antal forlæns kanter (forward edges) A B C D E


@ F 18.3

Største antal kryds kanter (cross edges) A B C D E


@ F 18.4
Algoritmer og Datastrukturer (Januar 2024) Side 11 af 14

Opgave 19 (Topologisk sortering, 4 %)

D C

B A

Angiv for hver af nedenstående ordninger af knuderne i ovenstående graf om det er en


lovlig topologisk sortering.

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 < high A


@ B 20.3

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

De følgende 3 opgaver består i at udfylde 3 blokke i følgende algoritmeskabelon.

Algoritme Mønter(n, (c1 , . . . , cm ))


Opret tabel T [0 .. n]
for . . .
<< Opgave 21: iterer over T >>

<< Opgave 22: beregn T [i] >>

<< Opgave 23: Udskriv et k der kræver flest mulige mønter>>

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

Opgave 24 (Amortiseret analyse, 4 %)


Betragt et rød-sort søgetræ, der gemmer en mængde reelle tal, udvidet med en operation
DominatingInsert(x, δ), som indsætter tallet x i søgetræet og sletter alle eksisterende
tal fra søgetræet i intervallet [x−δ, x+δ]. Dette implementeres ved at man gentagne gange
søger efter forgængeren og efterfølgeren til x i søgetræet, og sletter de fundne tal hvis de
ligger i intervallet [x − δ, x + δ]. Hvis indsættelsen sletter k tal, så tager dette worst-case
O((k + 1) log n) tid, hvor n er antal tal i træet før DominatingInsert udføres.
Angiv for hver af nedenstående funktioner om det er en potentialefunktion, hvormed man
kan argumentere for at DominatingInsert tager amortiseret O(log n) tid.

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

Lørdag den 4. januar 2020, kl. 9.00–11.00

Institut for Datalogi, Naturvidenskabelige Fakultet, Aarhus Universitet

Antal sider i opgavesættet (incl. forsiden): 16

Tilladte medbragte hjælpemidler: Ingen

Studienummer :

Navn :
Algoritmer og Datastrukturer (eksamen januar 2020) Side 2 af 16

Vejledning og pointgivning

Dette eksamenssæt består af en mængde multiple-choice-opgaver.

Opgaverne besvares på opgaveformuleringen som afleveres.

For hver opgave er angivet opgavens andel af det samlede eksamenssæt.

Hvert delspørgsmål har præcist et rigtigt svar.

For hvert delspørgsmål må du vælge max ét svar ved at afkrydse den tilsvarende rubrik.

Et delspørgsmål bedømmes som følgende:

• Hvis du sætter kryds ved det rigtige svar, får du 1 point.

• Hvis du ikke sætter nogen krydser, får du 0 point.


1
• Hvis du sætter kryds ved et forkert svar, får du − k−1 point, hvor k er antal svar-
muligheder.

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

Opgave 1 (Asymptotisk notation, 6 %)

I det følgende angiver log n 2-tals-logaritmen af n.

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
@

5 · 22 log n er O((log n)3 ) A B


@

log n er O(n · log n) A


@ B

(log n)3 + 2log n er O(n0.01 ) A B


@

n! er O( n) 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

Opgave 2 (Analyse af løkker, 6 %)

Algoritme loop1(n) Algoritme loop2(n)


s=1 s=1
for i = 1 to n while s ≤ n
for j = 1 to n s=s+1
s=s+1

Algoritme loop3(n) Algoritme loop4(n)


s=0 s=0
for i = 1 to n i=n
for j = i to n while i > 1
for k = i to j for j = 1 to i
s=s+1 s=s+1
i = bi/2c

Angiv for hver af ovenstående algoritmer udførselstiden som funktion af n i Θ-notation.

√ √
Θ( 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

Opgave 3 (Indsættelser i søgetræer, 4 %)

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 %)

Angiv den binære max-heap efter indsættelse af elementerne 3, 5, 6, 4, 8, 7 og 11 i den


givne rækkefølge med Max-Heap-Insert, startende med den tomme heap.

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

Hvad er resultat af Build-Max-Heap på ovenstående array ?

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

Hvad er resultat af Heap-Extract-Max på ovenstående max-heap ?

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

Angiv resultatet af at anvende Partition(A, 4, 14) på ovenstående array A.

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 %)

3441 1412 3421 0012 3341 2141

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.

1412 0012 3421 3441 3341 2141 @


A

0012 1412 2141 3341 3421 3441 B

0012 1412 3421 2141 3341 3441 C

0012 1412 2141 3341 3441 3421 D

3421 3441 3341 2141 1412 0012 E


Algoritmer og Datastrukturer (eksamen januar 2020) Side 7 af 16

Opgave 9 (Lineær probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10
11 17 6 10 21

I ovenstående hashtabel af størrelse 11 er anvendt linear probing med hashfunktionen


h(k) = 3k mod 11.
Angiv positionerne de fem elementer 0, 3, 7, 8 og 9 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 6, 10, 11, 17
og 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

Opgave 10 (Kvadratisk probing, 4 %)

0 1 2 3 4 5 6 7 8 9 10
4 12 19 15 8

I ovenstående hashtabel af størrelse 11 er anvendt kvadratisk probing med hashfunktionerne


h0 (k) = 2k mod 11 og h = (h0 (k) + 3i + 5i2 ) mod 11.
Angiv positionerne de fem elementer 0, 5, 6, 7 og 10 vil blive indsat på i hashtabellen (for
hver af indsættelserne antager vi at hashtabellen kun indeholder elementerne 4, 8, 12, 15
og 19).

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

Opgave 11 (Rød-sort træ, 4 %)

For hver af nedenstående delmængder, angiv om nedenstående binære træ er et lovligt


rød-sort træ hvis netop disse knuder farves røde.

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
@

Opgave 12 (Indsættelse i rød-sort træer, 4 %)

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 %)

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) = 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

ADEGHCBF ADGHECFB ADEGHCFB ADEHBFCG

Opgave 16 (Lovlige bredde først træer, 4 %)

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

(A,C) (A,F) (B,E) (F,B) (F,D) A


@ B

(A,C) (A,F) (C,D) (D,E) (F,B) @


A B

(A,C) (A,F) (D,E) (E,B) (F,D) A B


@

(A,C) (C,D) (D,E) (D,F) (F,B) A B


@

(A,F) (D,C) (D,E) (E,B) (F,D) A B


@
Algoritmer og Datastrukturer (eksamen januar 2020) Side 11 af 16

Opgave 17 (DFS, 4 %)

E I C

D H J A

B F G

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

ICEDBFHJGA IEDBGFHCJA HEDBFICJGA EDBIHFCJGA

Angiv for hver af nedenstånde kanter hvilken type kanten bliver i DFS gennemløbet.

Tree edge Back edge Cross edge Forward edge

(B, D) A
@ B C D

(J, H) A
@ B C D

(I, J) A B
@ C D

(H, B) A B C
@ D

Opgave 18 (Dijkstras algoritme, 4 %)

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

AECDFGHB AEHCDGBF AEDFGCHB AEDFCGHB


Algoritmer og Datastrukturer (eksamen januar 2020) Side 12 af 16

Opgave 19 (Prims algoritme, 4 %)

-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

AIEDBGFHC AIEDBFHCG AIEDBFHGC AIDBCHFEG

Opgave 20 (Topologisk sortering, 4 %)

D A

C B

Angiv for hver af nedenstående ordninger af knuderne i ovenstående graf om det er en


lovlig topologisk sortering.

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

Opgave 21 (Stærke sammenhængskomponenter, 4 %)

G A F C

B H D E

Hvad er antallet af stærke sammenhængskomponenter i ovenstående graf?

A B C D
@ E F G H

1 2 3 4 5 6 7 8

Sættet fortsætter på næste side!!!


Algoritmer og Datastrukturer (eksamen januar 2020) Side 14 af 16

Dynamisk programmering

De næste tre opgaver vedrører dynamisk programmering.


Professor Brodal har bedt Larsen om at lave et eksamenssæt til Algoritmer og Data-
strukturer. Brodal har været så hjælpsom at lave et Python script der kan autogenerere
opgaver. Når scriptet køres, genererer det m forskellige opgaver. Hver opgave giver et antal
point, hvor point altid er et positivt heltal. Pointene for de forskellige opgaver gives som
en liste P = (p1 , . . . , pm ). Eksamenssættet skal indeholde præcist t point i alt. Larsen er i
et ondt lune og vil gøre eksamenssættet så svært som muligt. Han har derfor vurderet de
m opgaver og givet hver en sværhedsgrad S = (s1 , . . . , sm ), hvor hver sværhedsgrad er et
positivt tal. Larsen vil altså finde en delmængde af opgaver, således at det samlede antal
point er præcist t og summen af sværhedsgrader er så høj som mulig.
Hvis vi eksempelvis har m = 4 opgaver med point P = (2, 2, 4, 5) og sværhedsgrader
S = (5, 3, 6, 20), så er der to måder at opnå t = 4 point i alt: Vælg de første 2 opgaver
og få en sum af sværhedsgrader på 5 + 3 = 8, eller vælg opgave 3 og opnå en samlet
sværhedsgrad på 6. Den bedste (sværeste) løsning er altså at vælge de to første opgaver.
Larsen indser at problemet kan løses med dynamisk programmering. Lad V (k, v) betegne
den maksimale sum af sværhedsgrader som kan opnåes ved at udvælge en delsekvens af
de første k opgaver, således at det samlede antal point for de valgte opgaver er præcist v.
V (k, v) kan bestemmes ved følgende rekursionsformel



 0 hvis k = 0 og v = 0



 −∞

hvis k = 0 og v > 0
V (k, v) =



 V (k − 1, v) hvis pk > v eller V (k − 1, v − pk ) = −∞


 max{V (k − 1, v), V (k − 1, v − p ) + s } ellers

k k

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 23: beregn T [k][v] = V (k, v) >>

if V (m, t) > −∞ then

<< Opgave 24: Udskriv en løsning >>


else
print “Not possible”
Algoritmer og Datastrukturer (eksamen januar 2020) Side 15 af 16

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
@

Nej B Nej B Nej B

for k = 0 to m for v = 0 to t for k = 0 to m


for v = 0 to t for k = 0 to m for v = t 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.

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
@

Nej B T [k][v] = max{T [k − 1][v], T [k − 1][v − pk ] + sk }


else if k > 0 then
T [k][v] = T [k − 1][v]
else if k = 0 and v > 0 then
T [k][v] = −∞
else
T [k][v] = 0

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

You might also like