Algoritmer och problemlösning Perspektiv på datateknik/datavetenskap - Breddföreläsning 4 Peter Dalenius petda@idaliuse Institutionen för datavetenskap - Linköpings universitet 2005-11-04 Översikt Introduktion: Vad är en algoritm? (51) Representation: Hur ser en algoritm ut? (52) Problemlösning: Hur kommer man på en algoritm? (53) Exempel (54-55) Analys: Hur vet man att man gjort rätt? (56) Brookshear, JG (2004) Computer Science An Overview, 8th Ed Vad är en algoritm? Formell definition Ställa in klockan på mikrovågsugnen Baka en sockerkaka Bygga en grävskopa i LEGO Beräkna kontrollsiffran i ett personnummer Kontrollera om ett tal är ett primtal eller inte Sortera en uppsättning med namn i bokstavsordning An algorithm is an ordered set of unambiguous, executable steps, that defines a terminating process Beskrivning av hur man gör något Algoritmernas abstrakta natur Flödesdiagram för TV-kväll Algoritm START SLÅ PÅ TV PÅ KANAL 1 BRA? Ja TITTA EN STUND Nej F = 9C/5 + 32 (defun f (c) (+ 32 (* c 9/5))) ÖKA KANAL BRUS? Ja STÄNG AV TV Multiplicera grader Celsius med 9/5 och addera 32 Nej SLUT 1
Pseudokod för TV-kväll Pseudokod för TV-kväll (2) Slå på TV:n på kanal 1 Så länge det inte brusar Så länge programmet är intressant Titta en stund Byt till högre kanal Slå av TV:n switch(on); while isshowing() while isfun() watch(10); channel channel + 1; switch(off); Konsten att lösa problem Problemlösning 1 Förstå problemet! 2 Ta fram en algoritm för att lösa problemet! 3 Implementera algoritmen i ett program! 4 Utvärdera programmet och kontrollera om det är korrekt samt om det kan återanvändas för att lösa andra problem! Top-down och bottom-up Få in en fot, dvs börja på ett lätt ställe Jämför med liknande lösta problem Stegvis förfining Polya, George (1945) How to solve it Några enkla problem Vad är 217 + 23? 240 Exempel Tre teknologer på olika program tycker om glass Vad heter de, vad pluggar de och vilken favoritglass har de? Använd nedanstående ledtrådar 3x + 5 = 45-2x Definiera en funktion som summerar alla tal i en lista! x = 8 (defun summera (lista) ) 1 Pelle, som tycker bäst om 88:an, pluggar inte på D 2 Henrik Flod bodde i Finspång innan han började plugga 3 Studenten från Y-programmet, som för övrigt tycker bäst om Solero, heter inte Tornving 4 Det är i alla fall inte Carolina som tycker bäst om Magnum 2
Algoritm för att sy ett lapptäcke Algoritm 1 Vi ska sy ett lapptäcke med 64 rutor i fyra färger Hur gör vi det så rationellt som möjligt? 1 Sy ihop kvadraterna i en rad med varandra 2 Sy ihop de färdiga raderna med varandra Algoritm 2 klipp Algoritm 3 klipp 8 remsor 1 Konstruera fyra kvadrater av fyra remsor 2 Skär isär dem till remsor på andra ledden 3 Sy ihop remsorna 1 Sy ihop 8 remsor som är 8 kvadrater breda 2 Sy ihop remsorna till ett rör 3 Skär röret 7 gånger 4 Sprätta en söm i varje cirkel, men på olika ställen 5 Sy ihop de 8 olika remsorna Sökning i telefonkatalogen Sekvensiell sökning Andersson, Anders 174834 Bertilsson, Bertil 264918 Carlsson, Cecilia 265910 Eriksson, Erik 4760148 Fredriksson, Fredrik 174589 Hansson, Hans 4757812 Linghed, Louise 4761278 Malmström, Martin 174219 4750716 267812 204567 Svensson, Sara 4754923 Teknolog, Ture 238918 Uv, Urban 174938 Valfridsson, Vilhelm 4746717 Åkerström, Åke 173489 p 1 upprepa om p > listans längd eller målvärde < namn på position p sökning misslyckad om målvärde = namn på position p sökning lyckad p p+1 3
Sökning i telefonkatalogen (2) Binärsökning Andersson, Anders Bertilsson, Bertil Carlsson, Cecilia Eriksson, Erik Fredriksson, Fredrik Hansson, Hans Linghed, Louise Malmström, Martin Svensson, Sara Teknolog, Ture Uv, Urban Valfridsson, Vilhelm Åkerström, Åke Svensson, Sara Teknolog, Ture Uv, Urban Valfridsson, Vilhelm Åkerström, Åke om listan är tom så sökning misslyckad mittvärde <- mittersta värdet i listan om målvärde = mittvärde sökning lyckad om målvärde < mittvärde sök i första delen av listan sök i andra delen av listan Binärsökning (2) Komplexitet funktion Sök(Lista[1n], Målvärde) om Tom(Lista) så returnera Finns ej Mittvärde <- Lista[n/2] om Målvärde = Mittvärde returnera aktuellt telefonnummer om Målvärde < Mittvärde Sök(Lista[1n/2-1], Målvärde) Sök(Lista[n/2+1n], Målvärde) Tidskomplexitet Hur mycket längre tid tar algoritmen om vi ger den dubbelt så stora indata? Rumskomplexitet Hur mycket mer extra minne kräver algoritmen om vi ger den dubbelt så stora indata? Komplexitet mäts ungefärligt O(1) O(lg n) O(n) O(n 2 ) Tidskomplexitet för lapptäcken Tidskomplexitet för sökalgoritmer antal sömmar 12000 10000 8000 algoritm 1: n 2 6000 4000 2000 algoritm 3: 3n 0 0 10 20 30 40 50 60 70 80 90 100 antal lappar per sida antal jämförelser 60 50 40 sekvensiell: n/2 30 20 binär: lg n 10 0 0 10 20 30 40 50 60 70 80 90 listans längd 4
Framtida kurser TDDB56 Algoritmer och optimering (D) TDDB57 Datastrukturer och algoritmer (C) TDDA32 Konstruktion och analys av algoritmer TDDB41 Komplexitetsanalys 5