Datastrukturer och algoritmer

Relevanta dokument
Datastrukturer och algoritmer

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

Asymptotisk komplexitetsanalys

Datastrukturer och algoritmer (Python) Algoritmer och listor

CS - Computer science. Datateknik Informationsbehandling Datalogi Datavetenskap (ÅA 2008)

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

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

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

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

Programkonstruktion och Datastrukturer

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

Föreläsning 5 Innehåll

Algoritmer, datastrukturer och komplexitet

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

Datastrukturer. föreläsning 3. Stacks 1

Algoritmer, datastrukturer och komplexitet

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Algoritmer och datastrukturer TDA Fredrik Johansson

COMPUTABILITY BERÄKNINGSBARHET. Källa: Goldschlager, Lister: Computer Science A Modern Introduction 2. upplaga 1988, Prentice Hall

TIDS- OCH RUMSKOMPLEXITET

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

Fortsättningskurs i programmering F 2. Algoritmer i Programutveckling Hugo Quisbert Problemexempel 1

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Föreläsning 13 Innehåll

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

Sökning och sortering

Algoritmer, datastrukturer och komplexitet

Magnus Nielsen, IDA, Linköpings universitet

Datastrukturer. föreläsning 2

Datastrukturer D. Föreläsning 2

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

Problemlösning och algoritmer

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

Föreläsning 5. Rekursion

Problemlösning. Planering av program. Konstruktion. Programmeringsmetaforer. Problemlösning. Programmering = Problemlösning

Tommy Färnqvist, IDA, Linköpings universitet

Viktiga begrepp. Algoritm. Array. Binärkod. Blockprogrammering. Bugg / fel och felsökning. Dataspel. Dator

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

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

Problemlösning och funktioner Grundkurs i programmering med Python

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

Analys av algoritmer. Beräkningsbar/hanterbar. Stora Ordo. O(definition) Datastrukturer och algoritmer. Varför analysera algoritmer?

Algoritmer, datastrukturer och komplexitet

Föreläsning 5: Dynamisk programmering

Föreläsning 9: Talteori

Rekursion och induktion för algoritmkonstruktion

Komplexitetsklasser och repetition

Datastrukturer och algoritmer

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret Lektion 1

Algoritmer och datastrukturer TDA143

Pseudokod Analys av algoritmer Rekursiva algoritmer

Algoritmer, datastrukturer och komplexitet

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

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

Block 2: Lineära system

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Tentamen: Programutveckling ht 2015

Tentamen Datastrukturer D DAT 035/INN960

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

a = a a a a a a ± ± ± ±500

Programmera på riktigt

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret Lektion 4

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

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

Laboration: Whitebox- och blackboxtesting

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

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 12. Söndra och härska

Övningsmästarprov 2 + några NP-reduktioner. Algoritmer, datastrukturer och komplexitet

MMA132: Laboration 2 Matriser i MATLAB

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Klassdeklaration. Metoddeklaration. Parameteröverföring

Dagens föreläsning (F15)

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

Algoritmer. Två gränssnitt

Föreläsning 3-4 Innehåll

Rekursion och induktion för algoritmkonstruktion

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Komponentvisa operationer,.-notation Multiplikation (*), division (/) och upphöj till (ˆ) av vektorer följer vanliga vektoralgebraiska

Algoritmer och problemlösning

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Övningsuppgifter #11, Programkonstruktion och datastrukturer

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Programmering: att instruera en maskin att utföra en uppgift, kräver olika språk:

Dugga Datastrukturer (DAT036)

Kommunikation i visuella programmeringsmiljöer

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Föreläsning 5. Rekursion

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

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

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Objektorienterad programmering Föreläsning 8. Copyright Mahmud Al Hakim Agenda (halvdag)

Algoritmer, datastrukturer och komplexitet

MicroPython Ett textbaserad programmeringsspråk för Micro:bit

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

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

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

Dynamisk programmering

Transkript:

Innehåll Föreläsning 5 Algoritmer Experimentell komplexitetsanalys Kapitel 2.1-2.2, Kapitel 12.1-12.4 Algoritmer Algoritm Definition: Algoritm är en noggrann plan, en metod för att stegvis utföra något Ordet algoritm härstammar från en man, al- Khwarizmi (latinsk form Algorismus) enligt sidan http://home.swipnet.se/pelewin/prog/algoritmer.html Hans arbete (början av 800-talet) ligger till grund för modern aritmetik och algebra algebra lär komma från titeln på hans viktigaste verk al- Kitab al-mukhtasar fi hisab al-jabr wál muqabala, Kompendium i ekvationslära Han utarbetade en beräkningsmetod för att lösa ekvationer. Beräkningar gjorda enligt bestämda mönster i flera steg: algoritmer. Krav på algoritmer Bilden är tagen från sidan http://en.wikipedia.org/wiki/donald_knuth Olika sätt att beskriva en algoritm Ändlighet Algoritmen måste sluta Bestämdhet Varje steg måste vara entydigt Indata Måste ha noll eller flera indata Utdata Måste ha ett eller flera utdata Genomförbarhet Varje steg i algoritmen måste gå att utföra på ändlig tid Donald Knuth, 1938- The Art of Computer Programming (första versionen 1968) Kallas ibland algoritmanalysens fader Naturligt språk - man förklarar problemlösningen med vanlig text med införda variabel- och funktionsnamn. Blockdiagram - man visar en grov struktur av problemlösningen i form av ritade "boxar". Varje box kan vara ett delproblem. Flödesschema/flödesdiagram, strukturdiagram - man ritar algoritmen med olika symboler, som visar när och hur saker skall ske i programmet. Finare indelning än blockdiagram, t.ex. kan varje block beskrivas som flödesschema för ett delproblem. Pseudokod - man skriver en blandning av programmeringsspråk och vanlig text, dvs man har variabler, funktioner, kontrollstrukturer etc

Exempelproblem Algoritm naturligt språk Jag ska bjuda på mums mums till kaffet. Hur många förpackningar måste jag köpa? Vi antar följande: Varje förpackning innehåller 4 mums mums Varje person äter i snitt 3 mums mums om de är färska annars äter de bara 2 mums mums i snitt. Detta exempel är inspirerat av korvexemplet på sidan http://www.idt.mdh.se/kurser/cd5310/vt04rjn/lectures/f1-problemsolving.pdf 1. Fråga efter antalet personer; kalla talet för Personer. 2. Fråga om mums mumsen är färska; kalla svaret ärfärska. 3. Om ärfärska är sann 1. Multiplicera Personer med 3 (antalmumsmums) 4. Annars 1. Multiplicera Personer med 2 (antalmumsmums) 5. Dela antalmumsmums med 4. 6. Avrunda svaret uppåt till närmaste heltal; kalla detta tal för. 7. Svara med talet. Algoritm blockdiagram Personer och ärfärska Program Antal mums mums-paket Beräkna antal mums mums Beräkna Dela antal mumsmums med 4 och avrunda uppåt Visa Algoritm flödesdiagram mumsmums = personer * 3 Start personer ärfärska Är ärfärska sann? paket = mumsmums/4 avrunda uppåt mumsmums = personer * 2 Visa Stop Algoritm pseduokod Pseudokod write( antalet personer ) read(personer) write( är mumsmumsen färska? ) read(ärfärska) If ärfärska Then antalmumsmums Personer * 3 Else antalmumsmums Personer * 2 round(antalmumsmums/4) write(paket) Kursen använder pseudokod för att beskriva algoritmer Det finns inget universellt språk utan många dialekter Alla döljer mycket av programspråkens designval, dvs. pseudokoden är programspråksoberoende

Pseudokod programkonstruktioner Pseudokod exempel Beslutsstrukturer: if(...)then...[else...] Villkorsloopar: while(...)do... done eller repeat... Until(...) Räkneloopar: for(...)do... done Arrayindexering: A[i] Anrop: function(args)eller object.metod(args) Returnera värden: return value Tilldelning: Jämförelse: = Algorithm arraymax(a,n) input: An array A storing n integers output: The maximum element in A currentmax A[0] for i 1 to n-1 do if currentmax < A[i] then currentmax A[i] done return currentmax Algoritmer mer formellt Beräkningsbarhet i praktiken Algoritmiska problem & beräkningsbarhet En klass av problem Beräkningsbar omm det finns en Turingmaskin som löser problemet Turing maskin Tid och rum är begränsande resurser Ibland finns bara ett fixt utrymme Ibland blir det dyrare ju mer som används Hanterlig Försöker fånga begreppet praktisk beräkningsbarhet Ett problem är hanterligt om o o Man känner till en lösning där resurserna som krävs kan begränsas av polynomfunktioner i uppgiftens storlek (n). 2 2 3 log n, n, n,(log n), nlog n, n, n, n Problemet kan lösas på polynomtid 10000 Ohanterliga problem Hantera ohanterbarhet Problem som vi (ännu) inte funnit en hanterlig lösning på. n n Komplexiteten kan vara tex 2, n!, n Superpolynomiska: Komplexiteten överstiger varje polynomfunktion P(n) för stora n. Många ohanterliga problem är triviala att förstå och viktiga att lösa! Schemaläggning Handelsresande problemet Heuristik Lösa nästan rätt problem o Förenkling o Tex. schemalägg en lärare i taget Lösa problemet nästan rätt o Approximation o Tex. finna minimum genom att systematiskt söka av ett område med tänkbara lösningar tills skillanden mellan två sökningar är mindre än ett visst värde.

NP-kompletta problem En speciell klass av ohanterliga problem som alla är ekvivalenta: Ekvivalenta: Kan transformeras på polynomtid Högst exponentiell kompexitet Saknar bevis för ohanterbarhet Detta innebär att om vi finner lösning på ett enda av de NP-kompletta problemen så kan vi lösa alla andra problem! Schemaläggningsproblemet är ett NP-komplett problem. Hanterbara - polynom 1+n 2 +3*n Beräkningsbar/hanterbar Icke hanterbara - superpolynom (n!, nn, ) Beräkningsbara Alla (matematiska)problem Ej beräkningsbara Hanterligt eller ej... Analys av algoritmer Enligt definitionen är n 101000 hanterligt medan 1.00001 n inte är hanterligt. Vad vill man analysera hos en algoritm? Exekveringstid Minnesåtgång Korrekthet Varför analysera algoritmer? Är algoritmen praktiskt körbar? Vi vill ha den snabbaste! o Att implementera o Att köra Litet räkneexempel Exekveringstider - en dator med 1 MIPS, 1*10 6 op/sek Antag att 1 operation tar 1μs och att vi har n = 10 9 element i en lista som ska sorteras Om algoritmen i medel kräver n 2 operationer tar det 31000 år att sortera listan! Krävs n*log(n) operationer tar det 30000s 1 arbetsdag. Det spelar inte så stor roll? Datorerna blir ju dubbelt så snabba med jämna mellanrum! n 2 och dubbelt så snabb => 15500 år n 2 och 1000 gånger så snabb => 31år N 2 N 5 2 N N N 10 1/10000 1/10 1/1000 2.8 tim. 20 1/2500 3.2 sek. 1 s 3.3 billioner år 50 1/400 5.2 min. 35.7 år Drygt 10 miljarder μs på en dag 1*10 24 μs sedan Big Bang 7000 100 1/100 2.8 tim. 40000 billioner år 18500 300 9/100 28.1 dag. 7500 76800

Mäta tidsåtgången Exempel Hur ska vi mäta tidsåtgången? Experimentell analys o Implementera algoritmen o Kör programmet med varierande datamängd Storlek Sammansättning o Använd metoder för tidtagning så som System.currentTimeMillis() o Plotta uppmätt data t(ms) n Bästa, värsta & medel Experimentell analys Medel Värsta Bästa Begränsningar med metoden Måste implementera och testa algoritmen Svårt att veta om programmet har stannat eller fast i beräkningarna. T ex. 2 n ; n=100 => 40000 billioner år Experimenten kan endast utföras på en begränsad mängd av data, man kan missa viktiga testdata Hårdvaran och mjukvaran måste vara den samma för alla implementationer.