Föreläsning 13 Datastrukturer (DAT037)

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

Föreläsning Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 10 Datastrukturer (DAT037)

Föreläsning 4 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037)

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning Datastrukturer (DAT037)

Föreläsning 5 Datastrukturer (DAT037)

Föreläsning 3 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Föreläsning 11 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Föreläsning 14 Innehåll

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

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

Föreläsning 8 Datastrukturer (DAT037)

Sökning och sortering

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036)

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

Tentamen Datastrukturer, DAT037 (DAT036)

Föreläsning 1 Datastrukturer (DAT037)

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning 7 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 035/INN960

Föreläsning 3 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT036)

Föreläsning Datastrukturer (DAT036)

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

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

Föreläsning Datastrukturer (DAT037)

Lösningar Datastrukturer TDA

Föreläsning Datastrukturer (DAT036)

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

Länkade strukturer, parametriserade typer och undantag

Tentamen Datastrukturer D DAT 035/INN960

Datastrukturer. föreläsning 3. Stacks 1

Föreläsning 8 Datastrukturer (DAT037)

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

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

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

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

Datastrukturer. föreläsning 10. Maps 1

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

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

Föreläsning Datastrukturer (DAT036)

DAI2 (TIDAL) + I2 (TKIEK)

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Vad har vi pratat om i kursen?

Tentamen Datastrukturer D DAT 036/INN960

Lösningsförslag till tentamen Datastrukturer, DAT037,

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

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

Tentamen kl Uppgift 4. Uppgift 5

Seminarium 13 Innehåll

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

Datastrukturer. föreläsning 9. Maps 1

Föreläsning 13 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 D DAT 036/DIT960

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

Tentamen Datastrukturer för D2 DAT 035

Exempeltenta GruDat 2002/2003

Dugga Datastrukturer (DAT036)

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Datastrukturer. föreläsning 9. Maps 1

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

Föreläsning 9. Sortering

Föreläsning 5: Grafer Del 1

Tentamen i Algoritmer & Datastrukturer i Java

Föreläsning 5 Innehåll

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

Föreläsning 6 Datastrukturer (DAT037)

Föreläsning 9 Innehåll

Tentamen Datastrukturer D DAT 036/INN960

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

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

Algoritmer, datastrukturer och komplexitet

Föreläsning 11 Innehåll

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

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

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

TENTAMEN: Algoritmer och datastrukturer. Läs detta!

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

Tentamen, Algoritmer och datastrukturer

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

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

Algoritmer, datastrukturer och komplexitet

Transkript:

Föreläsning 13 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-12-14 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037

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, Ω, Θ). Tänk på att dessa representerar mängder av funktioner, även om man skriver f(n) = O(g(n)). Regler.

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))) log(n! ) = O(n log n) O(1) < O(log n) < O(n) < O(n log n) <

Komplexitetsanalys Tidskomplexitet Utgår från att elementera operationer tar konstant tid, O(1). Lägg ihop de asymptotiska tiderna för alla operationer som exekveras. if-satser: Max-tiden av de två alternativen om inte en mer sofistikerad analys kan göras. loopar: Hur många gånger upprepas loopen. För nästlade loopar, håll koll på hur många gånger inre loopar upprepas beroende på indexens värden yttre loopar.

Komplexitetsanalys Tidskomplexitet Ibland kan man få en snävare uppskattning genom att lyfta ut inre loop i analysen, exempelvis för graf-algoritmer och antalet bågar. Rekursiva metoder: Hur många gånger anropas metoden för olika storlek på data. Lyft ut rekursiva anropen vid analys. Även något om utrymmeskomplexitet för datastrukturer och extra minnesanvändning hos algoritmer.

Komplexitetsanalys För funktioner där tiden beror på annat än indatas storlek Värsta- och bästafallskomplexitet. Medel- och amorterad komplexitet. Medelkomplexiteten är ofta komplicerad att räkna ut, eftersom den beror på den statistiska fördelningen av indata.

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.

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. I java: gränssnitt. Datastruktur: Implementation. I java: klass.

Generics Gör implementeringar så universella som möjligt. Generics i java: typvariabler, extends. Ibland behöver typen ha vissa egenskaper (hashcode, equals, Comparable, )

Invarianter, assertions, testning Invarianter för datastrukturer, pre och postconditions för metoder bidrar till dokumentation och underlättar förståelse och testning. Assertions i java.

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. Utgå från standarddatatyper. 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 (to.containskey(s) from.containskey(t)) { throw new IllegalArgumentException(); } to.put(s, t); from.put(t, s); } public T target(s s) { return to.get(s); } } public S source(t t) { return from.get(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).

Stackar, FIFO-köer Enkla implementationer med (olika sorters) listor. Cirkulära arrayer.

Träd Begrepp, ex. höjd, djup. Genomlöpningar.

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. Trädrotationer AVL-träd: Höjdbalanserade. Rödsvarta träd Splay-träd B-träd För de olika träden: Villkor för att vara ett korrekt träd. Standardoperationer, hur de går till och deras tidskomplexitet.

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

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). Begrepp: riktad, viktad, cyklisk, Datastrukturer: Grannlistor, grannmatriser.

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. Kruskals algoritm: Hanterar osammanhängande grafer.

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

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.

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

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

Sortering Undre gräns: Ω(n log n). Urvalssortering: O(n 2 ). Insättningssortering: O(n 2 ). Mergesort: O(n log n). Quicksort: O(n log n) (medel). Heapsort: O(n log n). 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²

Diverse Giriga algoritmer, divide and conquer, rekursion, iteratorer.

Skillnader detta år - Datastrukturer i funktionella språk, persistens - Potentialmetoden (var nog inte med förra året, men tidigare) + Splay-träd + Kruskals algoritm + Urvalssortering