Lösningsskisser/kommentarer till tentamen 150321

Lösningsskisser/kommentarer till tentamen 150321
Alla sidhänvisningar är till kursboken Datatyper och algoritmer, Janlert Lars-Erik, Wiberg Torbjörn
2., [rev.] uppl. : Lund : Studentlitteratur : 2000 : x, 387 s. : ISBN: 91-44-01364-7.
Uppgift 1 – terminologi (5 p)
Förklara följande termer:
a)
Abstrakt datatyp
Sidan 27, kapitel 2, föreläsning 1, quizzar
b) Enkel datatyp
Sidan 26, kapitel 2, föreläsning 1, quizzar
c) Data
Sidan 25, kapitel 2, föreläsning 1, quizzar
d) Sammansatt datatyp (composite datatype)
Sidan 26, kapitel 2, föreläsning 1, quizzar
e) Algoritm
Sidan 22, kapitel 2, föreläsning 1, quizzar
Här vill vi se att du kan beskriva begreppet på ett sådant sätt att vi ser att du förstått vad det innebär. Det
behöver inte vara ett citat från kursboken. Vanliga ”fel” är att man skriver bara något enstaka ord som svar
eller skriver något så generellt att det inte tydligt visar att man verkligen förstått terminologin ordentligt.
Uppgift 2 – algoritmer och sortering (2 + 2 + 1p)
a)
Ge pseudokod för en valfri iterativ sorteringsalgoritm.
Kapitel 15, s 299 och framåt. Gruppövning, OU1, föreläsning 5, 6
Exempel på iterativa sorteringsalgoritmer är bubble sort, insertion sort, selection sort
Här vill vi dels se att du vet vad ”iterativ sorteringsalgoritm” betyder och kan välja ut en sådan från
kursmaterialet och dels att du kan beskriva denna tydligt i algoritmform i pseudokod. Vanliga ”fel” är
att man väljer en rekursiv algoritm, att man inte beskriver algoritmen korrekt (dvs algoritmen fungerar
inte på det sätt man skriver) och att man inte kan skriva pseudokod (skriver ren c/python-kod,
glömmer tala om vad variabler står för, vet inte hur man beskriver loopar etc).
b) Förklara hur algoritmen fungerar.
Här kontrollerar vi om du förutom att kunna upprepa en algoritm ur minnet också förstår hur den
fungerar och dessutom kan beskriva detta på ett sätt så att andra människor förstår det.
c) Vad har algoritmen för tidskomplexitet?
Något som man kanske kan utantill eller så räkna ut utifrån pseudokoden. Alla exempel jag gav i a) är
2
O(n )
Uppgift 3 – prioritetskö (2+2p)
a)
Förklara begreppet prioritetskö (priority queue).
Kapitel 14.6 s 293 och framåt. Föreläsning 10
Här ska du kunna övertyga oss om att du vet vad en prioritetskö är och hur den fungerar. Vanligt ”fel”
är att man ger en så generell beskrivning att det skulle passa in på fler datatyper än prioritetskön eller
att man nämner orden kö och prioritet men inte tydligt visar att man förstått hur prioriteten fungerar.
b) Det finns två specialfall av prioritetskö. Hur fungerar de?
s 294. Föreläsning 10
Att bara svara stack och kö räcker inte man måste också förklara hur det fungerar, dvs på vilket sätt de
är specialfall av prioritetskön.
Uppgift 4 – tabell (1 + 2 + 2p)
a)
Data i en tabell lagras med hjälp av en nyckel (key). Vad är en nyckel?
Kapitel s117 och framåt. Föreläsning 7, OU
Återigen går uppgiften ut på att du ska visa att du förstått begreppet nyckel och frågan kan besvaras
på många sätt.
b) Den potentiella uppsättningen nycklar är mycket stor. Ge en metod för att minska den uppsättningen.
Hur fungerar det?
Avsnittet om hashtabeller s 276 och framåt. Föreläsning 7
Här förväntar vi oss att du beskriver hashfunktionen och tanken bakom en hashtabell.
c) Vilket problem kan vi få pga att vi använder metoden i b) och hur kan vi lösa problemet?
Avsnittet om hashtabeller s 276 och framåt. Föreläsning 7
Här förväntar vi oss att du beskriver problemet med kollisioner i hashtabellen och någon/några
metoder för att lösa detta (dvs öppen hashing och/eller sluten hashing med linjär/kvadratisk teknik).
Uppgift 5 – tidskomplexitet (5p)
Vad har följande algoritm för tidskomplexitet. Motivera ditt svar!
MergeSort(A, p, r)
if p < r then
q ← (𝑝 + 𝑟) 2
MergeSort(A, p, q)
MergeSort(A, q+1, r)
Merge(A, p, q, r)
Merge(A, p, q, r)
n1 ← q – p + 1
n2 ← r – q
create arrays L [1 .. n1 + 1] and R[1 .. n2 + 1]
for i ← 1 to n1 do
L[i] ← A[p + i – 1]
for j ← 1 to n2 do
R[j] ← A[q+j]
L[n1 + 1] ← ∞ // ∞ är oändligheten
R[n2 + 1] ← ∞
i ← 1
j ← 1
for k ← p to r do
if L[i] ≤ R[j] then
A[k] ← L[i]
i ← i + 1
else
A[k] ← R[j]
j ← j + 1
Föreläsning 2, 5-6
Här testar vi dels om du kan komplexiteten för merge sort (vilket är värt ca 1p) och att du kan motivera detta
utifrån en algoritm du inte sett beskriven på detta sätt tidigare (dvs kan du läsa och förstå pseduokod?). Man
behöver inte räkna hela vägen ned till enstaka operationer men bör diskutera exempelvis hur många gånger
funktionen merge anropas och hur mycket den funktionen kostar.
Uppgift 6 – heap (1 + 1 + 2p)
a)
Vad är en heap och vad har den för egenskaper?
Sidan 295 och framåt i boken. Föreläsning 10
Det måste vara en specifik beskrivning i svaret (att bara säga att det är ett binärt träd med en ordning
och sen ge ett (korrekt) exempel räcker inte). Det måste framgå av ditt svar att du vet om den speciella
heap-relationen mellan förälder och barn.
b) Vi kan ha två olika typer av heapar. Förklara vad som skiljer dem åt.
Sidan 295 och framåt i boken. Föreläsning 10
Glöm inte att beskriva skillnaderna mellan min och maxheapen…
c) Förklara hur algoritmen ”heap sort” fungerar.
Sidan 311 och framåt i boken. Föreläsning 10
Här räcker det inte med att beskriva hur man skapar en heap av en osorterad lista (heapify). Man
måste också visa hur man omvandlar heapen till en sorterad lista….
Uppgift 7 – träd (2 + 2p)
a)
Vad är ett binärt sökträd (binary search tree). Hur skiljer det sig från en heap?
Kapitel 14.3 s 286 och framåt. Föreläsning 13
Det måste vara en specifik beskrivning i svaret (att bara säga att det är ett binärt träd med en ordning
och sen ge ett (korrekt) exempel räcker inte). Det måste framgå av ditt svar att du vet om den speciella
relationen mellan syskonen. Glöm inte heller tydligt beskriva skillnaden mot heapen.
b) Vad är en trie, illustrera ditt svar med ett exempel.
Kapitel 14.1 s 281 och framåt. Föreläsning 13
Glöm inte både att definiera en trie och ge ett exempel.
Uppgift 8 – grafer (4p)
Vad är en grannskapslista (adjacency list)? Illustrera ditt svar med ett exempel.
Kapitel 17, s337 och framåt. Föreläsning 11-12
Här måste man kunna beskriva detta med rätt terminologi (dvs för en nod i en graf är grannskapslistan en lista
med dess grannar) och sedan visa ett exempel på en graf och för varje nod i grafen vissa dess grannskapslista.
Många tror att grannskapslistan är den kö som används vid traversering av grafer vilket inte är samma sak.
Uppgift 9 – mängd (4p)
Förklara en enkel metod för att hitta om ett värde är medlem i en mängd (set). Illustrera ditt svar med ett
exempel.
Kapitel 13.2 s 267 och framåt. Föreläsning 11
Viktigt här att kommentera hur metoden hänger ihop med mängdens konstruktion.
Uppgift 10 – problemlösningsstrategier (3+1p)
a)
Förklara tre strategier för problemlösning.
Föreläsning 8
Vi har diskuterat tex brute force, greedy, divide and conquer, dynamisk programmering. Du ska
beskriva vad de heter och hur de fungerar.
b) Förklara begreppet överlappande delproblem (overlapping sub problems).
Föreläsning 8
Även här är det viktigt att vara noggrann i beskrivningen. Överlappande delproblem är identiska
delproblem som uppkommer på flera olika ställen i lösningen och där man inom dynamisk
programmering kan utnyttja detta genom att lösa dem en gång och sen lagra svaret i tex en tabell.