Datastrukturer och algoritmer

Slides:



Advertisements
Liknande presentationer
Talföljder formler och summor
Advertisements

Populärt brukar algebra ibland kallas för bokstavsräkning
void hittaMax(int tal[], int antal, int *pmax) { int i; ??=tal[0]; for(i=1;i??) ??=tal[i]; } int main() { int v[]={1,2,3,4,2}; int.
hej och välkomna EKVATIONER Ta reda på det okända talet.
Funktioner och programorganisation
2D1311 Programmeringsteknik med PBL
Sökning och sortering Linda Mannila
Programmeringsteknik Föreläsning 13 Skolan för Datavetenskap och kommunikation.
DAB752: Algoritmteori Leif Grönqvist
För utveckling av verksamhet, produkter och livskvalitet. Rekursiva algoritmer, en annan sort tänkande -Hur -När -Bra/Dåligt (kap 7)
Logikprogrammering Ons, 25/9
Föreläsning 7 Analys av algoritmer T(n) och ordo
P-uppgiften: regler, planering och specifikation
1 Ingenjörsmetodik IT & ME 2009 Föreläsare Dr. Gunnar Malm.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastructurer - Lite mer rekursivitet -Sorterrings algoritmer -- Kapitel 8 Algoritmer.
Algoritmer och datastrukturer
Föreläsning 6 Länkade lista Komplexitet Linjärsökning & binärsökning
2D1311 Programmeringsteknik med PBL Föreläsning 4 Skolan för Datavetenskap och kommunikation.
Programmeringsteknik K och Media
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 5 Python: argument från kommando-tolken
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 6 Asymtotisk analys.
Hashing / Hash tabeller -- Kapitel 20. Hash? Varför en annan datastruktur? Konstant tid för både insert- och find- operationer.
Algoritm analys och rekursiva metoder kap 5,7
Programmering B PHP Lektion 2
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Programmering B PHP Lektion 3
1 ITK:P1 Föreläsning 7 Algoritmer och datastrukturer DSV Marie Olsson.
Vektorer (klassen Vector) Sortering
Algebra och ekvationer
Språkteknologiska metoder Språkteknologisk forskning och utveckling (HT 2006)
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Generiska algoritmer Kan användas på containertyper och arrays Använder iteratorer Implementerar.
1 Föreläsning 3 programmeringsteknik och Matlab 2D1312/ 2D1305 Matlab fortsättning Funkioner, styrstrukturer, manipulering av matriser.
Grundläggande programmering
Problemlösning Veckodagsproblemet Gissa talet Siffersumman.
Algoritmer. Ordet kommer från en persisk författare som kom från al’Khowârizmi (engelskans algorithm). Han skrev boken ’Kitab al jabr w’al-muqabala’.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
För utveckling av verksamhet, produkter och livskvalitet. -Algoritmer och Datastrukturer- -Algoritm analys och sökning algoritmer- Kap 5 -Algoritmer och.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 6: Process- synkronisering.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Namnrum, räckvidd och rekursion Linda Mannila
F. Drewes, Inst. f. datavetenskap1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella språk LISP, ML och.
Programmeringsmetodik
Datastrukturer och algoritmer
Problemlösningsmetodik
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Datastrukturer och algoritmer
2D1311 Programmeringsteknik med PBL Föreläsning 4 Skolan för Datavetenskap och kommunikation.
Anders Sjögren Deklarationsområde och funktioner.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 13 Sortering.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
© Anders Broberg, Lena Kallin Westin, 2007 Datastrukturer och algoritmer Föreläsning 14.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 14.
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 16.
Föreläsning 3 Väsentliga delar i ett Javaprogram Input i paketet extra
Algoritmer och loopar Algoritmer, beräkningsbarhet
Manada.se Kapitel 4 Ekvationer och formler. 4.1 Ekvationer och uttryck.
KPP053, HT2015 MATLAB, Föreläsning 4
Algoritmer och datastrukturer Föreläsning 8 Tidskomplexitet (Weiss kap
Föreläsning 11: Rekursion
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

Datastrukturer och algoritmer Föreläsning 5

Innehåll Algoritmer Experimentell komplexitetsanalys Kapitel 2.1-2.2, Kapitel 12.1-12.4

Algoritmer Definition: Algoritm är en noggrann plan, en metod för att stegvis utföra något

Algoritm 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 Ändlighet Bestämdhet Indata Utdata Genomförbarhet Bilden är tagen från sidan http://en.wikipedia.org/wiki/Donald_Knuth Donald Knuth, 1938- ”The Art of Computer Programming” (första versionen 1968) Kallas ibland algoritm-analysens fader Ä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

Olika sätt att beskriva en algoritm 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 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

Algoritm – naturligt språk Fråga efter antalet personer; kalla talet för Personer. Fråga om mums mumsen är färska; kalla svaret ärFärska. Om ärFärska är sann Multiplicera Personer med 3 (antalMumsMums) Annars Multiplicera Personer med 2 (antalMumsMums) Dela antalMumsMums med 4. Avrunda svaret uppåt till närmaste heltal; kalla detta tal för Paket. Svara med talet Paket.

Algoritm – blockdiagram Program ”Antal mums mums-paket” Läs in Personer och ärFärska Beräkna Paket Visa Paket Beräkna antal mums mums Dela antal mums- mums med 4 och avrunda uppåt

Algoritm – flödesdiagram Start Algoritm – flödesdiagram Läs in personer Läs in ärFärska Är ärFärska sann? mumsmums = personer * 2 mumsmums = personer * 3 paket = mumsmums/4 avrunda uppåt Visa Paket Stop

Algoritm – pseduokod write(”antalet personer”) read(Personer) write(”är mumsmumsen färska?”) read(ärFärska) If ärFärska Then antalMumsMums  Personer * 3 Else antalMumsMums  Personer * 2 Paket  round(antalMumsMums/4) write(paket)

Pseudokod 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 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: =

Pseudokod – exempel 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 Algoritmiska problem & beräkningsbarhet En klass av problem Beräkningsbar omm det finns en Turingmaskin som löser problemet Turing maskin X O X O X

Beräkningsbarhet i praktiken 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 Man känner till en lösning där resurserna som krävs kan begränsas av polynomfunktioner i uppgiftens storlek (n). ”Problemet kan lösas på polynomtid”

Ohanterliga problem Problem som vi (ännu) inte funnit en hanterlig lösning på. Komplexiteten kan vara tex 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

Hantera ohanterbarhet Heuristik Lösa nästan rätt problem Förenkling Tex. schemalägg en lärare i taget Lösa problemet nästan rätt Approximation 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.

Beräkningsbar/hanterbar Alla (matematiska)problem Icke hanterbara - superpolynom (n!, nn, …) Beräkningsbara Ej beräkningsbara Hanterbara - polynom 1+n2+3*n

Hanterligt eller ej... Enligt definitionen är n101000 hanterligt medan 1.00001n inte är hanterligt.

Analys av algoritmer 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! Att implementera Att köra

Litet räkneexempel Antag att 1 operation tar 1s och att vi har n = 109 element i en lista som ska sorteras Om algoritmen i medel kräver n2 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! n2 och dubbelt så snabb => 15500 år n2 och 1000 gånger så snabb => 31år

Exekveringstider - en dator med 1 MIPS, 1*106 op/sek 20 50 100 300 N2 1/10000 1/2500 1/400 1/100 9/100 N5 1/10 3.2 sek. 5.2 min. 2.8 tim. 28.1 dag. 2N 1/1000 1 s 35.7 år 40000 billioner år 7500 siffror år NN 3.3 billioner år 7000 siffror år 18500 siffror år 76800 siffror år Drygt 10 miljarder s på en dag 1*1024 s sedan ”Big Bang”

Mäta tidsåtgången Hur ska vi mäta tidsåtgången? Experimentell analys Implementera algoritmen Kör programmet med varierande datamängd Storlek Sammansättning Använd metoder för tidtagning så som System.currentTimeMillis() Plotta uppmätt data

Exempel t(ms) n

Bästa, värsta & medel Värsta Medel Bästa

Experimentell analys… 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. 2n; 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.