Datastrukturer och algoritmer
Föreläsning 16
Datastrukturer och algoritmer
Innehåll
VT08
 Snabbrepetition
 Exempeltentamen
 Kursvärdering
Datastrukturer och algoritmer
Mina målsättningar
 Rolig
och viktig kurs
 Bli en bättre programmerare och inse att man
blivit det
 Känna till kända lösningar på typiska problem
 Konstruera robusta och korrekta program
 Konstruera och beskriva algoritmer och datatyper
 Planera sitt arbete så att projekt blir klar i tid
 Förstå
 Tid och rum
 Bli
VT08
komplexitetsbegreppet
bättre på att kommunicera resultat
Datastrukturer och algoritmer
Innehållsöversikt
VT08
 Algoritmer
 Tids- och rumsfrågor
 Designprinciper
 Abstrakta
 Sökning
 Sortering
datatyper
Datastrukturer och algoritmer
Innehållsöversikt – Algoritmer
VT08
 Tids
och rumsfrågor
 Exekvering, implementering, underhåll
 Tid vs rumskomplexitet
 Analys av exekveringstider
o Olika sätt, vad de står för och +/– Experimentell
– Asymptotisk
o T(n) för en alg => O(n)
– Primitiva operationer
– Okulärbesiktning
o Att beskriva algoritmer
Datastrukturer och algoritmer
Innehållsöversikt – Algoritmer
VT08
 Designprinciper
 Idéer till 4 olika algoritmtyper
o Brute force, D&C, Greedy och dynamisk
programmering
o Exempel på varje
o +/o Typiska användningar
Datastrukturer och algoritmer
Innehållsöversikt
– Abstrakta Datatyper (ADT)
VT08


Stack, Kö, Listor, Träd, Graf, Prioritetskö, Heap, Tabell,
Sträng, Mängd, Sökträd, Tries, mm
Beskrivningssätt
 Organisation, Modell, Gränsytan (formell, informell)

Grundbegrepp
 Vad är en organisation, sorterad ADT, mm
 Primär vs. sekundär struktur
 Absolut vs. relativ komplexitet

Sätt att implementera
 +/-, när var hur
 Komplexitet för de viktigaste operationerna

Vart hittar vi ADT typiskt
 Hur olika ADT hänger ihop med varandra
 Algoritmer på ADT
Datastrukturer och algoritmer
Innehållsöversikt –
Sökning (traversering)
VT08
 Vad
är traversering
 Olika metoder för sökning i sekvenser
 Linjär & Binär
 +/ Ställer de några krav på implementationen av
ADTn?
Datastrukturer och algoritmer
Innehållsöversikt – Sortering
VT08
 Varför
sorterar vi?
 Sorterad ADT vs sortering av data
 Sökningen blir snabbare…ibland
 Hur
kan vi sortera (olika former)
 +/ När passar dom?
 Stabil sortering
 5-6
olika algoritmer, analys
Datastrukturer och algoritmer
Förväntade studieresultat (1)
VT08

Efter avslutad kurs ska studenten kunna:
 redogöra för grundläggande begrepp relaterade till
datastrukturer och algoritmer
 redogöra för organisation och specifikation för grundläggande abstrakta datatyper såsom lista, stack, kö, träd,
mängd, graf och tabell
 redogöra för grundläggande algoritmer, deras komplexitet
och karakteristiska egenskaper
 välja lämpliga datatyper och algoritmer för ett givet
problem
 välja och utföra lämpliga implementationer (konstruktioner) av de valda datatyperna och algoritmerna
Datastrukturer och algoritmer
Förväntade studieresultat (2)
VT08

Efter avslutad kurs ska studenten kunna:
 analysera enklare algoritmer praktiskt och teoretiskt med
avseende på prestanda
 använda sig av grundläggande problemlösningsstrategier
(som till exempel divide and conquer, brute force, greedy
och dynamisk programmering) på nya problem
 tillämpa de teoretiska kunskaperna och objektorienteringsparadigmen praktiskt på ett programmeringsprojekt,
dvs. konstruera en komplett programvara inklusive dokumentation (med systembeskrivning och webbaserad API)
utifrån givna riktlinjer
 utforma en enkel arbetsplan för ett programmeringsprojekt som utförs i grupp samt dokumentera, följa upp
och skriftligt utvärdera den gjorda planeringen.
Datastrukturer och algoritmer
Tentan
Ska kontrollera att de förväntade studieresultaten
uppfyllts.
 Definitionsfrågor

 Begrepp
 Definiera, beskriv, ge exempel, ...

 Visa hur en algoritm fungerar
 Vilken datatyp passar bäst för detta problem, varför?
 Jämför, analysera, förklara, ...

VT08
Förståelsefrågor
Resultaten kommer att skickas via mail (@cs.umu.se)
Datastrukturer och algoritmer
Exempeltenta 070531
VT08
 Enbart
skissartade svar
 dessa svar skulle inte ge full poäng på en
tentamen!
 Tanken
är att man ska få en hum vad som
krävs och se hur vi tänkte när vi rättade.
 Utöver kriterierna för varje uppgift gör man
som rättare alltid en helhetsbedömning (av
varje enskild uppgift och tentan i stort).
 40 p fördelat på 7 uppgifter
Datastrukturer och algoritmer
Uppgift 1 – sortering
(1 + 1 + 1 + 1 = 4p)
VT08
a)
b)
c)
d)
Vad innebär det att en sorteringsalgoritm är
stabil? Förklara med ett exempel på en
sekvens av värden före och efter sortering.
Ange två sorteringsalgoritmer som vi gått
igenom på kursen som är stabila.
Vad innebär det att en sorteringsalgoritm är
”in-place”?
Ange två sorteringsalgoritmer som vi gått
igenom på kursen som är ”in-place”.
Datastrukturer och algoritmer
a)
VT08
Vad innebär det att en sorteringsalgoritm är
stabil? Förklara med ett exempel på en
sekvens av värden före och efter sortering.
 Den inbördes relationen mellan två objekt med
samma nyckel bibehålls vid sortering.
[(0,L),(2,C),(5,G),(8,A),(10,G) ] =>
[(8,A),(2,C),(5,G) ,(10,G),(0,L)]
b)
Ange två sorteringsalgoritmer som vi gått
igenom på kursen som är stabila.
 Instickssortering, bubble sort, mergesort, bucket
sort, radix sort.
Datastrukturer och algoritmer
c)
VT08
Vad innebär det att en sorteringsalgoritm är
”in-place”?
 ” Konstant andel extra minne (motsv elementens
storlek)”.
 Inget extra minne som beror av n behövs för att
kunna sortera utan det räcker med ett minne
motsvarande ett element.
d)
Ange två sorteringsalgoritmer som vi gått
igenom på kursen som är ”in-place”.
 Instickssortering, selection sort, bubble sort,
quick-sort, (mergesort inte så vanligt!) radix
exchange sort (MSD radix sort)
Datastrukturer och algoritmer
Uppgift 2 – grafer (2 + 2 = 4p)
VT08
Berit Byggare håller på att bygga en sommarstuga. Hon har delat in projektet i följande
uppgifter:
1) skapa grunden
7) lägga golven
2) bygga ytterväggar
8) sätta in dörrar
3) bygga innerväggar
9) sätta in fönster
4) bygga skorstenen
10) lägga takplattor
5) bygga takstolarna
11) isolera ytterväggarna
6) måla innerväggar
12) flytta in.
Det finns vissa restriktioner kring ordningen hon kan utföra uppgifterna
 Grunden måste vara skapad innan man kan bygga ytterväggar och skorsten.
 För att kunna bygga takstolarna måste Berit först bygga ytterväggar och skorsten.
 Innerväggarna ska byggas senare än ytterväggarna.
 Fönstren sätts in efter det att ytterväggarna är byggda.
 Dörrarna sätts in efter det att innerväggarna är byggda.
 Golvet kan läggas först när takplattorna är lagda och innerväggarna är byggda.
 Berit kan lägga takplattorna först efter takstolarna är byggda.
 Isoleringen av ytterväggarna kan göras först när fönstren och dörrarna är insatta.
 Innerväggarna kan målas först när golvet är klart.
 Berit kommer inte att flytta in förrän innerväggarna är målade och ytterväggarna
isolerade.
Datastrukturer och algoritmer
Uppgift 2 – grafer (2 + 2 = 4p)
VT08
a)
representera restriktionerna ovan som en
riktad graf där noderna representerar uppgifter
och kanterna deras ordning. Grafen får inte
introducera ytterligare direkta restriktioner än
de som nämns ovan. (Använd de givna
numren för att numrera noderna.)
Datastrukturer och algoritmer
• Grunden måste vara skapad innan man kan bygga ytterväggar och
skorsten.
• För att kunna bygga takstolarna måste Berit först bygga ytterväggar och
skorsten.
• Innerväggarna ska byggas senare än ytterväggarna.
• Fönstren sätts in efter det att ytterväggarna är byggda.
• Dörrarna sätts in efter det att innerväggarna är byggda.
• Golvet kan läggas först när takplattorna är lagda och innerväggarna är
byggda.
• Berit kan lägga takplattorna först efter takstolarna är byggda.
• Isoleringen av ytterväggarna kan göras först när fönstren och dörrarna är
insatta.
• Innerväggarna kan målas först när golvet är klart.
• Berit kommer inte att flytta in förrän innerväggarna är målade och
ytterväggarna isolerade.
4
10
5
1
2
6
8
3
VT08
7
9
11
12
Datastrukturer och algoritmer
Uppgift 2 – grafer (2 + 2 = 4p)
VT08
Visa i vilken ordning noderna besöks om
man startar i nod (1) och gör en djupet-först
sökning där man, om man har ett val, alltid
väljer noden med lägst nummer.
b)
4
10
5
2
6
8
3
1
7
9
1, 2, 3, 7, 6, 12, 8, 11, 5, 10, 9, 4
11
12
Datastrukturer och algoritmer
Uppgift 3 – algoritmer och heap (4p)
VT08
När meddelanden skickas mellan två datorer via ett nätverk händer det att de kommer fram i fel ordning d.v.s. om ett meddelande
m1 sänds före ett annat meddelande m2 så kan det inträffa att m2
kommer fram före m1. Detta beror på att meddelandena sänds via
routrar som håller reda hur meddelandena skall skickas för att
komma snabbast fram. Denna information uppdateras dynamiskt
eftersom datorer tillkommer och utgår ur nätverket. Det kan då
inträffa att när m2 sänds har en bättre väg dykt upp och därför
kommer m2 fram tidigare.
I många tillämpningar är det viktigt att meddelanden behandlas
(t ex visas) i den ordning de sänts. Om de kommer fram i fel ordning måste mottagande dator se till att spara undan meddelanden
i avvaktan på att det meddelande man förväntade sig kommer.
Datastrukturer och algoritmer
Uppgift 3 – algoritmer och heap (4p)
VT08
Exempel
Om vi tänker oss att meddelandena är numrerade så förväntar man sig först ett meddelande med nummer 1.
Om vi antar att meddelandena anländer till datorn i
följande ordning: 2, 3, 5, 1, 4 så kommer 2, 3 och 5 att
sparas undan vid sin ankomst (eftersom man väntar
meddelande 1). När meddelande 1 kommer kan det behandlas och man behandlar då även så många meddelanden som möjligt i sekvens av dem man sparat
undan; i detta fall meddelandena 2 och 3. Man förväntar
sig därefter meddelande 4. När detta kommer kan det
behandlas och det sparade meddelandet med nummer 5
kan sedan också behandlas.
Datastrukturer och algoritmer
Uppgift 3 – algoritmer och heap (4p)
VT08
Uppgift
För att spara undan meddelanden som inte kan behandlas direkt vid ankomst kan tex en min-heap (dvs en heap
som alltid har det minsta värdet i roten) användas. Prioriteten (nyckeln) för elementen i heapen är meddelandets nummer. Visa hur heapen kommer att se ut efter
varje mottaget meddelande om följande sekvens mottages: 7, 2, 6, 3, 1, 5, 4. Observera att du skall följa
beskrivningen i exemplet ovan dvs. när ett meddelande
anländer läggs det i vissa fall in i heapen och i andra fall
tar man bort ett antal meddelanden ur heapen. Det ska
tydligt framgå vad som sker när element sätts in och tas
bort ur heapen.
Meddelande
Heapens utseende
7
Vad händer?
Vi förväntar oss ett meddelande
märkt 1. Stoppa in 7 i heapen.
7
Vi förväntar oss ett meddelande
märkt 1. Stoppa in 2 i heapen.
Stoppa in elementet på den första
”lediga” platsen i heapen.
Bubbla uppåt tills det hamnat
rätt
2
7
2
2
7
6
Vi förväntar oss ett meddelande
märkt 1. Stoppa in 6 i heapen.
Stoppa först in elementet på den
första ”lediga” platsen i
heapen. Det hamnade rätt
direkt!
2
7
3
6
2
7
3
2
3
6
7
6
Vi förväntar oss ett meddelande
märkt 1. Stoppa in 3 i heapen.
Stoppa först in elementet på den
första ”lediga” platsen i
heapen. Bubbla uppåt tills det
hamnat rätt.
1
2
3
3
6
7
6
7
3
6
7
6
7
5
6
7
5
5
7
6
Nu fick vi meddelande 1.
Behandla det.
Sen ser vi att meddelande 2 finns
lagrat. Ta ut det ur heapen och
behandla det.
Ta först bort 2 ut heapen och
ersätt det med elementet på ”sista
plats” (7). Låt detta sedan bubbla
nedåt på rätt plats.
Vi ser att även 3 finns på heapen.
Ta ut det ur heapen och behandla
det.
Ta först bort 3 ut heapen och
ersätt det med elementet på ”sista
plats” (6). Låt detta sedan bubbla
nedåt på rätt plats. (Det är redan
på rätt plats!)
Vi förväntar oss ett meddelande
märkt 4. Stoppa in 5 i heapen.
Stoppa först in elementet på den
första ”lediga” platsen i heapen
och låt det sedan bubbla uppåt
tills det hamnat rätt
Nu kommer meddelande 4.
Behandla det.
Vi ser att meddelande 5 finns på
heapen, ta bort och behandla det.
Ta först bort 5 ut heapen och
ersätt det med elementet på ”sista
plats” (6). Låt detta sedan bubbla
nedåt på rätt plats. (Det är redan
på rätt plats!)
4
5
6
7
6
6
7
7
Vi ser meddelande 6 på heapen,
tar bort och behandlar.
Till sist tar vi bort meddelande 7
ur heapen och behandlar det.
7
Nu är heapen tom och inga fler meddelanden dyker upp. Uppgiften är klar.
Datastrukturer och algoritmer
Uppgift 4 – komplexitetsanalys
(2 + 2 + 2 = 6p)
VT08
Betrakta följande algoritm:
for i = 1 to n
for j = 1 to i
doSomething(n)
end
end
a)
b)
c)
Hur många gånger (exakt) anropas doSomething (Uttryck ditt svar med
avseende på n)?
Om doSomething har en komplexitet O(nlog(n)) där n är argumentet till
funktionen. Vad har då algoritmen ovan som helhet för komplexitet? (Du
behöver inte ange c och n0.)
Ordo-begreppet säger något om en funktions asymptotiska beteende. I
analys av algoritmer används begreppet för att tala om hur antalet
operationer växer med storleken på indata. På vilket sätt kan ordobegreppet vara ett missledande mått för hur snabb en algoritm är?
n
i
Datastrukturer och algoritmer
i 1
Betrakta följande algoritm:
for i = 1 to n
for j = 1 to i
doSomething(n)
end
end
a)
Hur många gånger (exakt) anropas doSomething (Uttryck
ditt svar med avseende på n)?
 Borde ha funderat på detta i OU4!
 Man kan prova sig fram, om n = 5 så ser man att loopen
körs 1+2+3+4+5 = 15 ggr.
 Provar man med lite olika siffror
så inser man att loopen
n
körs lika många gånger som  i
i 1
 Denna summa är välkänd och det borde också vara
välkänt att summans värde blir n*(n+1)/2.
VT08
Datastrukturer och algoritmer
VT08
b)
Om doSomething har en komplexitet O(nlog(n))
där n är argumentet till funktionen. Vad har då
algoritmen ovan som helhet för komplexitet? (Du
behöver inte ange c och n0.)
n * (n  1) * n log( n) n log( n)  n log( n)

2
2
3
2
Datastrukturer och algoritmer
VT08
c)
Ordo-begreppet säger något om en funktions
asymptotiska beteende. I analys av algoritmer
används begreppet för att tala om hur antalet
operationer växer med storleken på indata. På
vilket sätt kan ordo-begreppet vara ett missledande
mått för hur snabb en algoritm är?
Stora konstanter döljs av förenklingen: exempelvis
är 10000n en linjär algoritm. Den är ju dock
knappast bättre (för små värden på n) än en
algoritm som kräver 7n2 steg, trots att den senare
ju är kvadratisk.
Datastrukturer och algoritmer
Uppgift 5 – begrepp och definitioner
(6 p)
VT08
 Para
ihop beskrivningarna med rätt begrepp.
Svara på separat papper på formen 1-A, 2-C
osv. Varje korrekt svar ger 1p och varje
felaktigt ger -1p. Inget svar alls ger 0p. Du kan
inte få negativt antal poäng på uppgiften.
1-K
2-M
3-G
4-L
5-N
6-B
Datastrukturer och algoritmer
VT08
Uppgift 6 – träd
(1 + 1 + 2 + 4 = 8p)
a)
b)
c)
d)
Rita ett komplett binärt träd som innehåller exakt 6 noder.
Stoppa in olika värden i varje nod.
Vad är det för skillnad på ett komplett och ett fullt binärt träd?
Rita en array med 6 platser och visa vart var och en av de sex
noderna skulle ligga om det binära trädet var implementerat
som en array på det sätt som diskuterats på kursen.
Då ett träd traverseras inorder fås noderna i följande sekvens:
M, B, K, H, Q, F, Z
Traverseras samma träd preorder får man istället noderna i
ordningen:
K, B, M, Z, Q, H, F
Din uppgift är att rita trädet. Visa och motivera vad du gör!
Datastrukturer och algoritmer
Uppgift 6 – träd
VT08
a)
Rita ett komplett binärt träd som innehåller exakt 6 noder.
Stoppa in olika värden i varje nod.
2
3
7
b)
6
1
4
Vad är det för skillnad på ett komplett och ett fullt binärt träd?
Ett komplett träd fyller en nivå i trädet från vänster till höger
innan de går vidare till nästa.
Ett fullt träd får man om varje nod i det binära trädet antingen
har 0 eller 2 barn. Ett fullt binärt träd kan ha dålig balans.
Datastrukturer och algoritmer
Uppgift 6 – träd
VT08
c)
Rita en array med 6 platser och visa vart var och en av de
sex noderna skulle ligga om det binära trädet var
implementerat som en array på det sätt som diskuterats på
kursen.
2
3
6
7
1
4
Datastrukturer och algoritmer
Uppgift 6 – träd
VT08
d)
Då ett träd traverseras inorder fås noderna i följande sekvens:
M, B, K, H, Q, F, Z
Traverseras samma träd preorder får man istället noderna i ordningen:
K, B, M, Z, Q, H, F
Din uppgift är att rita trädet. Visa och motivera vad du gör!
Vi vet att K är rotnoden, eftersom den är först i preorderutskriften
(sätt in i trädet).
(Italics visar vilka element vi redan ”behandlat” och satt in i trädet.)
Inorder: M, B, K, H, Q, F, Z
Preorder: K, B, M, Z, Q, H, F
K
Vi söker då åt K i inorderutskriften. Det som är till vänster i inorder
K
kommer att ha roten K, eftersom det är den andra nod att besökas /
preorder (koppla in som vänster delträd till K).
B
Inorder: M, B, K, H, Q, F, Z
Preorder: K, B, M, Z, Q, H, F
Datastrukturer och algoritmer
VT08
I inorder-delsträngen MBK ser vi att B:s vänstra delträd består av
K
M, vilket även är nästa nod att besökas preorder (sätt in som
/
vänster delträd till B)
B
Inorder: M, B, K, H, Q, F, Z
/
Preorder: K, B, M, Z, Q, H, F.
M
Nästa nod att besöka i preorder är Z vilken antingen kan vara Bs
högra barn eller K:s högra barn. Vi ser att
inordertraverseringen blir felaktig om Z är barn till B så vi
placerar in det som högerbarn till K.
Inorder: M, B, K, H, Q, F, Z
Preorder: K, B, M, Z, Q, H, F.
Detta måste leda till att sekvensen HQF i inorderserien är ett
vänsterdelträd till Z (annars kan inte Z komma sist i inorder).
Eftersom Q kommer efter Z i preorder placerar vi in Q som
rot med H resp F som vänster resp höger barn.
K
/ \
B Z
/
M
K
/ \
B Z
/
/
M Q
/ \
H F
En kontroll av inorder och preorder-traverseringen ger att vi fått ett korrekt
träd.
Datastrukturer och algoritmer
Uppgift 7 – datatyper (4 + 3 + 1 = 8p)
VT08
a)


Beskriv datatypen Stack med modell och informell
gränsyta på det sätt som görs i boken.
Modell: En papperstrave, man kan bara lägga in
nya element överst och läsa av och ta bort element
från toppen.
abstract datatype Stack(val)
Empty () → Stack(val)
Push (v:val,s:Stack(val)) → Stack(val)
Top (s:Stack(val)) → val
Pop (s:Stack(val)) → Stack(val)
Isempty (s:Stack(val)) → Bool
Uppgift 7 – datatyper (4 + 3 + 1 = 8p)
Datastrukturer och algoritmer
b)
Beskriv i pseudokod hur man beräknar djupet på en stack
(utan att stacken ändrats efter ett anrop till algoritmen) med
hjälp av gränsytan i a).
Algorithm Depth (s)
Input: A Stack s
Output: The number of elements in the Stack
depth = 0
tmp = empty()
while not isEmpty(s) do
depth++
push(top(s),tmp)
pop(s)
while not isEmpty(tmp) do
push(top(tmp),s)
pop(tmp)
VT08
return depth
Datastrukturer och algoritmer
Uppgift 7 – datatyper (4 + 3 + 1 = 8p)
VT08
c)
Är b) en effektiv lösning? Varför/varför inte?
Kan du komma på ett annat sätt att lösa
problemet (du behöver inte skriva
psudokod).
Inte effektiv, beroende av n.
Lagra djupet som ett attribut
Uppgifter från en annan tenta
Datastrukturer och algoritmer
Uppgift 2 - 13p (4+6+1+2)
VT08
Du arbetar på ett företag som skall konstruera ett system
på uppdrag av SMHI. SMHI samlar dagligen in fakta
från alla världens väderstationer till en stor databas som
innehåller följande: namn (på väderstationen),
temperatur, luftfuktighet och vindstyrka samt longitud
och latitud (för platsen). Meteorologerna vill kunna
sortera datat på godtyckligt fält i databasen. Det är
extremt viktigt att programmet är snabbt för att man
ska kunna göra en tillförlitlig prognos. Samtidigt är
applikationen tänkt att köras på handdatorer därför är
minnesutrymmet begränsat.
Datastrukturer och algoritmer
Uppgift 2 - 13p (4+6+1+2)
VT08
a)
b)
c)
d)
Föreslå en lämplig sorteringsalgoritm som klarar av
kraven på bästa sätt, motivera och redovisa ditt val.
(Om du måste ge avkall på något av kraven för att
kunna leverera systemet i tid så motivera varför).
Föreslå en lämplig standarddatatyp, beskriv
datatypen med modell, organisation, informell
gränsyta samt implementation.
Motivera ditt val av implementation.
Skriv en algoritmbeskrivning (pseudokod) för den
valda sorteringen, där du utnyttjar
gränsyteoperationerna.
Datastrukturer och algoritmer
a) Föreslå sorteringsalgoritm
VT08

Denna del får poäng efter hur mycket man
har med i sin beskrivning:
 Nämna en algoritm överhuvutaget
 Nämna rätt algoritm (i detta fall in-place
quicksort eller ev. radix exchange sort)
 Diskutera minnesåtgång för vald algoritm
 Diskutera snabbhet för vald algoritm
 Nämna minst en annan algoritm som jämförelse
och nämna dess minnesåtgång och snabbhet
Datastrukturer och algoritmer
b) Föreslå och beskriv en datatyp

Även här ges poäng efter vad och vilka saker man tar upp




Modell
Organisation
Implementation
Gränsytan
o
o
o

Korrekta metoder
Korrekta parametrar
Beskrivning av metoderna
De vanligaste (och bästa) valen är lista eller fält.
 Väljer man tabell får man avdrag eftersom man inte kan sortera en tabell.

I gränsytan behöver man inte ange exakt rätt namn på metoderna
 Blandar man ihop metoder och tar tabellmetoder i listan eller tvärtom så ger
det avdrag.
 Likaså om man inte har med alla parametrar eller inte beskriver vad metoden
ska göra.

Med implementation avses hur man väljer att realisera sin datatyp.
 Tex Lista kan man välja att implementera som array eller länkad lista.
VT08
Datastrukturer och algoritmer
c) Motivera val av implementation
VT08
 Här
ska man motivera sitt val av
implementation och förklara varför man tex
valt en array och inte en lista.
 Om man i a) har sagt att databasen varierar i
storlek bör man motivera en dynamisk datatyp
här.
Datastrukturer och algoritmer
d) Ge en algoritmbeskrivning
VT08
 Här
finns det två tydliga krav:
 algoritmen ska skrivas i pseudokod
 man ska använda sig av gränsyteoperationerna
från b)
Datastrukturer och algoritmer
Uppgift 5 - 7p (4+2+1)
VT08
Sätt in följande tal (i given ordning) i en hashtabell: 3,
4, 29, 16, 42, 6, 55, 0, 13, 2, 26, 130, och 19.
a) Använd hashfunktionen h(x)= x mod y, välj ett
lämpligt y. Gör detta både för öppen hashing och
sluten hashing. För sluten hashing, använd linjär
teknik (linear probing) för att hantera kollisioner.
Redogör på ett tydligt sätt för alla kollisioner som
uppkommer.
b) Motivera valet av y i hashfunktionen!
c) Hur kan man gå till väga om det var namn på
personer (anders, bo, aron, arne, östen, sune, bertil,
david, åsa, nisse, karin, berit, ada) som skulle lagras
i hashtabellen? Förklara principen, dvs du behöver
inte skapa hashtabellen?
Datastrukturer och algoritmer
Sluten hashing:
VT08

Fyllnadsgraden ska inte överstiga 75 % och y ska
vara ett primtal för att få bättre spridning.
 Ett lämpligt y kan då i detta fall vara 17.
Vid sluten hashing är hashtabellen en cirkulär vektor
och när man använder linjär probing vid kollisioner
sätter man in elementet på första lediga plats.
 3%17 = 3, 4%17 = 4, 29%17 = 12, 16%17 = 16,
42%27 = 8, 6%17 = 6, 55%17 = 4, 0%17 = 0, 13%17
= 13, 2%17 = 2, 26%17 = 9, 130%17 = 11, 19%17 =
2

Datastrukturer och algoritmer
Öppen hashing:
VT08
Tabellen är en vektor av lista
 Hashtabellen ska ha max fyllnadsgrad 2*y, där y är
storleken på hashtabellen.

 I detta fall räcker det med y = 7.
Datastrukturer och algoritmer
Kursvärdering
VT08
 Värderingen
är öppnad och ni ska ha fått mail
med lösenord och information.
 Den är öppen fram till och med 13/6.