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

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

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Rebecka Geijer Michaeli, IDA, Linköpings universitet. 1 Administrativ information Upplägg... 2

Föreläsning 12+13: Approximationsalgoritmer

Föreläsning 5 Innehåll

Tommy Färnqvist, IDA, Linköpings universitet. 1 Administrativ information Upplägg... 2

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

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

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Komplexitetsklasser och repetition

Sökning och sortering

Datastrukturer och algoritmer

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

Asymptotisk komplexitetsanalys

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Lösningsförslag för tentamen i Datastrukturer (DAT037) från

Föreläsning 13 Datastrukturer (DAT037)

Pseudokod Analys av algoritmer Rekursiva algoritmer

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

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

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

Föreläsning 9: NP-fullständighet

Föreläsning Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

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

Föreläsning 8: Intro till Komplexitetsteori

Föreläsning 2 Datastrukturer (DAT037)

Tentamen: Programutveckling ht 2015

Föreläsning 7+8: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

Tentamen i Algoritmer & Datastrukturer i Java

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

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 13 Innehåll

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

Föreläsning 1 Datastrukturer (DAT037)

Algoritmer och datastrukturer TDA143

Föreläsning 8+9: NP-problem. Begreppet effektiv algoritm är alltså synonymt med går i polynomisk tid i den här kursen. Är detta en rimlig uppdelning?

Tentamen med lösningsförslag Datastrukturer för D2 DAT 035

Tentamen Datastrukturer D DAT 035/INN960

Algoritmer, datastrukturer och komplexitet

Datastrukturer och algoritmer

Algoritmer, datastrukturer och komplexitet

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

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

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

Grundläggande datalogi - Övning 4

Föreläsning 5: Grafer Del 1

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

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

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

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet

Prov i DAT 312: Algoritmer och datastrukturer för systemvetare

Föreläsning Datastrukturer (DAT037)

Tentamen i EDAF05 Algoritmer, datastrukturer och komplexitet

Föreläsning 2 Datastrukturer (DAT037)

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

Tentamen Datastrukturer (DAT037)

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Teoretisk del. Facit Tentamen TDDC (6)

Tentamen Datastrukturer D DAT 036/INN960

Teoretisk del. Facit Tentamen TDDC (6)

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 035/INN960 (med mycket kortfattade lösningsförslag)

Tommy Färnqvist, IDA, Linköpings universitet

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 5: Giriga algoritmer. Kruskals och Prims algoritmer

Programkonstruktion och Datastrukturer

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

Föreläsning Datastrukturer (DAT036)

Tentamen Datastrukturer D DAT 035/INN960

Tentamen Datastrukturer, DAT037 (DAT036)

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

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

Föreläsning 4: Giriga algoritmer. Giriga algoritmer

Exempeltenta GruDat 2002/2003

samt lite algoritmer en kortfattad introduktion för studenter på Intro:DV

Magnus Nielsen, IDA, Linköpings universitet

Föreläsning 7 Datastrukturer (DAT037)

Föreläsning 2. Kortaste vägar i grafer.

Tentamen kl Uppgift 4. Uppgift 5

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

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

Algoritmer och datastrukturer TDA Fredrik Johansson

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

Föreläsning 5: Dynamisk programmering

Teoretisk del. Facit Tentamen TDDC kl (6) 1. (6p) "Snabba frågor" Alla svar motiveras väl.

Föreläsning 4 Datastrukturer (DAT037)

Föreläsning 9 Datastrukturer (DAT037)

Lösning av några vanliga rekurrensekvationer

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

SORTERING OCH SÖKNING

Lösningar Datastrukturer TDA

Föreläsning Datastrukturer (DAT036)

I en matchning ligger varje hörn i högst en kant. I en stig ligger varje hörn i högst två kanter.

Transkript:

Några exempel på algoritmer. Föreläsning 1. Introduktion Vad är en algoritm? 1. Häll 1 dl havregryn och ett kryddmått salt i 2 1 2 dl kallt vatten. Koka upp och kocka gröten ca 3minuter. Rör om då och då. Servera t.ex med mjölk eller hallonsylt. 2. Olika arter får leva tillsammans med begränsade resurser. De enstaka inviderna fortplantar sig och dör. Nya arter uppstår genom förändringar i arvsmassan. Förändringar som uppstår kommer att överleva om de klarar konkurrensen med de andra arterna. 3. Insättningssortering(A) (1) for j =2to length (A) (2) key A[j] (3) i j 1 (4) while i>0 och A[i] >key (5) A[i +1] A[i] (6) i i 1 (7) A[i +1] key (8) return A Utmärkande drag: Indata/Utdata

Informell beskrivning: En algoritm är en ändlig beskrivning av hur man steg för steg löser ett problem. Algoritmen tar indata, som beskriver ett problem och producerar utdata, en lösning till problemet. Tre egenskaper hos idealiserade algoritmer 1. De är plattformsoberoende. De skall kunna simuleras på olika sätt. 2. De är helt mekaniska och ointelligenta. 3. De ger alltid korrekt resultat. En algoritm kan ses som en funktion: A: Probleminstanser Lösningar Algoritm Instanser Lösningar Denna beskrivning är rent matematisk och tar inte hänsyn till hur effektiv en algoritm är. Algoritmer antas vara presenterade på en form som kan översättas till ett dataprogram. Ofta kommer vi att beskriva algoritmer i s.k. pseudokod. (Mer om detta senare.) Mer detaljerad beskrivning: Beräkningsmodeller - Matematisk beskrivning av beräkningar. - Turingmaskiner, RAM, automater. Beräkningsmodeller ger en precisering av hur programkroppen i en algoritm kan fungera. Används mest för att bevisa begränsningar hos algoritmer. Vad är en effektivalgoritm? Standardmåttet som används är tidskomplexitet. Ex: Vi sorterar n st tal med insättningssortering. Det tar tid cn 2 för stora n. Konstanten c är beroende av implementation och man försöker att tänka bort den genom att använda s.k. ordo-klasser.

Tillväxt hos funktioner Komplexiteten beskrivs ofta i O( )-notation. Den bortser från konstantafaktorer och anger vad som händer då n. f(n) O(g(n)) om f(n) växer högst lika snabbt som g(n). D.v.s. det finns c>0 och n 0 så att f(n) cg(n) för alla n n 0. f(n) Θ(g(n)) om f(n) och g(n) växer lika snabbt. f(n) Ω(g(n)) om f(n) växer minst lika snabbt som g(n). Ett annat komplexitetsmått är minneskomplexitet: Storleken på minnet som krävs för att utföra en beräkning. Tidskomplexitet anses vara det viktigaste komplexitetsmåttet. Tre problem med definition avkomplexitet 1. Tiden är proportionell mot antalet operationer. Vad räknas som en operation? ex: Beräkna 521 394 = 205274 med vanlig algoritm. Hur många operationer krävs? Tvåmöjligasvar: a. En operation! b. 521 har 9 bitar. 394 har 8 bitar. Totalt krävs 9 8=72 De två typerna av kostnad är: Enhetskostnad: Varje grundläggande operation tar en tidsenhet. Varje variabel upptar en minnesenhet. (Beräkningsmodell: RAM) Bitkostnad: Varje operation på en enskild bit tar en tidsenhet. En bit upptar en minnesenhet. Bägge dessa mått på kostnaden används. 2. Indatas storlek. Antag att ett komplicerat objekt är indata. Vad är då indatas storlek? I princip är det storleken lika med antalet bitar i den effektivaste representationen av objektet i en datastruktur. I praktiken kan det ibland vara svårt att avgöra vad det är. 3. Medelvärde/Värsta fall.

Ex: Quicksort är en känd algoritm för att sortera en lista tal. I medeltal kräver den O(n log n) operationer. I värsta fall kan den dock kräva O(n 2 ) operationer. Vanligen används värsta fall som mått. Skäl: Det är ofta svårt att känna till sannolikhetsfördelningen på möjliga indata för en korrekt medeltalsberäkning. Värsta fall är enklare att beräkna och är i många fall ungefär lika med medeltal. Definition aveffektivalgoritm En algoritm som arbetar i tid O(n k ) för något k. Kallas för polynomiell algoritm. Korrekthetsanalys Med korrekthetsanalys menas ett bevis för att algoritmen gör det den är tänkt att göra. Generella principer för korrekthetsanalys är mycket komplicerade. Ett knep som är omtyckt är invarianter. De används vid analys av loopar i algoritmer. En invariant är ett påstående som är sant innan man går in i loopen, är sant medan man kör loopen och när man går ut ur loopen. (Problemet är att visa att något är en invariant.) Invarianten används sedan för att visa att algoritmen uppnår rätt resultat. Ex: Grafsökning(G, s, t) (1) U {s} (2) while t/ U och det finns kant (v, w) med v U och w/ U (3) U U {w} (4) if t U (5) return Ja (6) return Nej Den naturliga invarianten här är att U hela tiden är en sammanhängande mängd noder som innehåller s. När man går ur slingan så finns antingen t i U eller så är U en maximal sammanhängande mängd utan t. Komplexitetsteori Handlar om analys av problem som inte går att lösa effektivt med någon algoritm. Vad är ett problem? En abstrakt beskrivning är att ett problem består av Indata/Mål. Givet indata skall man skall man ha reda på svaret, kallat Målet, på en fråga. Ex: Indata: En graf G. Mål: En färgning av grafen med k färger (om en sådan finns).

Ett problem definieras med variabel indata. Som t.ex. SORTERING Indata: Lista {a 1,a 2,..., a n } av tal. Mål: En sortering {a i1,a i2,..., a in } så att a i1 a i2... Ett specialfall av ett problem kallas för en instans av problemet. Instans av SORTERING. Indata: {7, 3, 9, 2, 4} Mål: {2, 3, 4, 7, 9} En algoritm löser ett problem om den löser alla instanser. Olika typer avproblem Beslutsproblem: Givet indata är utdata Ja eller Nej. Vanligen är problemfrågan: Givet indata, finns en lösning eller ej. Optimeringsproblem: Givet indata är utdata ett tal. Vanligen presenteras storleken på en optimal lösning till problemet. Konstruktionsproblem: Givet indata är utdata en struktur. Vanligen presenteras lösningen till problemet. Svåra problem 1. Problem som inte kan lösas med någon algoritm. 2. Problem som inte kan lösas med någon effektivalgoritm. Det går att visa att problem av båda typerna finns. Det stora problemet inom komplexitetsteori är att avgöra vilka problemen av typ 2 är. Vanligt redskap: Reduktioner Om ett problem A kan reduceras till ett problem B så är inte A svårare att lösa än B. Om A är svårt måste också B vara svårt. En viktig klass av förmodat svåra problem: NP-fullständiga problem. Klassen NP Antag att ett beslutsproblem är av följande slag: Givet indata x, finns det en lösning? Antag att det finns en polynomiell algoritm A som givet data y avgör om y är en lösning till problemet. A(x, y) = Ja/Nej. Då tillhör problemet klassen NP. De flesta svåra NP-problemen verkar ha exponentiell lösningstid. P NP Öppet problem: P=NP?

Kursöversikt Beräkningsmodeller - Matematisk beskrivning av beräkningar. - Turingmaskiner, RAM, automater. Konstruktion och analys aveffektiva algoritmer Viktiga speciella algoritmer - grafalgoritmer - flödesalgoritmer - sorteringsalgoritmer - linjärprogrammering Viktiga generella metoder - dekomposition - giriga algoritmer - dynamisk programmering strut Komplexitetsberäkningar och korrekthetsanalys. Komplexitetsteori - Vilka beräkningsresurser kräver ett problem? - Problem som inte kan lösas av någon dator. - Problem som saknar effektiva algoritmer. - Reduktioner mellan problem. - Komplexitetsklasser. Förkunskaper från INDA/TILDA Sorterings- och sökalgoritmer (t.ex. QuickSort resp. binärsökning). Datastrukturer: Listor, stackar, träd, heapar, hashtabeller. Algoritmanalys med O( )-notation. Motivering av hur och varför en algoritm fungerar.