Innehåll
Datastrukturer och
algoritmer
• Algoritmer och Pseudokod som ett sätt att
beskriva dem.
• Algoritmmönster för lista.
• Olika sätt att konstruera lista och riktad
lista.
Föreläsning 3
Algoritmer och Listor
48
49
Algoritmer
Algoritm?
• Vad är det?
• Mer formellt om algoritmer
• Recept som man
följer för att lösa ett
givet problem på ett
strukturerat sätt
• Ändlig stegvis
beskrivning av en
ändlig process
– beräkningsbarhet
• Att beskriva algoritmer
• Analysera algoritmer
– Exekveringstid, minnesåtgång….
Recept
50
Algoritm?
• Texten som
beskriver algoritmen
är fix stor
• Processen kan
variera i storlek
• Kornighet i en
algoritm
Bullar
52
Bullar
Exempel
•
Ugn,
plåtar, etc
Ugn,
plåtar, etc
51
Ingredienser
Recept
Ingredienser
Antag att vi har en lista på alla anställda på ett företag:
Namn, Pnr, lön, etc. Vi vill räkna ut lönekostanden för
företaget.
1.
Skriv ner talet 0
2.
Gå igenom listan, och för varje anställd
så adderar man du personens lön till det
skrivna talet
När man nått slutet på
listan så är det ned
skrivna talet resultatet
3.
53
Algoritmer mer formellt
Krav på algoritmer
• Ändlighet
Definition:
– Algoritmen måste sluta
• Bestämdhet
Algoritm är en noggrann plan,
en metod för att stegvis utföra något
– Varje steg måste vara entydigt
• Indata
23. Donald Knuth
– Måste ha noll eller flera indata
• Utdata
– Måste ha ett eller flera utdata
• Effektivitet/Genomförbarhet
– Varje steg i algoritmen måste gå
att utföra på ändlig tid
54
Algoritmer mer formellt
55
Att (be)skriva algoritmer
• Algoritmiska problem & beräkningsbarhet
– En klass av problem
– Beräkningsbar omm det finns en Turingmaskin
som löser problemet
Turing maskin
• Vi behöver ett språk som:
– Är strukturerat och formellt
– Mindre formellt än programmeringsspråk
• Ingen typning
• Dynamisk bindning
• Räckvidd
56
57
Pseudokod – programkonstruktioner
Pseudokod
• Besluts strukturer:
if…then…[else…]
• Villkorsloopar:
while…do
repeat … until…
• Räkneloopar:!
for…do
• Anrop:
algoritmName(args)
A[i]
• Arrayindexering:
A[i]
• Returnera värden:
return value
• Mix av naturligt språk och
programmeringsspråk
• Influenser från matematisk notation
← används för tilldelning
= används för likhetsrelationen
• Funktionsdeklaration
– Algorithm name(param1,param2)
58
59
Pseudokod – exempel
Pseudokod
Algorithm arrayMean(v,n)
input: An array v storing n integers
output: The average of the n elements
in v
sum ← v[0]
for i ← 1 to n-1 do
sum ← sum + v[i]
return sum/n
• Vi använder oss av pseudokod för att
beskriva algoritmer
• Det finns inget universellt språk utan många
dialekter
• Alla döljer mycket av programspråkens
designval, dvs. pseodokoden är
programspråksoberoende
13
Algoritmmönster för lista
• Traversering
61
Algoritmmönster för lista
• Reduktion
– Beräknar en funktion av objektets elementvärden
– Besöker systematiskt alla element
• Ex. Summera alla tal i en lista
• Sökning
– Söker det första elementet som uppfyller ett
bestämt villkor
• Filtrering
• Mappning
– Transformera varje elementvärde i en datastruktur
• Ex. multiplicera alla talen i
! en lista med 4
– Filtrerar ut alla element som uppfyller ett
bestämt villkor
62
63
Sätt att konstruera lista
Lista som Fält
• Lista
• Fördelar
– Lista som fält
– Lista konstruerad med 2-Cell
– Snabb inspektion av element
• Fast bara om man utnyttjar att man vet hur position
är implementerad vilket man inte borde göra
• Nackdelar
– Fast reserverat utrymme
• Går delvis att komma runt genom att skapa en ny
större array vid behov (detta är dock kostsamt)
• Kostsamt sätta in / ta bort element
64
65
Länkade strukturer
Dubbellänkad Lista
• Fördelar
• Länkar mellan elementen
• Elementen är en cell som består av länkar
och värde
– Insättning / borttagning går snabbt
– Minnesutrymmet är proportionellt mot
storleken
– Allokerar minne när det behövs
• Nackdelar:
– Länkarna behöver också minnesutrymme
– Kommer bara åt listelement genom att
traversera från listans början eller slut 66
Riktad Lista
67
Enkellänkad Lista
• Konstruerad som
• Problem vid insättning
• Lösning:
– Fält
– Dubbellänkad Lista
– Enkellänkad Lista
– Representera position mha en länk till
föregångarelementet
– Listhuvud
• Enkellänkad Lista
• Tomma objekt
• Gränspositioner
– Mer ekonomisk
68
Enkellänkad Lista
n-länkad Cell
• Konstruktion utan huvud
• Tippel som består av
– Stopplänkvärde (nil, null)
– Insättning före elementet X
•
•
•
•
69
– ett värde
– n stycken länkar
Skapa en ny cell
Sätt in den efter X
Kopiera X:s värde till den nya cellen
Sätt X:s värde till v
• Byggmaterial för andra datatyper
• n-länkad struktur
– Objekt konstruerade med n-länkade celler
• Listor, träd
70
71
Gränsyta till 1Cell
1Cell i C
typedef struct Cell{
DATA data
1Cell(val)
! Create () -> 1Cell(val)
Set-value(v:val,c:1Cell(val)) -> 1Cell(val)
struct Cell *next
} Cell;
Set-Link (l:Link(1Cell(val)),c:1Cell(val)) ->
1Cell(val)
Inspect-value (c:1Cell(val))-> val
Inspect-link (c:1Cell(val))-> Link(1Cell(val))
Kill (c:1Cell(val))
72
73