© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 4.

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
Algoritmer och data strukturer -Länkade listor
Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Logikprogrammering Ons, 25/9
OOP Objekt-orienterad programmering
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Föreläsning 2 Datastrukturer Abstrakta datastrukturer Stack
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
DoA VT -07 © Anders Broberg, Lena Kallin Westin, P = ((C,F,3), (B,D,3), (C,G,4),(A,F,4), (A,R,4), (C,D,5), (E,G,6), (B,R,6), (A,E,6), (A,C,8)) A.
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 1.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 7 Träd.
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
PROCESSPROGRAMMERING
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 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Vektorer (klassen Vector) Sortering
Arv.
Föreläsning 8 Arv och abstrakta klasser. Arv Definierar en klass utifrån en redan existerande klass Den nya klassen utökar den ärvda klassen ( extends.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 5 Arrayer & ArrayList Hur man använder API:n
Datastrukturer och algoritmer
Föreläsning 9 Gränssnitt. Super Super kan användas till anrop av en omdefinierad metod Super kan användas till anrop av konstruktorer i superklassen Super.
Reflektioner kring OU1 Generellt sett bra kvalitet på dokumentationen! Första intryck... –Skulle du lämna in en jobbansökan med ett häftstift/gem eller.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 16.
Datastrukturer och algoritmer
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 13.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
7. Delegerare och notifierare
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 9 Grafalgoritmer.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
TILLÄMPAD DATALOGI (TILDA) Övning 2
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 10.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
Datastrukturer och algoritmer
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och Datastrukturer -- Kap 21,14 Prioritets Köer (Priority Queues ), Graph.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 8 Relationer, prioritetsköer och grafer.
Malmö högskola Rolf Axelsson 2003/2004 DA7235, 4 poäng Fält som returvärde Sortera fält Söka i fält Tvådimensionella fält Fält och spelplan Föreläsning.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 16.
Datastrukturer och algoritmer Föreläsning 3. Datastrukturer och algoritmer VT08 Innehåll  Fält och Tabell  Att läsa: Kapitel 5-6.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - En annan sort tänkande, rekursiva metoder -Datastrukturen träd.
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Föreläsning 3: Booleans, if, switch
Föreläsning 11: Rekursion
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Presentationens avskrift:

© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 4

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Innehåll  Stack, Kö  Tillämpningar  Konstruktion  Dubbeländad kö  Genomgång av Routeruppgiften  Att läsa: Kapitel 7-8

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Stack  Modell  Papperstrave  Kommer bara åt det översta arket  Kan bara lägga till nytt överst  Linjärt ordnad struktur  Före /efter relation  Specialisering av Lista oÄnnu fler begränsningar på operationer än Riktad lista

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Stack  Andra namn på Stack är ”Pushdown list” och ”LIFO list”  LIFO – Last In First Out  Insättning, borttagning, avläsning i toppen av stacken  I listan behövdes en position, detta behövs inte här (eftersom vi bara håller oss till toppen)

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Gränsyta till Stack 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  Empty och Push är konstruktorer  Alla objekt kan byggas med först Empty och sedan en sekvens av Push

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Informell specifikation till Stack  Empty – konstruerar tom stack  Push(v,s) – lägger (ett element med värdet) v överst på stacken  Top(s) – är värdet av det översta elementet på stacken (förutsatt att inte stacken är tom)  Pop(s) – avlägsnar det översta elementet från stacken (förutsatt att inte stacken är tom)  Isempty(s) – testar om stacken är tom

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Formell specifikation till Stack Ax 1: Isempty(Empty) Ax 2: ¬Isempty(Push(v,s)) Ax 3: Pop(Push(v,s)) = s Ax 4: Top(Push(v,s)) = v Ax 5: ¬Isempty(s) => Push(Top(s), Pop(s)) = s

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Stack konstruerad som Lista  Uteslutningar och specialiseringar av operationer  Empty konstrueras som List-Empty  IsEmpty(s) konstrueras som List-IsEmpty(s)  Top(s) konstrueras som List-Inspect(s, List-First(s))  Pop(s) konstrueras som List-Remove(s, List-First(s))  Push(v, s) konstrueras som List-Insert(s, v, List-First(s))  Relativ komplexitet:  Tittar bara på ”ytan” hur många list-operationer som behövs per stack-operation  Antalet listoperationer är inte beroende av antalet element i stacken

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Stack konstruerad som Lista  Absolut komplexitet:  Multiplicerar alla relativa komplexiteter ned till fysiska datatyper.  Dvs tittar även på hur listan är konstruerad.  Lista som fält  Tidskomplexiteten ökar (måste flytta stacken fram och tillbaka)  Push och Pop förväntas vara oberoende av stackens storlek  Toppen av stacken obörjan eller slutet av listan?

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Stack  Egen struktur konstruerad mha fält  Botten i slutet oStacken läggs i slutet av fältet –Push och Pop  (1) –Inga stora dataomflyttningar  Botten i början  Två stackar i samma fält

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Stack-interface i Java public interface Stack { public boolean isEmpty(); public Object top(); public void push(Object v); public Object pop(); }

DoA VT -07 © Anders Broberg, Lena Kallin Westin, ArrayStack.java public class ArrayStack implements Stack { public static final int CAPACITY = 1000; private int capacity; private Object S[]; private int top = -1; public ArrayStack() { this(CAPACITY); } public ArrayStack(int cap) { capacity = cap; S = new Object[capacity]; }

DoA VT -07 © Anders Broberg, Lena Kallin Westin, ArrayStack.java public boolean isEmpty() { return (top < 0); } public void push(Object obj) { if ((top+1) < capacity) { top = top + 1; S[top] = obj; } public Object top() { return S[top]; }

DoA VT -07 © Anders Broberg, Lena Kallin Westin, ArrayStack.java public Object pop() { Object elem; elem = S[top]; S[top] = null; top = top – 1; return elem; }

DoA VT -07 © Anders Broberg, Lena Kallin Westin, ArrayStack i C  Kod från Weiss bok finns på sidan   Där finns en ArrayStack som är väldigt lik vår java-implementation.

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Stack  Egen struktur konstruerad mha fält  Botten i början  Botten i slutet oStacken läggs i slutet av fältet –Push och Pop  (1) –Inga stora dataomflyttningar  Två stackar i samma fält  Egen struktur mha av länkade celler oHärma riktad lista mha 1-celler oO(1) för push och pop

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Stack  Tillämpningar  Avbryter bearbetning som senare kanske återupptas  Återspårning (backtracking) oTill senaste gjorda valet  Hjälpstruktur för att traversera i grafer och träd

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Stack  Tillämpningar  Rekursion  Fakultet n! ofactorial(n) –if (n<=1) then return 1; –else return n*factorial(n-1);  Evaluering av uttryck

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Kö  Modell  Kö  Specialisering av Lista  Begränsningar på operationer  Insättning görs bara i en ände (slutet, rear),  Borttagning görs i andra änden (början, front),  Avläsning: oftast bara intresserad av läsa av det första elementet i kön  Pos behövs inte eftersom man bara är intresserad av vad som händer i början och slutet av kön  Linjärt ordnad struktur

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Kö  FIFO – First In First Out abstract datatype Queue(val) Empty () → Queue(val) Enqueue (v:val,q:Queue(val)) → Queue(val) Front (q:Queue(val)) → val Dequeue (q:Queue(val)) → Queue(val) Isempty (q:Queue(val)) → Bool

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Kö - konstruktion  Lista  Fronten på kön = början av listan  Listan som Fält oMåste flytta hela listan vid insättning eller borttagning beroende på om köns början är i fältets början eller slut  Riktad lista med 1-celler o Första köelementet länkar till det andra osv oHuvud som pekar ut början och slutet av kön FrontRear

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Kö – Konstruktion  Cirkulär struktur med 1-celler  Länken i slutet av kön pekar på fronten FrontRear

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Kö – Konstruktion  Cirkulär vektor (”ringbuffert”)  Indexen cirkulärt ordnade. I en vektor med n element är indexmängden {0,1,..., n-1}  Next(x) = (x+1) mod n  Prev(x) = (x-1) mod n + Inga omflyttningar - Maximal storlek - Outnyttjat utrymme - Problem skilja tom kö ifrån en full Bild från sidan 165 i Janlert L-E., Wiberg T., Datatyper och algoritmer, Studentlitteratur, 2000

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Kö  Tillämpningar  Buffert o Routrar oSkrivarkö  Bredden-först-traversering oEx. Alla websidor man kan nå med 10 klick från en given sida...

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Modell för datatypens byggande  Specifikatören – utformar specifikationen  Vet inget om implementatören och dennes resurser.  Har fått reda på vad användaren tror sig behöva.  Vill ge en spec som ”håller” i evighet => kanske inte överensstämmer med det användaren vill ha  Implementatören – implementerar specen  Går enbart efter specifikationen  Användaren – använder implementationen  Vet inget om implementationen, känner endast till specifikationen, får hålla till godo med det som erbjuds

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Felhantering  Specifikationen bestämmer implementationens spelrum  Ska styra så lite som möjligt  Ex. Ej specat vad som händer om man gör Front eller Dequeue på en tom kö.  Implementatören  ska uppfylla specifikationen... och inte mer!  Användaren  bör inte konstruera algoritmer som beror på ospecifierade förhållanden  dvs ska aldrig göra Front på en tom kö...

DoA VT -07 © Anders Broberg, Lena Kallin Westin, Robusthet och effektivitet  Robusthet  Användaren kan begå misstag utan att det leder till katastrof  Effektivitet  specifierar felhantering => robust lösning men mindre effektiv  Tex att alltid kolla indexgränser i en array...  En del felhantering blir implementationsberoende  Det kan man inte ha med i en specifikation som ska vara oberoende.  Tex i Lista/Stack/Kö som Fält finns risk för overflow  Om inte felhantering är specificerad får användaren göra avvägningarna mellan robusthet och effektivitet