Tommy Färnqvist, IDA, Linköpings universitet

Relevanta dokument
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 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

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

Datastrukturer. föreläsning 3. Stacks 1

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

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

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning...

Föreläsning Datastrukturer (DAT036)

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

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

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 3 Datastrukturer (DAT037)

Länkade strukturer. (del 2)

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

Föreläsning 3 Datastrukturer (DAT037)

Tommy Färnqvist, IDA, Linköpings universitet

Datastrukturer och algoritmer

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

Datastrukturer och algoritmer

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

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

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

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

Föreläsning 6: Introduktion av listor

Ordnad lista. Listor... Ordnad lista... Ordnad lista typer

Föreläsning 3. Stack

Länkade strukturer, parametriserade typer och undantag

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

Föreläsning 4 Datastrukturer (DAT037)

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 3. Stack

Föreläsning 8 Datastrukturer (DAT037)

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

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

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

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 4 Datastrukturer (DAT037)

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 4 Innehåll

Abstrakta datastrukturer

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

Tentamen i Algoritmer & Datastrukturer i Java

Stackar, köer, iteratorer och paket

Tentamen Datastrukturer (DAT036)

Magnus Nielsen, IDA, Linköpings universitet

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

Föreläsning 8 Datastrukturer (DAT037)

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

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Föreläsning 5. Rekursion

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

Några svar till TDDC70/91 Datastrukturer och algoritmer

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

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

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

Tentamen i Algoritmer & Datastrukturer i Java

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

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Programmering II (ID1019) :00-12:00

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Föreläsning Datastrukturer (DAT036)

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

Föreläsning Datastrukturer (DAT037)

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

Tentamen Datastrukturer (DAT037)

TDDC30 Programmering i Java, datastrukturer och algoritmer

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

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

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

Dugga Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 7. Träd och binära sökträd

Tentamen TEN1 HI

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

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

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

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

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

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

Tentamen i Algoritmer & Datastrukturer i Java

Procedurer och villkor

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Föreläsning Datastrukturer (DAT037)

Föreläsning 5. Rekursion

Data- och programstrukturer

Kurskod D0010E Datum Skrivtid 5tim

Tillämpad Programmering (ID1218) :00-13:00

Objektorienterad Programkonstruktion. Föreläsning 9 30 nov 2016

Föreläsning 9 Datastrukturer (DAT037)

DD1361 Programmeringsparadigm. Carina Edlund

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

Vad har vi pratat om i kursen?

Föreläsning 5 Datastrukturer (DAT037)

Rekursion och induktion för algoritmkonstruktion

Transkript:

öreläsning 3 Stackar, köer och listor TDDC70/91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 10 september 2013 Tommy ärnqvist, IDA, Linköpings universitet 31 Innehåll Introduktion Sekvenser av data förekommer i många applikationer; Hur representera dem i minnet? Vad är typiska och specifika operationer? (definiera ADTer) Hur implementera dem? 32 Innehåll 1 ADT stack 1 11 Tillämpningar 2 12 Representation i angränsande minne 4 13 Representation i länkat minne 5 2 ADT kö 5 21 Representation i angränsande minne 6 22 Representation i länkat minne 7 3 Listor 7 31 ADT arraylista 7 32 ADT nodlista 8 33 Enkel- och dubbellänkade listor 8 33 1 ADT stack ADT stack (sist in först ut) a b c c b a top top a b c d d top d Operationer: Top(S) returnerar det översta elementet i stack S 1 Pop(S) tar bort och returnerar det översta elementet i stack S 1 1 eller ett felmeddelande om S är tom 1

Push(S,x) lägger x överst i stack S MakeEmptyStack() skapar en ny tom stack IsEmptyStack(S) returnerar true omm S är tom 34 11 Tillämpningar Typiska användningsområden för ADT stack Implementation av rekursiva funktioner/metoder/procedurer Evaluering av aritmetiska uttryck Verifiera korrekthet av parentesnästling (tex validering av XML-taggar) Undo-sekvens i texteditor akåtknapp i webbläsare 35 eräkning av fakultetsfunktionen Definition: f act(n) = { 1 om n = 0 n f act(n 1) om n > 0 Lagra intermediära resultat för varje rekursionssteg på en stack S: f act(3) = 3 f act(2) Kom ihåg 3 till f act(2) har beräknats: Push(S, 3) f act(2) = 2 f act(1) Kom ihåg 2 till f act(1) har beräknats: Push(S, 2) f act(1) = 1 f act(0) Kom ihåg 1 till f act(0) har beräknats: Push(S, 1) f act(1) = 1; f act(3) = 1Pop(S)Pop(S)Pop(S) minnesanvändningen är O(n) 36 Användning av stack: funktionsanrop i JVM Javatolken (Java virtual machine (JVM)) håller reda på en anropskedja med hjälp av en stack När en metod anropas push:ar JVM argumenten, lokala variabler, returvärde och programräknaren (dessa bildar funktionens aktiveringspost) När metoden körts klart pop:as aktiveringsposten och kontrollen lämnas över till metoden överst på stacken Detta möjliggör rekursion 2

main() { int i = 5; foo(i); } foo(int j) { int k; k = j+1; bar(k); } bar(int m) { } bar PC = 1 m = 6 foo PC = 3 j = 5 k = 6 main PC = 2 i = 5 37 Svansrekursion Ett rekursivt anrop är svansrekursivt omm första instruktionen efter att kontrollflödet kommit tillbaka efter anropet är return stacken behövs inte: allting på stacken kan kastas direkt svansrekursiva funktioner kan skrivas om till iterativa funktioner Det rekursiva anropet i ACT är inte svansrekursivt: function ACT(n) if n = 0 then return 1 else return n ACT(n 1) örsta instruktionen efter retur från det rekursiva anropet är multiplikation n måste behållas på stacken 38 En svansrekursiv funktion function INSEARCH(v[a,, b],x) if a < b then m a+b 2 if v[m]key < x then return INSEARCH(v[m + 1,,b],x) else return INSEARCH(v[a,,m],x) if v[a]key = x then return a else return not found De två rekursiva anropen är svansrekursiva 39 Eliminering av svansrekursion De två rekursiva anropen kan elimineras: 1: function INSEARCH(v[a,, b],x) 2: if a < b then 3: m a+b 2 4: if v[m]key < x then 5: a m + 1 {var: return INSEARCH(v[m + 1,,b],x)} 6: else b m {var: return INSEARCH(v[a,,m],x)} 7: goto (2) 8: if v[a]key = x then return a 9: else return not found 310 3

Svansrekursiv fakultetsfunktion f act kan skrivas om genom att introducera en hjälpfunktion: function ACT(n) return ACT2(n, 1) function ACT2(n, f ) if n = 0 then return f else return ACT2(n 1,n f ) ACT2 är svansrekursivv minnesanvändningen efter rekursionseliminering blir O(1) 311 12 Representation i angränsande minne Implementation av stack i angränsande minne x k S x 0 x 0 k x 0 n-1 S A Length n Length(S) = k + 1 <= n function MAKEEMPTYSTACK S NEW(StackTableHead) SA NEW(table[0,,n 1]) SLength 0 return S procedure PUSH(S, x) if Slength = n then error else SA[SLength] x SLength SLength + 1 function POP(S) if SLength = 0 then error else SLength SLength 1 return SA[SLength] 312 Implementation av stack i angränsande minne function TOP(S) if SLength = 0 then error else return SA[SLength-1] function ISEMPTYSTACK(S) return SLength = 0 Alla operationer tar O(1) tid 313 4

13 Representation i länkat minne Implementation av stack i länkat minne function MAKEEMPTYSTACK S NEW(StackListHead) Sptop null return S procedure PUSH(S, x) y NEW(StackListItem) yin f o x ynext Sptop Sptop y + maxstorlek behöver inte vara känd i förväg - anrop till NEW vid varje PUSH-operation och till REE vid varje POP-operation x 2 x 1 x 0 Info Next Info Next Info Next S ptop function POP(S) if Sptop = null then error else y Sptop x yin f o Sptop ynext REE(y) return x 314 2 ADT kö ADT kö (först in först ut) 315 ADT kö (först in först ut) Operationer: ront(q) returnerar det första elementet i kön Q Dequeue(Q) tar bort och returnerar det första elementet i kön Q Enqueue(Q,x) lägger x sist i kön Q MakeEmptyQueue() skapar en ny tom kö IsEmptyQueue(Q) returnerar true omm Q är tom 316 5

Typiska användningsområden för ADT kö ekanta applikationer Spellista i Spotify Databuffert (ipod, VOD) Asynkron dataöverföring (fil-i/o, pipes, sockets) Ta hand om förfrågningar till delad resurs (skrivare, processor) Simulering Trafikanalys Väntetider hos en kundtjänst estämma hur många kassörer/kassörskor som behövs på en stormarknad 317 21 Representation i angränsande minne Implementation av kö i ringbuffer/cirkulär array x 2 x 3 x 0 x 1 0 n-1 S A ack ront Length = k < n+1 ack = index för första lediga cell ront = index för första elementet Length eller Size för att kontrollera overflow: Size = (n + ) mod n 318 Exempel: operationer på kö implementerad med ringbuffer Enqueue(a) a Enqueue(b) a b Dequeue b Enqueue(c) b c Dequeue c Enqueue(d) d c Dequeue d Dequeue 319 6

22 Representation i länkat minne Implementation av kö i länkat minne x 0 x 1 x 2 Info Next Info Next Info Next Q pront pack Javakod för köoperationerna: se kursboken, kapitel 523 + maximal storlek behöver inte vara känd i förväg + pekaren pack gör att EnQueue går i tid O(1)(utan pack: hela listan måste traverseras behöver Θ(k) tid) - extra minneshantering i EnQueue och DeQueue 320 3 Listor Listor En lista L är en sekvens av element x 0,,x n 1 size eller length L = n tom lista med längd 0 Urval med index i (ibland med rank): väljer det i:te elementet, x i, där 0 i n 1 Urval med aktuell position, tex första elementet i L, eller sista, föregående, nästa, position abstraherar bort från indexering ADT arraylista: använder index ADT nodlista: använder position 321 31 ADT arraylista ADT arraylista Domän: listor Operationer på en vektor S size() returnerar S isempty() returnerar true omm S = 0 elematindex(i) returnerar S[i]; fel om i < 0 eller i >size() 1 setatindex(i,x) returnera elementet med index i och ersätt det med x som nytt element med index i; fel om i < 0 eller i >size() 1 insertatindex(i,x) sätter in x som nytt element med index i: ökar storleken; fel om i < 0 eller i >size() removeatindex(i) tar bort och returnerar det i:te elementet i S: minskar storleken; fel om i < 0 eller i >size() 1 322 Exempel: några operationer på en initialt tom arraylista S operation utdata S insertatindex(0,7) - (7) insertatindex(0,4) - (4,7) elematindex(1) 7 (4,7) insertatindex(2,2) - (4,7,2) elematindex(3) error (4,7,2) remove(1) 7 (4,2) insertatindex(1,5) - (4,5,2) insertatindex(1,3) - (4,3,5,2) insertatindex(4,9) - (4,3,5,2,9) elematindex(2) 5 (4,3,5,2,9) setatindex(3,8) 2 (4,3,5,8,9) 323 7

32 ADT nodlista ADT nodlista Domän: listor Operationer på en lista L, förutom size() och isempty() first() returnerar positionen för första elementet i L; fel om L är tom last() returnerar positionen för sista elementet i L; fel om L är tom prev(p) returnerar positionen för elementet som föregår p i L; fel p är första positionen next(p) returnerar positionen för elementet som följer på p i L; fel om p är sista positionen set(p,x) ersätt elementet i position p med x, returnera elementet som förut fanns i position p insertirst(x) sätt in nytt element x som första elementet i L, returnera positionen för x insertlast(x) sätt in nytt element x som sista elementet i L, returnera positionen för x insertefore(p,x) sätt in nytt element x före position p i L, returnera positionen för x insertafter(p,x) sätt in nytt element x efter position p i L, returnera positionen för x remove(p) ta bort och returnera el i position p från L 324 Exempel: några operationer på en initialt tom nodlista L operation utdata L insertirst(8) - (8) first() p 1 (8) (8) insertafter(p 1,5) - (8,5) next(p 1 ) p 2 (5) (8,5) insertefore(p 2,3) - (8,3,5) prev(p 2 ) p 3 (3) (8,3,5) insertirst(9) - (9,8,3,5) last() p 2 (5) (9,8,3,5) remove(first()) 9 (8,3,5) set(p 3,7) 3 (8,7,5) insertafter(first(),2) - (8,2,7,5) 325 Implementation av ADT arraylista, ADT nodlista Representation i angränsande minne för arraylistor: elementen lagras i tabell/array (tex den utökningsbara arrayen från föreläsning 2) elematindex går i O(1) tid; hur blir det med andra operationer? Enkellänkad lista för nodlistor: se nästa slide positioner implementerade som pekare Analysera tidskomplexiteten för operationerna prev, insertefore kräver listtraversering Dubbelllänkad lista för nodlistor: se nedan 326 33 Enkel- och dubbellänkade listor Enkellänkade listor En enkellänkad lista är en konkret datastruktur bestående av en sekvens av noder Varje nod lagrar element pekare till nästa nod next elem node 8

A C D 327 Dubbellänkade listor En dubbelänkad lista ger en naturlig implementation av ADTn nodlista Varje nod lagrar element pekare till föregående nod pekare till nästa nod Särskilda huvud- och svansnoder prev next elem node huvud noder/positioner svans element 328 Insättning i dubbellänkade listor A C p A q C p q X A X C 329 orttagning i dubbellänkade listor p A C D A C p D A C 330 9