Föreläsning Datastrukturer (DAT037)

Relevanta dokument
Föreläsning 13 Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning 1 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037)

Föreläsning 10 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 9 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036)

Föreläsning 14 Innehåll

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning 5 Datastrukturer (DAT037)

Datastrukturer. Sammanfattning och Referenshäfte. Guldbrand, Eric Johansson, Algot

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

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

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 8 Datastrukturer (DAT037)

Tentamen i Algoritmer & Datastrukturer i Java

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

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning 7 Datastrukturer (DAT037)

Sökning och sortering

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

Tentamen Datastrukturer D DAT 035/INN960

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

Dugga Datastrukturer (DAT036)

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Föreläsning 13 Innehåll

Datastrukturer. föreläsning 3. Stacks 1

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

Föreläsning 11 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 035/INN960

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

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

Föreläsning 3 Datastrukturer (DAT037)

Länkade strukturer, parametriserade typer och undantag

Seminarium 13 Innehåll

Datastrukturer. föreläsning 10. Maps 1

Exempeltenta GruDat 2002/2003

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

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

DAI2 (TIDAL) + I2 (TKIEK)

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Föreläsning 9 Innehåll

Datastrukturer. föreläsning 6. Maps 1

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Tentamen Datastrukturer (DAT036)

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.

F5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad

Lösningar Datastrukturer TDA

Föreläsning 5: Grafer Del 1

TENTAMEN: Algoritmer och datastrukturer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Tentamen Datastrukturer D DAT 036/DIT960

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Tentamen TEN1 HI

Föreläsning 5 Innehåll

Föreläsning 1. Introduktion och sökning i graf. Vad är en algoritm?

Tentamen Datastrukturer för D2 DAT 035

Tentamen Datastrukturer D DAT 036/INN960

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Fredag 10 juni 2016 kl 8 12

Datastrukturer. Föreläsning 5. Maps 1

Tentamen kl Uppgift 4. Uppgift 5

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

Datastrukturer. föreläsning 9. Maps 1

Teoretisk del. Facit Tentamen TDDC (6)

Algoritmer. Två gränssnitt

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 6 Datastrukturer (DAT037)

Tentamen, Algoritmer och datastrukturer

Lösningsförslag till tentamen Datastrukturer, DAT037,

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Facit Tentamen TDDC (7)

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Föreläsning 9 Innehåll

Transkript:

Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-12-14

Idag Frågor? Är något oklart inför tentan? Sammanfattning

Exempel från föreläsning 1

Dåligt val av datastruktur public class Bits { public static void main(string[] args) { int n = IntegerparseInt(args[0]); String bits = new String(); for (int i = 0; i < n; i++) { bits += i & 1; } Systemoutprint(bits); } }

Bättre val av datastruktur public class FastBits { public static void main(string[] args) { int n = IntegerparseInt(args[0]); StringBuffer bits = new StringBuffer(); for (int i = 0; i < n; i++) { bitsappend(i & 1); } Systemoutprint(bits); } }

8 6 Sekunder 4 2 0 0 50000 100000 150000 200000 n Bits FastBits

Hur har det gått? Jag hoppas att ni nu (snart) har verktyg för att: Förutse (ungefär) hur snabbt (vissa av) era program kommer att gå Göra (vissa) program mer effektiva

Ta något lite mer komplicerat program som ni skrev innan ni gick den här kursen Om ni hade skrivit programmet nu, hade ni gjort det på ett annat sätt? Vad hade ni gjort annorlunda? Svara kortfattat i Pingo

Sammanfattning

Modeller Vi har använt förenklade modeller av verkligheten för att analysera våra datastrukturer och algoritmer, i första hand den uniforma kostnadsmodellen Modellerna har begränsningar

Ordonotation Ordonotation gör det möjligt att dölja irrelevanta men även relevanta detaljer Definition (O, Ω, Θ) Regler

Vilka påståenden är sanna? 5n 2 + 3n + 7 = O(n 2 ) 5n 2 3n 7 = O(n 2 ) (log 2 n) 2 = Θ(log n) log 2 (n 2 ) = Θ(log n) 5n + 2 log 2 (7n + 3) = O(n) 5n + 2 log 2 (7n + 3) = O(log n)

Ordonotation Exempel på regler: Polynom i n av grad k = O(n k ) log(n k ) = O(log n) f(n) + g(n) = O(max(f(n), g(n)))

Tidskomplexitetsanalys Vi har analyserat många algoritmers tidskomplexitet En enkel analys kan se ut så här: Vi känner till tidskomplexiteten hos vissa standardkomponenter Vi räknar sedan hur många gånger standardkomponenterna körs En gång per varv i loopen En gång per nod En gång per kant

Pseudokod Blandning av programmeringsspråk, matematisk notation och naturligt språk Mål: Fokusera på det viktiga, undvik onödiga detaljer Ibland kan det vara bra med fler detaljer, ibland färre

Abstrakt datatyp/datastruktur Abstrakt datatyp: Matematisk abstraktion Datastruktur: Implementation

Några (klasser av) abstrakta datatyper Listor Stackar FIFO-köer Prioritetsköer Mängder Avbildningar ( maps ) Grafer

Tips: Återanvänd kod Ofta behöver man inte implementera datastrukturer själv Om man någon gång behöver det kan man ändå dra nytta av existerande standarddatastrukturer

2012/08:2 Uppgiften är att konstruera en datastruktur som representerar dubbelriktade maps (bijektioner mellan ändliga mängder): insert(s,t), target(s), source(t)

public class Bijection<S, T> { private Map<S, T> to; private Map<T, S> from; public Bijection() { to = new HashMap<S, T>(); from = new HashMap<T, S>(); } public void insert(s s, T t) { if (tocontainskey(s) fromcontainskey(t)) { throw new IllegalArgumentException(); } toput(s, t); fromput(t, s); } public T target(s s) { return toget(s); } } public S source(t t) { return fromget(t); }

Listor ADT med olika implementationer Länkade listor: Långsam indexering Snabb insättning (exkl sökning) i mitten Vaktposter? Enkellänkade, dubbellänkade? Pekarjonglering Testa! Invarianter Dynamiska arrayer: Snabb indexering Snabb insättning sist Amorterad tidskomplexitet (bokföringsmetoden)

Amorterad tidskomplexitet Abstraktion som gör det lättare (?) att analysera vissa datastrukturer Man kan låta tidiga, billiga operationer betala för dyra, sena

Amorterad tidskomplexitet Bokföringsmetoden: Spara mynt i datastrukturen Amorterad tidskomplexitet = faktisk tidskomplexitet + värdet av nya mynt värdet av sparade mynt som används Om vi börjar med noll mynt: Total amorterad tidskomplexitet övre gräns för total faktisk tidskomplexitet Analysen fungerar ej för persistenta datastrukturer

Persistenta datastrukturer Efter förändring finns gamla kopian kvar sort :: [Integer] -> [Integer], inte sort :: [Integer] -> void Nackdel: Vissa operationer kan vara mindre effektiva Fördel: Kanske lättare att förstå/testa

Vad är tidskomplexiteten för följande program, där i++ körs n gånger? Använd det logaritmiska kostnadskriteriet (Se int som en dynamisk array med bitar) int i = 0; i++; i++; i++; Θ(1) Θ(log n) Θ(n) Θ(n log n) Θ(n 2 )

Sortering Undre gräns: Ω(n log n) Insättningssortering: O(n 2 ) Heapsort: O(n log n) Mergesort: O(n log n) Quicksort: O(n log n) (medel) Hinksortering: O(N + n) (N: antalet hinkar) Radixsortering: O(d(N + n)) (N: talbasen, d: största antalet siffror ) Stabil? Adaptiv? In-place?

700 600 500 400 300 200 100 0 0 20 40 60 80 100 log₂ n n n log₂ n n²

Stackar, FIFO-köer Enkla implementationer med (olika sorters) listor Cirkulära arrayer Två listor Persistent O(1) (amorterat) vid enkeltrådad användning

Prioritetsköer Binära heapar: Heapordnade kompletta binära träd Trädet representeras ofta av en array Bubbla upp/ned Leftistheapar: Heapordnade träd med leftistinvarianten: vänstra barnets högerryggrad högra barnets Effektiv merge

Mängder, avbildningar Hashtabeller: Hashfunktioner Kollisioner Kedjning, öppen adressering Lastfaktor

Mängder, avbildningar Olika sorters sökträd: Obalanserade binära sökträd: Långsamma vid insättning av sorterad sekvens AVL-träd: Höjdbalanserade Rotationer Rödsvarta träd, B-träd

Klassificera träden: Binär minheap, leftistminheap, AVL-träd A: 3 2 1 5 4 7 6 B: 1 3 5 6 4 7 2 C: 1 2 3 4 5 6 D: 1 4 5 6 2 3

Mängder, avbildningar Prefixträd: Nycklar: Strängar av tecken a p r a o g r m

Mängder, avbildningar Tillägg: För att undvika långsam tolist, se till att varje löv svarar mot en sträng som finns i trädet: a o r p a a r g h m s é k

Mängder, avbildningar Skipplistor: Insättning: Randomiserad algoritm Förväntad tidskomplexitet 0 1 2 3 4 5 6 7 8

Grafer ADT: G = (V, E) Datastrukturer: Grannlistor, grannmatriser

Djupet först-sökning Graf: 1 0 2 4 3 5 En möjlig uppspännande skog: 0 1 4 2 5 3

Starkt sammanhängande komponenter En algoritm: Två djupet först-sökningar

Starkt sammanhängande komponenter En algoritm: Två djupet först-sökningar

Topologisk sortering a d b c a, b, d, c, e eller a, b, c, d, e ė Några algoritmer: Djupet först-sökning, gå igenom skogen i preordning, från höger till vänster Kö med noder vars virtuella ingrad är 0

Kortaste vägen s 1 4 2 2 t 0 För grafer utan vikter: Bredden först-sökning Med ickenegativa vikter: Dijkstras algoritm

Minsta uppspännande träd 10 11 9 1 8 3 7 4 2 5 6 Prims algoritm: Liknar Dijkstras

Till sist Svara gärna på kursenkäten Ny examinator nästa år

Lycka till!