Datastrukturer och algoritmer (Python) Algoritmer och listor

Relevanta dokument
Datastrukturer och algoritmer

Datastrukturer och algoritmer

Datastrukturer och algoritmer

Datastrukturer och algoritmer

Datastrukturer och algoritmer

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Datastrukturer och algoritmer

Datastrukturer och algoritmer

Datastrukturer. föreläsning 3. Stacks 1

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Datastrukturer och algoritmer

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Datastrukturer och algoritmer. Innehåll. Tabell. Tabell - exempel. Gränsyta till Tabell. Tabell. Modell. Hashtabell Relation, lexikon.

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Dugga Datastrukturer (DAT036)

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Föreläsning 2 Datastrukturer (DAT037)

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

Dagens föreläsning Programmering i Lisp Fö 5

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Datastrukturer och algoritmer

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Innehåll. F7: Tabell, hashtabell, relation & lexikon. Gränsyta till Tabell. Tabell. Tabell Hashtabell Relation Lexikon.

Föreläsning Datastrukturer (DAT037)

Föreläsning 4 Innehåll

maxlist-1. Indexerad lista Länkad lista

Länkade strukturer. (del 2)

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

Föreläsning 8 Datastrukturer (DAT037)

Abstrakta datatyper Laboration 2 GruDat, DD1344

Grundläggande Datalogi

Föreläsning 2 Datastrukturer (DAT037)

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Fredag 10 juni 2016 kl 8 12

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

Föreläsning Datastrukturer (DAT036)

Tentamen i Algoritmer & Datastrukturer i Java

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen Datastrukturer (DAT036)

Föreläsning 6: Introduktion av listor

Exempeltenta GruDat 2002/2003

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Föreläsning Datastrukturer (DAT036)

Tommy Färnqvist, IDA, Linköpings universitet. 1 ADT Map/Dictionary Definitioner Implementation... 2

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning Datastrukturer (DAT036)

Föreläsning 3. Stack

Datastrukturer och algoritmer

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Sätt att skriva ut binärträd

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036)

Övning 1 - Abstrakta datatyper

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Samlingar, Gränssitt och Programkonstruktion! Förelasning 11!! TDA540 Objektorienterad Programmering!

Tentamen Datastrukturer (DAT036)

Tentamen i Introduktion till programmering

Föreläsning 2. Stackar, köer och listor TDDC91,TDDE22,725G97: DALG. Innehåll. 1 ADT stack. 1.1 Tillämpningar

Repetition av OOP- och Javabegrepp

Föreläsning 3. Stack

Pascal. Vi har ofta behov av att behandla klumpar av data som i sig är inhomogena men sett över ett helt register har klumparna lika struktur.

Poster... Poster. Poster... Poster...

Repetition av OOP- och Javabegrepp

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet

Grundläggande datalogi - Övning 4

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 8 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Funktionell programmering DD1361

Datastrukturer och algoritmer

Poster. Vi har ofta behov av att behandla klumpar av data som i sig är inhomogena men sett över ett helt register har klumparna lika struktur.

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Sökning och sortering

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

Lösningar Datastrukturer TDA

2 Modul 2 - (Länkade) Listor

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 8 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 9 Innehåll

Föreläsning Datastrukturer (DAT036)

Problemlösning. Planering av program. Konstruktion. Programmeringsmetaforer. Problemlösning. Programmering = Problemlösning

Erfarenheter från labben

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

TDIU01 - Programmering i C++, grundkurs

Datastrukturer och algoritmer. Föreläsning 15 Inför tentamen

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

1 Klasser och objektorientering Vad är objektorientering?

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Transkript:

Datastrukturer och algoritmer (Python) Algoritmer och listor 1

Innehåll Algoritmer och pseudokod som ett sätt att beskriva dem. Abstrakta datatypen lista och algoritmmönster för lista. Olika sätt att konstruera lista och riktad lista. 2

Algoritmer Vad är det? Mer formellt om algoritmer beräkningsbarhet Att beskriva algoritmer Analysera algoritmer Exekveringstid, minnesåtgång 3

Vad är en algoritm? 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 Recept Ingredienser Bullar Ugn, plåtar, etc 4

Algoritm? Texten som beskriver algoritmen är fix stor Receptet har samma storlek oavsett hur många bullar som bakas. Processen kan variera i storlek Antalet bullar som bakas kan variera. Kornighet i en algoritm Grovkornig: 1. Blanda mjöl och bakpulver i en skål. Finkornig: 1. Ta fram en skål som rymmer 5l 2. Ta fram ett decilitermått 3. Mät upp X dl mjöl 4. Häll mjölet i skålen. Recept Ingredienser Bullar Ugn, plåtar, etc 5

Exempel 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 3. När man nått slutet på listan så är det nedskrivna talet resultatet 6

Algoritmer mer formellt Definition: Algoritm är en noggrann plan, en metod för att stegvis utföra något 7

Krav på algoritmer Ändlighet Algoritmen måste sluta Bestämdhet Varje steg måste vara entydigt Indata 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 23. Donald Knuth 8

Algoritmer mer formellt Reglerna för algoritmer beskriver inte tillräckligt tydligt vad det är man kan göra i form av algoritmer vad som är beräkningsbart. Definition av beräkningsbarhet: Ett problem är beräkningsbart omm det finns en Turingmaskin som löser problemet. Turing maskin 9

Att (be)skriva algoritmer Vi behöver ett språk som: Är strukturerat och formellt Mindre formellt än programmeringsspråk Ingen typning Dynamisk bindning Räckvidd 10

Pseudokod 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) 11

Pseudokod programkonstruktioner Valstrukturer: if then [else ] Villkorsloopar: while do repeat until Räkneloopar: for do Anrop: algoritmname(args) Arrayindexering: A[i] Returnera värden: return value 12

Pseudokod exempel 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 13

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

Implementation av pseduokoden i två olika språk C float arraymean(float *v, int n){ float sum = v[0]; for (int i = 1; i < n; i++) sum = sum + v[i]; return sum/n; } Python def arraymean(v,n): sum = v[0] for i in range(1,n): sum = sum + v[i] return sum/n 15

Lista Generisk datatyp (polytyp) Lista av typ Typ kan vara av vilken typ som helst Instansiering: ger typparametern ett värde tex Lista av Heltal som fortfarande är en ADT Homogen datatyp Alla element har samma typ Ex på listtyper lista av heltal (3 12 7 23 5) lista av tecken ( a, r, t ) lista av (lista av heltal) ((5 27 18) (43 5) (2 0 9)) 16

Lista Modell Pärm Bläddra, inspektera, lägga till, ta bort Konstruktion Dynamiskt med hjälp av länkade celler Dynamisk datatyp: Kan modifiera objektets struktur (storlek) Statiskt med hjälp av fält/arrayer 17

Lista Ändligt antal linjärt ordnade element Första / sista element Före / efter relation Dynamisk datatyp Struktur och storlek förändras under datatypens livslängd 18

Lista Element Värde och position Struktur Bortser från elementvärden Position Plats i strukturen positionsbeskrivningar förändras när element sätts in eller tas bort positionen är elementets förhållande till objektet i övrigt hur man anger positioner avgörs vid konstruktionen av datatypen. strukturförändrande operationer behöver returnera nytt positionsvärde 19

Riktad Lista Modell Slalombana Kan bara flytta sig framåt Specialisering av Lista 20

Gränsyta till Riktad Lista abstract datatype DList(val) auxiliary pos Empty() -> DList(val) Insert(v:val,p:pos,l:DList(val)) ->(DList(val),pos) Isempty (l:dlist(val)) -> Bool Inspect (p:pos,l:dlist(val)) -> val First (l:dlist(val)) -> pos Isend (p:pos,l:dlist(val)) -> Bool Next(p:pos,l:DList(val)) -> pos Remove((p:pos,l:DList(val)) ->(DList(val),pos) 21

Dynamiska resurser Skapar dataobjekt för tillfälliga behov Kill- lösgör resurser Create - reserverar resurser Vålnader minne som är avallokerat, men som vi fortfarande refererar till Sophämtning Administrativ procedur identifierar och återvinner objekt som inte utnyttjas I Python behöver programmeraren inte hantera skapande och återlämnandet. Det sköts internt av Python Har en egen minnespool så att kommunikationen med operativsystemet minimeras. 22

Länk Referens, pekare Fysisk datatyp i många programspråk Objekt som refererar till annat objekt Konstrueras oftast som index i fält (kursor) Billigare kopiera länkar till objekt än objekten själva 23

Gränsyta till Länk Abstract datatype Make Nil Isnil Follow Equal Link (obj) (x : obj) -> Link (obj) ( ) -> Link (obj) (l : Link (obj)) -> Bool (l : Link (obj)) -> obj (l1,l2 : Link (obj)) -> Bool 24

Gränsyta till Lista abstract datatype List(val) auxiliary pos Empty() -> List(val) Insert(v:val,p:pos,l:List(val))->(List(val),pos) Isempty (l:list(val)) -> Bool Inspect (p:pos,l:list(val)) -> val First (l:list(val)) -> pos End (l:list(val)) -> pos Next(p:pos,l:List(val)) -> pos Previous(p:pos,l:List(val)) -> pos Remove((p:pos,l:List(val)) ->(List(val),pos) 25

Skillnad mellan Lista och Riktad lista I Lista finns previous- och endoperationer så att vi kan navigera åt båda hållen Riktad lista har en isend operation istället för end. 26

Algoritmmönster för lista Traversering Besöker systematiskt alla element Sökning Söker det första elementet som uppfyller ett bestämt villkor Filtrering Filtrerar ut alla element som uppfyller ett bestämt villkor 27

Algoritmmönster för lista Reduktion Beräknar en funktion av objektets elementvärden Ex. Summera alla tal i en lista Mappning Transformera varje elementvärde i en datastruktur Ex. multiplicera alla talen i en lista med 4 28

Traversering Algorithm traverse(list, myfunc) input: A list and a function to apply to all elements in a list output: Besöker systematiskt alla element pos first(list) while not isend(list, pos): func(inspect(list, pos)) pos next(list, pos) def traverse(list, func): pos = list.first() while not list.isend(pos): func(list.inspect(pos)) pos = list.next(pos) 29

Sökning Algorithm seek(list, func) input: A list and a function to compare an element with the one we seek output: Söker efter ett element found False pos first(list) while not found and not isend(list, pos) if func(inspect(list, pos)) then found True foundpos pos else pos next(listpos) if found then return (True, foundpos) else return (False, None) 30

Filtrering Algorithm filter(list, func) newlist empty() pos first(list) while not isend(list, pos) val inspect(list, pos) if func(val) then insert(newlist, first(newlist), val) pos next(list, pos) return newlist 31

Reduktion Algorithm reduce(list, func) pos = first(list) val1 = inspect(list, pos) pos = next(list, pos) val2 = inspect(list, pos) pos = next(list, pos) res = func(val1, val2) while not list.isend(pos): res = func(res, inspect(list, pos)) pos = next(list, pos) return res 32

Mapping Algorithm map(list, func) newlist empty() pos first(list) while not isend(list, pos) val func(inspect(list, pos)) insert(newlist, first(newlist), val) pos next(list, pos) return newlist 33

Sätt att konstruera lista Lista Lista som fält Lista konstruerad med 2-Cell 34 34

Lista som Fält Fördelar 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 Måste flytta delar av listan framåt eller bakåt för att rymma det nya elementet. 35

Länkade strukturer Fördelar 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 36

Dubbellänkad Lista Länkar mellan elementen Elementen är en cell som består av länkar och värde 37

Riktad Lista Konstruerad som Fält Dubbellänkad Lista Enkellänkad Lista Enkellänkad Lista Mer ekonomisk 38

Enkellänkad Lista Problem vid insättning Lösning: Representera position mha en länk till föregångarelementet Listhuvud Tomma objekt Gränspositioner 39

Enkellänkad Lista Konstruktion utan huvud Stopplänkvärde (nil, null) Insättning före elementet X 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 40

n-länkad Cell Tippel som består av ett värde n stycken länkar Byggmaterial för andra datatyper n-länkad struktur Objekt konstruerade med n-länkade celler Listor, träd 41

Gränsyta till 1Cell abstract datatype 1Cell(val) Create () -> 1Cell(val) Set-value(v:val,c:1Cell(val)) -> 1Cell(val) 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)) 42

1Cell i Python class OneCell: def init (self): self._data = None self._link = None def setvalue(self,data): self._data = data def setlink(self,link): self._link =link def inspectvalue(self): return self._data def inspectlink(self): return self._link 43