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

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

Föreläsning 2: Grafer. Exempel på graf

Algoritmer, datastrukturer och komplexitet

Föreläsning 5: Grafer Del 1

Grafer MST Top. sortering Starkt samm. komponenter Kortaste avstånd. Grafalgoritmer 1. Douglas Wikström KTH Stockholm

Föreläsning 6 Datastrukturer (DAT037)

Algoritmer, datastrukturer och komplexitet

Föreläsning Datastrukturer (DAT037)

Algoritmer, datastrukturer och komplexitet

Föreläsning Datastrukturer (DAT036)

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

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

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

Tentamen Datastrukturer D DAT 035/INN960

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

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

Grundläggande datalogi - Övning 4

Föreläsning 6 Datastrukturer (DAT037)

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

Föreläsningsanteckningar F6

Föreläsning Datastrukturer (DAT036)

Föreläsning 8 Datastrukturer (DAT037)

Föreläsning Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

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

Tentamen Datastrukturer D DAT 036/INN960

Tentamen Datastrukturer D DAT 035/INN960

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

Pseudokod Analys av algoritmer Rekursiva algoritmer

Föreläsning Datastrukturer (DAT036)

Föreläsning 8 Datastrukturer (DAT037)

Algoritmer, datastrukturer och komplexitet

Föreläsning Datastrukturer (DAT037)

Föreläsning 13 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT037)

Lösningsförslag till tentamen Datastrukturer, DAT037 (DAT036), Tiden det tar att utföra en iteration av loopen är oberoende av värdet på

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

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

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

Sökning och sortering

Algoritmer, datastrukturer och komplexitet

Datastrukturer. föreläsning 8. Lecture 6 1

Lösningar Datastrukturer TDA

Tentamen Datastrukturer (DAT036)

Föreläsning 7 Datastrukturer (DAT037)

Tentamen Datastrukturer (DAT036)

Tentamen Datastrukturer, DAT037 (DAT036)

Tentamen Datastrukturer för D2 DAT 035

Föreläsning 12+13: Approximationsalgoritmer

Asymptotisk komplexitetsanalys

Föreläsning 5 Innehåll

Lösningsförslag till tentamen Datastrukturer, DAT037,

Föreläsning 1 Datastrukturer (DAT037)

Tentamen Datastrukturer D DAT 036/INN960

Föreläsning 2 Datastrukturer (DAT037)

Föreläsning 2 Datastrukturer (DAT037)

Exempeltenta GruDat 2002/2003

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

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

Sortering. Brute-force. Sortering Ordna element enligt relation mellan nyckelvärden

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

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

Föreläsning 2: Grafer. Exempel på graf

Föreläsning 4: Kombinatorisk sökning

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

Datastrukturer. föreläsning 8. Maps 1

Datastrukturer. föreläsning 3. Stacks 1

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

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

Algoritmer, datastrukturer och komplexitet

Tentamen Datastrukturer, DAT037 (DAT036)

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

Algoritmer och datastrukturer, föreläsning 11

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

Föreläsning 5: Dynamisk programmering

Tentamen Datastrukturer (DAT036)

Algoritmer och datastrukturer TDA Fredrik Johansson

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

Föreläsning Datastrukturer (DAT036)

Föreläsning 4 Datastrukturer (DAT037)

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?

Föreläsning 9 Datastrukturer (DAT037)

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

Föreläsning Datastrukturer (DAT036)

Trädstrukturer och grafer

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 Datastrukturer (DAT036/DAT037/DIT960)

Lösningsförslag till tentamen Datastrukturer, DAT037,

Komplexitetsklasser och repetition

Graphs (chapter 14) 1

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

Datastrukturer. föreläsning 7. Maps 1

Datastrukturer och algoritmer

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

Föreläsning 10. Grafer, Dijkstra och Prim

Föreläsning 10. Grafer, Dijkstra och Prim

Grafer, traversering. Koffman & Wolfgang kapitel 10, avsnitt 4

Föreläsning 10. Grafer, Dijkstra och Prim

Tentamen Datastrukturer D DAT 036/DIT960

Transkript:

Föreläsning 1. Introduktion och sökning i graf Vad är en algoritm? Först: Vad är ett problem? Består av indata och ett mål. Indata: [En beskrivning av en struktur.] Mål: [Kan vara Ja/Nej, ett tal eller en struktur.] Exempel: Indata: Ett heltal n. Mål: Är n ett primtal? Vi kallar problemet PRIMTAL. Indata: En lista L med tal. Mål: En lista L som är L i sorterad ordning. Vi kallar problemet SORTERING. Indata: En graf G. Mål: Storleken på den längsta vägen i G. Vi kallar problemet LÄNGSTA VÄG. Algoritmer En algoritm löser ett problem på ett mekaniskt sätt. (En algoritm är som ett dataprogram.) Tre egenskaper hos en idealiserad algoritm är 1. De är plattformsoberoende. 2. De är helt mekaniska och ointelligenta. 3. De ger alltid korrekt resultat. Kursmål 1. Att lära oss konstruera bra algoritmer. 2. Att lära oss identifiera problem som inte kan lösas effektivt. 3. Att lära oss metoder för att ändå kunna hantera svåra problem. Fallstudie Vi studerar en del grundläggande begrepp genom att titta på ett speciellt problem: GENOMSÖKNING AV GRAF. Indata: En riktad graf G och en startnod s. Mål: Hitta alla noder som kan nås från s viaenriktadväg. Vi skall beskriva en lösning på problemet med hjälp av pseudokod. Pseudokod Pseudokod är ett semiformellt programspråk. Den utgör en mall för ett riktigt program. Den lyfter fram huvudidéerna i en algoritm. Den kan användas på valfri detaljnivå.

Vi ger nu en pseudokod för GENOMSÖKNING AV GRAF. Vi tänker oss att grafen har en nodmängd V och en kantmängd E. 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) return U Mängden U ger alla noder som kan nås från s. Det finns två stora frågor kring denna enkla pseudoalgoritm. Den första är hur graferna skall representeras. Den andra är i vilken ordning kanterna i algoritmen skall väljas ut. Representation av grafer Vi visar hur oriktade grafer kan representeras. Tekniken för riktade grafer är i stort sett samma. 1 2 5 3 4 Grannmatris: Grannlista: 1 2 3 4 5 1 2 1 1 0 0 0 2 1 3 4 5 2 1 1 1 3 2 4 3 1 0 4 2 3 5 4 1 5 2 4 5 Representationen kantmatris förekommer också: Det är en V E -matris där element (i, j)är 1 om v i e j, 0 annars. Täta och glesa grafer En tät graf har Θ( V 2 ) kanter och representeras med fördel med en grannmatris. En gles graf har Θ( V ) kanter och representeras lämpligen med någon form av grannlistor. Glesa grafer är vanliga i tillämpningar och prestanda för en algoritm på sådana kan i praktiken vara lika viktigt som tidskomplexiteteni värsta fallet. Graden hos ett hörn är antalet kanter sominnehåller hörnet medan gradtalet hos en grafär det högsta gradtalet för något hörn i grafen.

En förbättrad algoritm Vi använder så kalla Djupet-Först-Sökning (DFS). Vi utgår ifrån att grafen är representerad med grannlistor. DFS går igenom de hörn som kan nås från starthörnet s.detta görs genom att gå så långt det går i grafen utan att återkomma till något hörn och sedan stega tillbaka tills något nytt hörn går att besöka. DFS(V,E,s) (1) foreach u V (2) vis(u) 0 (3) p[u] NULL (4) DFS Visit(s) DFS-Visit(u) (1) vis(u) 1 (2) foreach granne v till u (3) if vis(v) =0 (4) p[v] =u (5) DFS-Visit(v) Efter körning av algoritmen innehåller vis information om vilka noder vi lyckades besöka. Pekarna p ger information om hur sökvägarna såg ut. Tidskomplexitet Tidskomplexiteten är antalet operationer T (n) som krävs för att köra algoritmen då indatas storlek är n. Vi använder ofta s.k. ordoklasser för att beskriva storleken på komplexitet. Tillväxt hos funktioner Komplexiteten beskrivs ofta i O( )-notation. Den bortser från konstanta faktorer 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). Minneskomplexitet 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 av komplexitet 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. 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 av effektiv algoritm En algoritm som arbetar i tid O(n k ) för något k. Kallas för polynomiell algoritm.

Vår algoritm för Djupet-Först-Sökning har komplexitet O( V + E ).Talet V + E är ett naturligt mått på indatas storlek och algoritmen är därför effektiv. Ex: En algoritm för att testa om n är primtal. PRIMTAL(n) (1) for i 2 to n (2) if i n (3) return Inte primtal (4) return Primtal Denna algoritm har komplexitet O( n). Det går att inse att det är för långsamt för stora tal. Det naturliga måttet på indatas storlek är inte n utan log n. Det som önskas är en algoritm som går i tid O((log n) k ) för något k.