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



Relevanta dokument
Datastrukturer och algoritmer

Datastrukturer och algoritmer

Asymptotisk komplexitetsanalys

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

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

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

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

Dagens föreläsning (F15)

Föreläsning 13 Innehåll

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

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

Datastrukturer och algoritmer

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 5 Innehåll

Datastrukturer och algoritmer (Python) Algoritmer och listor

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

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

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

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

Imperativ programmering. Föreläsning 2

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

Tentamen i Algoritmer & Datastrukturer i Java

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

Datastrukturer. föreläsning 3. Stacks 1

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

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

Tommy Färnqvist, IDA, Linköpings universitet

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

Programkonstruktion och Datastrukturer

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

Föreläsning 2 Datastrukturer (DAT037)

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Föreläsning 1 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

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

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

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

Föreläsning 4: Poster

1 Klasser och objektorientering Vad är objektorientering?

Algoritmer, datastrukturer och komplexitet

Algoritmer och datastrukturer TDA Fredrik Johansson

Sökning och sortering

Några svar till TDDC70/91 Datastrukturer och algoritmer

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Uppgift (poäng) 1 (2) 2 (3) 3 (4) 4 (4) 5 (3) 6 (4) 7 (6) 8 (6) 9 (8) Summa

TDDC74 Programmering, abstraktion och modellering. Tentamen

Dugga Datastrukturer (DAT036)

DATALOGISK TÄNKANDE OCH PROGRAMMERING CETIS OKTOBER 2017

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Sätt att skriva ut binärträd

Datastrukturer och algoritmer. Föreläsning 4 Test, Stack och Kö

Föreläsning 1: Dekomposition, giriga algoritmer och dynamisk programmering

Algoritmer, datastrukturer och komplexitet

Grunderna i stegkodsprogrammering

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

Problemlösning och funktioner Grundkurs i programmering med Python

Laboration: Whitebox- och blackboxtesting

GPT The bitter end. Förra veckan: Rekursiva funktioner som läggs in externa filer har stor räckvidd

Twincat: PLC Control

Länkade listor kan ingå som en del av språket, dock ej i C Länkade listor är ett alternativ till:

Beräkningsvetenskap introduktion. Beräkningsvetenskap I

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

SORTERING OCH SÖKNING

Föreläsning 6: Introduktion av listor

Block 2: Lineära system

Föreläsning 5: Dynamisk programmering

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet

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

Visual Basic, en snabbgenomgång

Tentamen Datastrukturer (DAT037)

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Program & programmering

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

Algoritmer, datastrukturer och komplexitet

Algoritmer. Två gränssnitt

Föreläsning Datastrukturer (DAT037)

Föreläsning 1: Introduktion till kursen

Algoritmer och interaktiv Python

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

Programmering B PHP. Specialiseringen mot PHP medför att kursens kod i betygshanteringen heter PPHP1408.

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

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

Algoritmer, datastrukturer och komplexitet

Föreläsning 8 Datastrukturer (DAT037)

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

Ickelinjära ekvationer

Algoritmer, datastrukturer och komplexitet

Föreläsning 1: Intro till kursen och programmering

Algoritmer, datastrukturer och komplexitet

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Datastrukturer D. Föreläsning 2

Lösningar Datastrukturer TDA

Datastrukturer. föreläsning 2

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

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Tentamen Datastrukturer D DAT 035/INN960

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

Transkript:

Algoritmer Lars Larsson VT 2007 Lars Larsson Algoritmer 1

1 2 3 4 5 Lars Larsson Algoritmer 2

Ni som går denna kurs är framtidens projektledare inom mjukvaruutveckling. Som ledare måste ni göra svåra beslut som påverkar slutprodukten. Ni måste således ha koll gällande vilka datatyper och algoritmer som är lämpliga i en situation, och framförallt varför. Lars Larsson Algoritmer 3

et med denna föreläsning är att studenterna skall ha förvärvat kunskap om: vad en algoritm är och vilka krav som ställs på dem, hur algoritmer kan beskrivas entydigt, vilka aspekter av algoritmer som kan analyseras, varför algoritmer analyseras och hur algoritmer kan analyseras experimentellt. Lars Larsson Algoritmer 4

Informell definition Formell definition Informellt är en algoritm som ett recept som man följer för att lösa ett givet problem på ett strukturerat sätt: Ett ändligt antal steg beskriver en ändlig process. Lars Larsson Algoritmer 5

Informell definition Formell definition Den formella definition vi använder på kursen är följande: Definition En algoritm är en noggrann plan, en metod för att stegvis utföra något. Lars Larsson Algoritmer 6

Informell definition Formell definition Donald Knuth ställer upp följande krav på algoritmer för att de skall vara korrekta: 1 Ändlighet algoritmer måste sluta. 2 Bestämdhet varje steg måste vara entydigt. 3 Indata måste ha noll eller flera indata. 4 Utdata måste ha ett eller flera utdata. 5 Effektivitet/genomförbarhet varje steg i algoritmen måste gå att utföra på ändlig tid. Lars Larsson Algoritmer 7

Naturligt språk Flödesscheman Pseudokod Pseudokod språkelement På grund av Knuths andra krav om bestämdhet måste vi vara mycket noggranna när vi skriver algoritmer. Detta ställer krav på vårt sätt att uttrycka oss. Vi kan välja (bland annat) något av följande sätt: (i stort sett) naturligt språk, flödesscheman, pseudokod. Lars Larsson Algoritmer 8

Naturligt språk Flödesscheman Pseudokod Pseudokod språkelement Naturligt språk är vanligt språk, så som vi talar till vardags. Vi kan begränsa oss till att åtminstone använda vissa väldefinierade termer, för att undvika synonymer utan att tappa mycket i uttrycksfullhet. Problemet kvarstår dock att naturligt språk inte är precist nog. Lars Larsson Algoritmer 9

Naturligt språk Flödesscheman Pseudokod Pseudokod språkelement Datorn är en formell beräkningsmodell. Alla algoritmer måste förr eller senare uttryckas på ett formellt korrekt och entydigt sätt för datorn om den som utvecklar algoritmen lämnar något oklart till implementatören, är det upp till implementatören att göra de återstående valen. Lars Larsson Algoritmer 10

Naturligt språk Flödesscheman Pseudokod Pseudokod språkelement Inte minst de som läser ID kommer med säkerhet att stöta på hierarchical task analysis som är ett mycket smidigt sätt att blanda naturligt språk med en hierarkisk indelning av hur uppgifter löses. Detta kan ses som ett sätt att beskriva algoritmer, och rekommenderas för den intresserade. Se för mer information (finns via UB och på nätet): Shepherd, Andrew (1998). HTA as a framework for task analysis. Ergonomics, Vol. 4. issue 11, sid 1537 1552. Lars Larsson Algoritmer 11

Naturligt språk Flödesscheman Pseudokod Pseudokod språkelement Flödesscheman visar, som namnet antyder, hur flödet i ett program går. Villkorssatser och slingor representeras grafiskt med hjälp av former som i figuren nedan. Lars Larsson Algoritmer 12

Naturligt språk Flödesscheman Pseudokod Pseudokod språkelement Det sätt vi vanligtvis presenterar algoritmer (och kommer göra under kursens gång) på är i pseudokod. Pseudokod påminner om ett programmeringsspråk, men vi tillåts (sparsamt) använda vissa konstruktioner som påminner om naturligt språk. Delar av algoritmer som är uppenbara måste inte skrivas ut i kodform, utan kan bara beskrivas med en enkel mening. Lars Larsson Algoritmer 13

Naturligt språk Flödesscheman Pseudokod Pseudokod språkelement Det sätt vi vanligtvis presenterar algoritmer (och kommer göra under kursens gång) på är i pseudokod. Pseudokod påminner om ett programmeringsspråk, men vi tillåts (sparsamt) använda vissa konstruktioner som påminner om naturligt språk. Delar av algoritmer som är uppenbara måste inte skrivas ut i kodform, utan kan bara beskrivas med en enkel mening. Pseudokod låter oss abstrahera bort sådant som hör implementationen till, exempelvis minneshanteringskod, felkontroller och så vidare. Algoritmen står helt i fokus. Lars Larsson Algoritmer 13

Naturligt språk Flödesscheman Pseudokod Pseudokod språkelement Pseudokodens utseende varierar mycket beroende på författare, tillfälle och val av notation. Dock gäller Knuths fem krav, så algoritmen måste fortfarande vara entydig. Lars Larsson Algoritmer 14

Naturligt språk Flödesscheman Pseudokod Pseudokod språkelement Pseudokodens utseende varierar mycket beroende på författare, tillfälle och val av notation. Dock gäller Knuths fem krav, så algoritmen måste fortfarande vara entydig. Det går att ha en egen stil på pseudokoden, men den måste gå att tolka på ett vettigt sätt. Eftersom läsaren antas vara programmerare kan man blanda friskt mellan matematisk notation ({, },,,...) och nyckelord från programmeringsspråk. Lars Larsson Algoritmer 14

Naturligt språk Flödesscheman Pseudokod Pseudokod språkelement Beslutsstrukturer: if (...) then... [else...] Villkorsslingor: while (...) do... done eller repeat... until (...) Räkneslingor: for (...) do... done Arrayindexering: A[i] Anrop: function(arg1, arg2,...) eller object.method(arg1, arg2,...) Returnera värden: return value Tilldelning: := (ej att förväxla med jämförelse =) Lars Larsson Algoritmer 15

Naturligt språk Flödesscheman Pseudokod Pseudokod språkelement function arraymax(a, n): input: an array A of n integer values output: the maximum integer in A currentmax := A[0] for (i = 1 to n - 1) do if (currentmax < A[i]) then currentmax := A[i] return currentmax Lars Larsson Algoritmer 16

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Innan vi implementerar vår färska entydiga och välskrivna algoritm i ett programmeringsspråk, vill vi med fördel analysera hur effektiv den är. Baserat på analysen kan vi sedan välja rätt algoritm för situationen. Lars Larsson Algoritmer 17

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Vi kan av olika teoretiska anledningar inte analysera allting om en algoritm. Vi kan dock analysera några väldigt viktiga egenskaper, inte minst deras komplexitet och deras exekveringstid och minnesåtgång. Lars Larsson Algoritmer 18

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Vi analyserar exekveringstid och minnesåtgång för att vi söker algoritmer som är praktiskt körbara och effektiva! En fråga att ta hänsyn till är vad effektivitet innebär i vissa lägen kan det duga med en algoritm som är snabbare att implementera än en som ger exekveringstidsförbättringar men som är jobbigare att implementera. Lars Larsson Algoritmer 19

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Av alla problem som finns är bara en delmängd beräkningsbara, alltså att en dator kan behandla dem överhuvudtaget. Av de beräkningsbara problemen är bara en delmängd hanterbara, alltså att en dator kan behandla dem effektivt. Det finns även problem som vi i nuläget ser som icke-hanterbara, eftersom vi ännu inte har vettiga effektiva lösningar på dem. Lars Larsson Algoritmer 20

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Det finns dock ett sätt att hantera icke-hanterbara problem (de är vanligare än man tror, exempelvis är schemaläggning ett sådant). Vad vi dock kan göra är att: vi löser nästan rätt problem, genom att införa begränsningar och således förenklar problemet eller vi kan också lösa problemet nästan rätt, alltså göra approximationer och nöja oss med ett svar som inte nödvändigtvis är det helt rätta men som duger i sammanhanget. Lars Larsson Algoritmer 21

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Vi kan mäta tidsåtgången och således få en bild av hur komplexiteten för algoritmen är genom att använda en stoppklocka, eller ännu hellre via ett program. I UNIX och på Mac finns exempelvis kommandot time som kan ge oss sådan information. Lars Larsson Algoritmer 22

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Vi kan mäta tidsåtgången och således få en bild av hur komplexiteten för algoritmen är genom att använda en stoppklocka, eller ännu hellre via ett program. I UNIX och på Mac finns exempelvis kommandot time som kan ge oss sådan information. Det finns dock ett problem: hur vet vi att programmet fortfarande körs? Tänk om det har hängt sig? Tänk om det störs av andra processer? Lars Larsson Algoritmer 22

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Antag att vi har en dator som klarar 1 operation på en µs och att vi har en lista som består av n = 10 9 element. Lars Larsson Algoritmer 23

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Antag att vi har en dator som klarar 1 operation på en µs och att vi har en lista som består av n = 10 9 element. Använder vi en dålig sorteringsalgoritm som kräver n 2 antal operationer, så tar det runt 31000 år att sortera listan. Lars Larsson Algoritmer 23

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Antag att vi har en dator som klarar 1 operation på en µs och att vi har en lista som består av n = 10 9 element. Använder vi en dålig sorteringsalgoritm som kräver n 2 antal operationer, så tar det runt 31000 år att sortera listan. Använder vi dock en smart sorteringsalgoritm som kräver n log(n) operationer tar det istället runt 30000 sekunder, ungefär motsvarande en arbetsdag. Lars Larsson Algoritmer 23

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Antag att vi har en dator som klarar 1 operation på en µs och att vi har en lista som består av n = 10 9 element. Använder vi en dålig sorteringsalgoritm som kräver n 2 antal operationer, så tar det runt 31000 år att sortera listan. Använder vi dock en smart sorteringsalgoritm som kräver n log(n) operationer tar det istället runt 30000 sekunder, ungefär motsvarande en arbetsdag. Men, givetvis är datorer snabbare än så! Och de blir snabbare för varje år! Problemet kvarstår dock: med en tusen gånger snabbare dator tar det ändå 31 år i n 2 -fallet... Lars Larsson Algoritmer 23

för analys Varför analys genomförs Beräkningsbarhet och hanterbarhet Experimentell mätning Exekveringstidsexempel Nästa föreläsning, den som följer direkt efter denna, handlar tack och lov om ett matematiskt sätt att bestämma komplexiteten exakt, så vi slipper sådana problem! Lars Larsson Algoritmer 24