Datastrukturer. föreläsning 3. Stacks 1

Relevanta dokument
ADT Kö. Seminarium 4 Köer och Stackar Innehåll. Operationer. ADT Stack. Definition. Definition

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

Föreläsning Datastrukturer (DAT036)

Föreläsning 2 Datastrukturer (DAT037)

Länkade strukturer. (del 2)

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Föreläsning 4 Innehåll

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

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 3. Stack

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

Föreläsning 3. Stack

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

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Föreläsning 3 Datastrukturer (DAT037)

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

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

Hitta k största bland n element. Föreläsning 13 Innehåll. Histogramproblemet

Föreläsning 11. ADT:er och datastrukturer

Föreläsning 13 Innehåll

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

Lösningsförslag till exempeltenta 2

Datastrukturer och algoritmer

Föreläsning 2 Datastrukturer (DAT037)

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Föreläsning 1 Datastrukturer (DAT037)

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

Föreläsning 3 Datastrukturer (DAT037)

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

Föreläsning 14 Innehåll

Datastrukturer och algoritmer

Föreläsning 12. Länkade listor

Tommy Färnqvist, IDA, Linköpings universitet

Tentamen Datastrukturer D DAT 035/INN960

Tentamen i Algoritmer & Datastrukturer i Java

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

Stackar, köer, iteratorer och paket

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

Länkade strukturer, parametriserade typer och undantag

Föreläsning 2. Länkad lista och iterator

ADT Prioritetskö. Föreläsning 13 Innehåll. Prioritetskö vs FIFO-kö. Prioritetskö Exempel på användning. Prioritetsköer och heapar

Föreläsning 2. Länkad lista och iterator

Föreläsning 4 Datastrukturer (DAT037)

Abstrakta datastrukturer

Tentamen Datastrukturer (DAT036)

Föreläsning 13 Datastrukturer (DAT037)

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Föreläsning 10 Innehåll. Prioritetsköer och heapar. ADT Prioritetskö. Interface för Prioritetskö. Exempel på vad du ska kunna

ADT Prioritetskö. Föreläsning 12 Innehåll. Prioritetskö. Interface för Prioritetskö. Prioritetsköer och heapar

Tommy Färnqvist, IDA, Linköpings universitet

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

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 10. ADT:er och datastrukturer

Lösning av några vanliga rekurrensekvationer

Programmering för språkteknologer II, HT2014. Rum

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

Seminarium 13 Innehåll

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Dugga Datastrukturer (DAT036)

Exempeltenta GruDat 2002/2003

Föreläsning 9 Innehåll

Föreläsning Datastrukturer (DAT036)

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

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen kl Uppgift 4. Uppgift 5

Tentamen Datastrukturer D DAT 036/DIT960

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Föreläsning 8: Exempel och problemlösning

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

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

Föreläsning 10 Datastrukturer (DAT037)

Datastrukturer. Föreläsning 5. Maps 1

DAT043 - föreläsning 8

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

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

Tentamen Datastrukturer (DAT036)

Tentamen i Algoritmer & Datastrukturer i Java

Programmering i C++ EDA623 Dynamiska datastrukturer. EDA623 (Föreläsning 11) HT / 31

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

Kurskod D0010E Datum Skrivtid 5tim

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Lösningsförslag till tentamen Datastrukturer, DAT037,

Tentamen i Algoritmer & Datastrukturer i Java

Programmering i C++ EDAF30 Dynamiska datastrukturer. EDAF30 (Föreläsning 11) HT / 34

Föreläsning 9 Datastrukturer (DAT037)

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 2, vecka 8: Repetition

Transkript:

Datastrukturer föreläsning 3 Stacks 1

Abstrakta datatyper Stackar - stacks Köer - queues Dubbeländade köer - deques Vektorer vectors (array lists) All är listor men ger tillgång till olika operationer Stacks 2

Stackar

Gränssnitt för stackar i Java 5 public interface Stack<E>{ public void push(e element); public E top() throws EmptyStackException; public E pop() throws EmptyStackException; public boolean isempty(); } public int size(); Stacks 4

Exempel på stackar Stackar förekommer överallt i datorvärlden! T ex i Hårdvarustackar! (Se bild) Virtuella maskiner Uttrycksberäkning Syntaxanalys

Hur implementera stackar i Java? Stacks 6

Hur implementera stackar i Java? Fält? Problem med overflow. Dynamiskt fält, dvs fält som man kan utvidga vid behov? Länkad lista? Enkellänkad? Dubbellänkad? Med eller utan vaktposter? Stacks 7

Stack implementerad med fält En variabel size anger storleken på stacken Insättning görs i S[size] Sätt in nytt element här S 0 1 2 size Stacks 8

Borttagning pop i pseudokod array S integer size tillståndsvariabler Algorithm size() return size Algorithm pop() if isempty() then throw EmptyStackException else size size - 1 return S[size] Stacks 9

Nackdelar Fältets storlek är bestämd på förhand och kan inte ändras Fältet kan bli fullt om vi gör många push. Vi får overflow. Om stacken har få element och fältet har många celler använder vi onödigt mycket minne. Stacks 10

Dynamiskt fält När fältet blir fullt, skapa ett nytt större fält och kopiera: ( push(o Algorithm if size = V.length then A new array of size for i 0 to size-1 do A[i] V[i] V A V[size] o size size + 1 Stacks 11

Hur stort ska det nyallokerade fältet vara? Tidskomplexitet för push? Bästa, värsta, medelfallet? O-komplexitet. Stacks 12

Utökning av dynamiska fält Hur stort bör det nya utökade fältet A vara? utöka med fix storlek? dubblera storleken? Tidskomplexitet för insättning? - värsta fallet är O(N), om storleken på fältet är N, både vid utökning med fix storlek och vid dubblering! Varför? Stacks 13

Amorterad tidskomplexitet Beräknar exekveringstiden T(n) för n operationer i följd inte bara en operation! Beräkna medeltalet (T(n)/n)! Jmfr tidskomplexitet i medeltal och amorterad tidskomplexitet, vad är skillnaden? Stacks 14

Amorterad tidskomplexitet för insättning i dynamiska fält Vi jämför den amorterade tidskomplexiteten för de två metoderna att utöka dynamiska fält (fix utökning och dubblering)! Dvs vi beräknar tiden de tar att utföra n insättningar i båda fallen. Vi börjar med fält med storlek 0 för enkelhets skull. Stacks 15

Utökning med fix storlek c amorterad analys Gör n insättningar. Allokera nytt fält k = n/c gånger. Total tidsåtgång T(n) = n + c + 2c + 3c + 4c + + kc = n + c(1 + 2 + 3 + + k) = n + ck(k + 1)/2 insättningstid Eftersom c är konstant så gäller att T(n) är O(n + k 2 ) dvs T(n) är O(n 2 ) Alltså gäller att T(n)/n är O(n)! kopieringstid Stacks 16

Dubblering amorterad analys Vi skapar nytt fält k = log 2 n gånger Tiden T(n) det tar att genom föra n insättningar är proportionell mot n + 1 + 2 + 4 + 8 + + 2 k = n + 2 k + 1-1 = n + 2n -1 = 3n -1 ( O(n T(n) är ( O(1 T(n)/n är Stacks 17

Nackdelar med dubblering Om vi hela tiden dubblerar storleken på fältet använder vi mer minne än nödvändigt Tiden det tar att utöka fältet kan bli oacceptabelt stor i realtidstillämpningar. Stacks 18

Enkellänkad lista Består av en följd av noder Varje nod lagrar element länk till nästa nod elem next nod A B C D Stacks 19

Stack med enkellänkad lista Lagra pekare top till första noden. nodes top elements Stacks 20

Klass för noder i Java 5 public class Node<E> { private E element; } private Node<E> next; public Node(E e, Node<E> n) {element = e; next = n;} public E getelement() {return element;} public Node<E> getnext() {return next;} public void setelement(e e) {element = e;} public void setnext(node<e> n) {next = n;} Stacks 21

Stack som enkellänkad lista public class NodeStack<E> implements Stack<E> { private Node<E> top; private int size; public NodeStack() {top = null; size = 0;} public int size() {return size;} public boolean isempty() {return top == null;} public E top() throws EmptyStackException { if (isempty()) throw new EmptyStackException( )); return top.getelement(); } // se nästa sida} Stacks 22

Stack som enkellänkad lista } public E pop() throws EmptyStackException { if (isempty()) throw new EmptyStackException( ); E temp = top.getelement(); top = top.getnext(); size--; return temp; } public void push(e elem) { Node<E> v = new Node<E>(elem,top); top = v; size++; } Stacks 23

Synlighet Vilka metoder kan anropa en viss slags metod (eller tillståndsvariabel)? Private: metoder i samma klass Public: alla metoder Protected: metoder i samma paket och i delklasser Friendly (modifierare utlämnad): metoder i samma paket Stacks 24

Köer

ADT för köer Insättning och borttagning. FIFO ( First in First Out )-principen Köoperationer i G&T ( enqueue(object () dequeue () front () size () isempty ( Collection-klassen Köoperationer i java.util (delklass till ( o offer(e ( kö poll(), remove() (returnerar null resp exception om tom ( kö peek(), element() (returnerar null resp exception om tom size() ärvd från Collection isempty() ärvd Stacks 26

Användning av köer Direkta tillämpningar Väntelistor Kö för delade resurser, t ex skrivare Simuleringar Indirekta tillämpningar Hjälpdatastruktur för många algoritmer Del av mer komplexa datastrukturer Stacks 27

Implementering av köer med hjälp av fält Använd fält med storlek N på ett cykliskt sätt Två variabler håller reda på början och slutet av kön f index för början på kön ( cell r index för cellen efter slutet på kön (första lediga Q Q kön har flyttat sig åt höger 0 1 2 f r kön har gått runt hörnet 0 1 2 r f Stacks 28

Insättning i kö - pseudokod ( enqueue(o Algorithm if size = N - 1 then throw FullQueueException else Q[r] o r (r + 1) mod N size = size + 1 Q Q 0 1 2 f r 0 1 2 r f Stacks 29

Borttagning ur kö () dequeue Algorithm if size = 0 then throw EmptyQueueException else o Q[f] f (f + 1) mod N size size 1 return o Q Q 0 1 2 f r 0 1 2 r f Stacks 30

Kö implementerad som dynamiskt fält Om fältet är fullt när vi ska sätta in nytt element, skapar vi nytt större fält Amorterad komplexitet för insättning O(n) om utökning med fix storlek O(1) om dubblering Stacks 31