Ladda ner presentationen
1
Datastrukturer och algoritmer
Föreläsning 5
2
Innehåll Algoritmer Experimentell komplexitetsanalys
Kapitel , Kapitel
3
Algoritmer Definition: Algoritm är en noggrann plan, en metod för att stegvis utföra något
4
Algoritm Ordet algoritm härstammar från en man, al-Khwarizmi (latinsk form Algorismus) enligt sidan 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.
5
Krav på algoritmer Ändlighet Bestämdhet Indata Utdata Genomförbarhet
Bilden är tagen från sidan 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
6
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
7
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
8
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.
9
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
10
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
11
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)
12
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
13
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: =
14
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
15
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
16
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”
17
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
18
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.
19
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.
20
Beräkningsbar/hanterbar
Alla (matematiska)problem Icke hanterbara - superpolynom (n!, nn, …) Beräkningsbara Ej beräkningsbara Hanterbara - polynom 1+n2+3*n
21
Hanterligt eller ej... Enligt definitionen är n hanterligt medan n inte är hanterligt.
22
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
23
Litet räkneexempel Antag att 1 operation tar 1s och att vi har n = 109 element i en lista som ska sorteras Om algoritmen i medel kräver n2 operationer tar det å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 => år n2 och 1000 gånger så snabb => 31år
24
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”
25
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
26
Exempel t(ms) n
27
Bästa, värsta & medel Värsta Medel Bästa
28
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 => 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.
Liknande presentationer
© 2024 SlidePlayer.se Inc.
All rights reserved.