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