Rebecka Geijer Michaeli, IDA, Linköpings universitet. 1 Administrativ information Upplägg... 2

Relevanta dokument
Tommy Färnqvist, IDA, Linköpings universitet. 1 Administrativ information Upplägg... 2

Föreläsning 1. Introduktion. Vad är en algoritm?

Algoritmer, datastrukturer och komplexitet

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

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

Tommy Färnqvist, IDA, Linköpings universitet. 1 Administrativ information Upplägg... 1

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

Föreläsning 1 Datastrukturer (DAT037)

Asymptotisk komplexitetsanalys

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

Sökning och sortering

Föreläsning Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Innehåll. Mina målsättningar. Vad krävs för att nå dit? Obligatoriska uppgifter. Websajten. Datastrukturer och algoritmer

Datastrukturer och algoritmer

Introduktionsmöte Innehåll

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

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

Datastrukturer och algoritmer

Föreläsning 5 Innehåll

Tentamen Datastrukturer D DAT 035/INN960

Innehåll. Inblandade personer. ÿkurspresentation Inblandade personer Administration Målsättning Förkunskaper Kursutvärdering Upplägg Översikt

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

Bakgrund och motivation. Definition av algoritmer Beskrivningssätt Algoritmanalys. Algoritmer. Lars Larsson VT Lars Larsson Algoritmer 1

Algoritmer, datastrukturer och komplexitet

Tentamen Datastrukturer, DAT037 (DAT036)

EDAA01 Programmeringsteknik - fördjupningskurs

Föreläsning 9: Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Datastrukturer och algoritmer

Algoritmer, datastrukturer och komplexitet

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

TDDC30/725G63. Objektorienterad programmering i Java, datastrukturer och algoritmer

Komplexitetsklasser och repetition

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

Grundläggande Datalogi

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

Tentamen Datastrukturer (DAT036)

TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 14:00-19:00

Teoretisk del. Facit Tentamen TDDC (6)

Föreläsning 2 Datastrukturer (DAT037)

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

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Algoritmer, datastrukturer och komplexitet

TDDC91 & TDDE22 & 725G97 Datastrukturer och algoritmer Datortentamen (DAT1) , 08 12

Facit Tentamen TDDC (7)

Grundläggande programmering med matematikdidaktisk inriktning för lärare som undervisar i gy eller komvux gy nivå, 7,5 hp

Programmeringsteknik II

Teoretisk del. Facit Tentamen TDDC (6)

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

Tentamen Datastrukturer (DAT036)

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

Objektorienterad modellering och diskreta strukturer. 13. Problem. Sven Gestegård Robertz. Datavetenskap, LTH

Objektorienterad Programmering (TDDC77)

Turingmaskiner och oavgörbarhet. Turingmaskinen. Den maximalt förenklade modell för beräkning vi kommer använda är turingmaskinen.

Föreläsning 14 Innehåll

Datastrukturer och algoritmer

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

OMTENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15-13:15

Tentamen Datastrukturer (DAT037)

Algoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet

Tentamen Datastrukturer (DAT036/DAT037/DIT960)

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

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Processprogrammering och operativsystem Introduktion. Kursinformation. Varför operativsystem?

TDDI16 Datastrukturer och algoritmer Övningsuppgifter hösten 2014

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

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

Föreläsning 4 Datastrukturer (DAT037)

TDDC30 Programmering i Java, datastrukturer och algoritmer

Välkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA

Tentamen Datastrukturer för D2 DAT 035

Datastrukturer och algoritmer

Exempeltenta GruDat 2002/2003

Föreläsning 13 Innehåll

Algoritmer, datastrukturer och komplexitet

samt lite algoritmer en kortfattad introduktion för studenter på Intro:DV

Tentamen: Programutveckling ht 2015

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

Tentamen Datastrukturer (DAT036)

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

TDIU01 (725G67) - Programmering i C++, grundkurs

Seminarium 13 Innehåll

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

729G06 Föreläsning 1 Objektorienterad programmering

Algoritmer och datastrukturer. HI1029 8,0 hp Introduktion

Algoritmer, datastrukturer och komplexitet

n (log n) Division Analysera skolboksalgoritmen för division (trappdivision). Använd bitkostnad.

Automatisk analys av kursplaner med hjälp av språkteknologi

Föreläsning 3 Datastrukturer (DAT037)

Kursanalys. Douglas Wikström 15 juni Problemlösning och programmering under press (DD2458) Högskolepoäng (hp): 9 Kursen gavs: Period 1-2, 2008

Facit Tentamen TDDC kl (6)

Försättsblad till skriftlig tentamen vid Linköpings Universitet

Objektorienterad Programmering (TDDC77)

ORDINARIE TENTAMEN I DATASTRUKTURER OCH ALGORITMER DVG B kl. 08:15 13:15

TDDC70/TDDC91 Datastrukturer och algoritmer Övningsuppgifter hösten 2013

Inledande programmering med C# (1DV402) Introduktion till programmering

Tentamen Datastrukturer D DAT 036/INN960

Transkript:

Föreläsning 1 Introduktion TDDC91: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 29 augusti 2016 Rebecka Geijer Michaeli, IDA, Linköpings universitet 1.1 Innehåll Innehåll 1 Administrativ information 1 1.1 Upplägg............................................ 2 2 DALG introduktion 3 2.1 Algoritmanalys........................................ 5 2.2 Övre och undre gränser.................................... 8 2.3 En beräkningsmodell..................................... 8 1.2 1 Administrativ information Lärare och personal Kursledare, examinator, lektioner: Jonas Wallgren jonas.wallgren@liu.se Föreläsare: Rebecka Geijer Michaeli rebecka.geijer.michaeli@liu.se Assistent, labbar: Simon Keisala simke926@student.liu.se Kursadministratör: Elin Brödje elin.brodje@liu.se 1.3 Litteratur OpenDSA Uppgiftssamling till lektionerna (.pdf på kurshemsidan) Labbkompendium (.pdf på kurshemsidan) 1.4 Examination Skriftlig tentamen (oktober, januari och augusti) Uppgifter i OpenDSA 4 laborationsuppgifter Basgruppsarbete Laborationerna skall vara redovisade senast vid första tentamenstillfället. Det är iofs möjligt att redovisa laborationerna senare, men endast i samband med kursens omtentamenstillfällen. Kontakta i så fall laborationsassistenten i god tid. Om laborationskursen inte är godkänd i sin helhet vid andra omtentamenstillfället skall nästa års laborationskurs göras i sin helhet. 1.5 1

1.1 Upplägg Föreläsningar Administration, mål, komplexitet, ordo-notation Algoritmanalys Enkla abstrakta datatyper: stack, kö, lista Hashning, skiplistor Binära sökträd AVL-träd, multivägs-sökträd Prioritetsköer, heapar Sortering I Sortering II ADTn graf Grafsökning, topologisk sortering, kortaste väg Metoder för algoritmdesign Reserv Lektioner 5 lektioner i form av räknestugor Uppgiftssamling tillgänglig via kurshemsidan Laborationer Hashning (Java) Binära sökträd (Java) Quick-sort (Java) Ordkedjor (Java) Var vänlig registrera er senast 11 sep i webreg och i Kattis Bonusproblem Ett nytt problem i samband med varje föreläsning Bonuspoäng på tentan 0-3 lösta uppgifter ger 0 bonuspoäng. 4-7 lösta uppgifter ger 1 bonuspoäng. 8-11 lösta uppgiter ger 2 bonuspoäng. 12-13 lösta uppgifter ger 3 bonuspoäng. 1.6 1.7 1.8 1.9 Din insats i kursen Följ undervisningen (om du vill) Plugga under hela kursen Gör uppgifterna i OpenDSA Gör datorlabb 1 4 Lös bonusproblem för att få bonuspoäng Tenta! Första chansen är den 24 oktober Kursens hemsida http://www.ida.liu.se/~tddc91/ 1.10 Påbyggnadskurser TDDD20 Konstruktion och analys av algoritmer Grundläggande tekniker. (Giriga algoritmer, dekomposition och dynamisk programmering.) NP-fullständighet. (Teorin för NP-fullständighet och dess konsekvenser.) Inexakta metoder. (Konstruktion och analys av approximationsalgoritmer och randomiserade algoritmer.) TDDD65 Introduction to the Theory of Computation Ändliga automater och reguljära uttryck. Kontextfria grammatiker och pushdown-automater. Turingmaskiner och Church-Turing thesis. Ordonotationen, komplexitetsanalys av algoritmer. Tidskomplexitetsklasser P och NP. NP-kompletta problem. Orientering om rumskomplexitet. 1.11 2

2 DALG introduktion Kursöversikt Datastrukturer Hur lagrar man data effektivt Teoretiskt sett effektiva datastrukturer Praktiskt sett effektiva datastrukturer Algoritmer Hur löser man problem effektivt Analys av komplexitet Exempel på olika slags algoritmer Sorteringsalgoritmer Grafalgoritmer 1.12 Gammalt ursprung, nya möjligheter Studiet av algoritmer har pågått åtminstone sedan Euklides Formaliserades av Church och Turing på 1930-talet Vissa viktiga algoritmer upptäcktes av studenter i liknande kurser som denna! 1.13 För att kunna lösa annars olösbara problem T.ex. nätverkskonnektivitet 1.14 För intellektuell stimulans 1.15 3

För att bli en kunnig programmerare 1.16 För att DALG kan hjälpa oss att lista ut saker om livet och universum Datorbaserade modeller ersätter matematiska modeller alltmer i dagens vetenskap 1.17 DALG grunder Abstrakta datatyp (ADT) maskinoberoende högnivåbeskrivning av data och operationer på data t.ex. Stack, Kö, Mängd,... Datastruktur logisk organisation av datorns minne för att lagra data Algoritm högnivåbeskrivning av konkreta operationer på datastrukturer ADT implementeras med lämpliga datastrukturer och algoritmer Program implementerar algoritmer och datastrukturer i något visst programspråk 1.18 4

Definition 1 (Algoritm). En algoritm är en ändlig beskrivning av hur man steg för steg löser ett problem. En algoritm tar oftast indata som beskriver en probleminstans och producerar utdata som beskriver probleminstansens lösning. En algoritm kan ses som en funktion A : PROBLEMINSTANSER LÖSNINGAR. A probleminstanser lösningar 1.19 Algoritm Korrekthet att det beräknade utdatat för varje givet indata stämmer med problemets beskrivning Algoritmanalys tids- och minnesåtgång, skalbarhet, effektivitet, värsta fallet, bästa fallet, medelfallet, amorterad analys Algoritmiska paradigm vanligt förekommande problemlösningsstrategier, t.ex. rekursiv nedbrytning, dynamisk programmering, giriga algoritmer,... Pseudokod algoritmer beskrivs med pseudokod, en blandning av naturligt språk och programmeringskonstruktioner 1.20 ADT diskussion En ADT berättar vad som ska göras: en uppsättning operationer på data. För att beskriva hur detta ska göras väljer vi en datastruktur (en representation i minnet) konstruerar vi algoritmer som utför ADT-operationerna Samma ADT kan implementeras med olika datastrukturer med olika algoritmer Algoritmerna beror på den valda datastrukturen. Välj den mest effektiva lösningen. Vad är effektivitet? 1.21 2.1 Algoritmanalys Analys av algoritmer Vad ska vi analysera? Korrekthet (inte i denna kurs) Terminering (inte i denna kurs) Effektivitet, resursförbrukning, komplexitet Tidskomplexitet hur lång tid tar algoritmen i värsta fallet? som funktion av vad? vad är ett tidssteg? Minneskomplexitet hur stort minne behöver algoritmen i värsta fallet? som funktion av vad? mätt i vad? tänk på att funktions- och proceduranrop också tar minne 1.22 5

Hur man kan jämföra effektivitet Studera exekveringstid (eller minnesåtgång) som en funktion av storleken på indata. När är två algoritmer lika effektiva? När är en algoritm bättre än en annan? Jämförelse med några elementära funktioner n log 2 n n nlog 2 n n 2 2 n 2 1 2 2 4 4 16 4 16 64 256 6.5 10 4 64 6 64 384 4096 1.84 10 19 1.84 10 19 µsekunder = 2.14 10 8 dagar = 583.5 årtusenden 1.23 Förenkla beräkningarna 1.24 Hur komplexitet kan anges växande Ω( ) Θ( ) O( ) Hur ändras komplexiteten för växande storlek n på indata? Asymptotisk komplexitet vad händer när n växer mot oändligheten? Mycket enklare om vi bortser från konstanta faktorer. 6

O( ) växer högst lika snabbt som Ω( ) växer minst lika snabbt som Θ( ) växer lika snabbt som 1.25 Ordo-notation f,g: växande funktioner från N till R + f O(g) omm det existerar c > 0,n 0 > 0 sådana att c g(n) för alla n n 0 Intuition: Bortsett från konstanta faktorer växer f inte snabbare än g f Ω(g) omm det existerar c > 0,n 0 > 0 sådana att c g(n) för alla n n 0 Intuition: Bortsett från konstanta faktorer växer f minst lika fort som g Θ(g(n)) omm O(g(n)) och g(n) O( ) Intuition: Bortsett från konstanta faktorer växer f och g lika snabbt NOTERA: Ω är motsatsen till O, dvs f Ω(g) omm g O( f ). 1.26 Jämförelser av tillväxt 4g(n) 3g(n) 2g(n) g(n) n 4g(n) 4g(n) 3g(n) 2g(n) 3g(n) 2g(n) Ω(g),Θ(g),O(g)...? g(n) n g(n) n 1.27 Regler för ordo-notation Om är ett polynom av grad d så gäller O(n d ), dvs Strunta i lägre ordningens termer Strunta i konstanta faktorer Använd minsta möjliga klass av funktioner säg 2n O(n) i stället för 2n O(n 2 ) Använd enklast möjliga representant för klassen säg 3n + 5 O(n) i stället för 3n + 5 O(3n) 1.28 Ett sätt att jämföra tillväxt f,g: växande funktioner från N till R + f O(g) om L < f Ω(g) om L > 0 f Θ(g) om 0 < L < L = lim n g(n) 1.29 7

2.2 Övre och undre gränser Analys av problem Ringa in ett problems komplexitet! Övre gräns: Ge en algoritm som löser problemet. Algoritmens komplexitet är en övre gräns för problemets komplexitet. Undre gräns: Ofta svårt att ange. Egenskaper hos problemet måste användas. måste titta på alla indata Ω(n) måste producera hela utdata beslutsträd ett visst antal olika fall måste särskiljas 1.30 2.3 En beräkningsmodell En farbror Copyright 2009 Los Alamos National Security, LLC All rights reserved John von Neumann (1903 1957) John von Neumann har lämnat viktiga bidrag till den rena matematiken, kvantfysiken, spelteorin, de ekonomiska vetenskaperna och datalogin. Han är en av datavetenskapens banbrytare med bidrag till utvecklingen av logisk design och teorin om cellautomater. Han utvecklade den datorarkitektur som bär hans namn och som utgör grunden för så gott som alla kommersiellt tillgängliga datorer. 1.31 RAM (Random Access Machine) indataband: x 1 x 2... x n programräknare (PC) programsatser minne: r 0 r 1 r 2 r 3. utdataband: y 1 y 2... y n Programmet består av vanliga satser som utförs sekvensiellt (inte parallellt). Varje sats kan bara läsa och påverka ett konstant antal minnesplatser. Bara en symbol kan läsas/skrivas i taget. Varje sats tar konstant tid. På grund av O()-notationens robusthet kan vi strunta i vilka värdena konstanterna har. 1.32 8

Kostnadsmått Enhetskostnad varje operation tar en tidsenhet varje variabel tar upp en minnesenhet beräkningsmodell: RAM Bitkostnad varje bitoperation tar en tidsenhet varje bit tar upp en minnesenhet beräkningsmodeller: RAM med begränsad ordlängd, turingmaskin Exempel: Addition av två n-bitsheltal tid O(1) med enhetskostnad tid O(n) med bitkostnad 1.33 9