Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

Relaterede dokumenter
Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal

Introduktion. Philip Bille

Søgning og Sortering. Søgning og Sortering. Søgning. Linæer søgning

Søgning og Sortering. Søgning Linæer søgning Binær søgning Sortering Indsættelsessortering Flettesortering. Philip Bille

Analyse af algoritmer

Søgning og Sortering. Philip Bille

Analyse af algoritmer. Analyse af algoritmer. Analyse af algoritmer. Køretid

Algoritmer og invarianter

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Dynamisk programmering

Danmarks Tekniske Universitet

Algoritmedesign med internetanvendelser ved Keld Helsgaun

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

Sortering af information er en fundamental og central opgave.

Sortering. Eksempel: De n tal i sorteret orden

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Sortering af information er en fundamental og central opgave.

Dynamisk programmering

BRP Sortering og søgning. Hægtede lister

Introduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer

Asymptotisk analyse af algoritmers køretider

Danmarks Tekniske Universitet

Sortering. Eksempel: De n tal i sorteret orden

Datalogi C + Datastrukturer og Algoritmer

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Introduktion til datastrukturer. Philip Bille

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Introduktion til datastrukturer

Dynamisk programmering

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Danmarks Tekniske Universitet

Binære søgetræer. Nærmeste naboer Binære søgetræer Indsættelse Predecessor og successor Sletning Trægennemløb. Philip Bille

Algoritmer og Datastrukturer 1. Gerth Stølting Brodal

Bevisteknikker. Bevisteknikker (relevant både ved design og verifikation) Matematisk induktion. Matematisk induktion uformel beskrivelse

Rolf Fagerberg. Forår 2015

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

Algoritmisk geometri

Prioritetskøer og hobe. Philip Bille

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 4 n n 3n n 2 /logn 5 n n (logn) 3n n 2 /logn 4 n n 5 n

Bevisteknikker (relevant både ved design og verifikation)

Divide-and-Conquer algoritmer

Grundlæggende Algoritmer og Datastrukturer. Analyseværktøjer [CLRS, 1-3.1]

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n+logn logn (logn) 7 (3/2) n

Rolf Fagerberg. Forår 2015

Rolf Fagerberg. Forår 2013

DM507 Algoritmer og datastrukturer

Rolf Fagerberg. Forår 2012

Danmarks Tekniske Universitet

Intervalsøgning. Algoritmisk geometri. Motivation for intervaltræer. Intervalsøgning. Lad der være givet en database over ansatte i en virksomhed

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet. Mandag den 22. marts 2004, kl

DM507 Algoritmer og datastrukturer

Introduktion til DM507

Rolf Fagerberg. Forår 2014

Danmarks Tekniske Universitet

Divide-and-Conquer algoritmer

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Orienterede grafer. Orienterede grafer. Orienterede grafer. Vejnetværk

Binære søgetræer. Binære søgetræer. Nærmeste naboer. Nærmeste nabo

Selvstudium 1, Diskret matematik

Sortering i lineær tid

Algoritmer og Datastrukturer 1

Mm6: More sorting algorithms: Heap sort and quick sort - October 29, 2008

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Opgave 1 (10%) I det følgende angiver log n 2-tals-logaritmen af n. Ja Nej. n+3n er O(2n)? n 6 er O(n 5 )? nlogn er O(n 2 /logn)? 4n 3 er O(3n 4 )?

Danmarks Tekniske Universitet

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Sortering. Sortering ved fletning (merge-sort) Del-og-hersk. Merge-sort

DM02 Kogt ned. Kokken. Januar 2006

Danmarks Tekniske Universitet

DM507 Algoritmer og datastrukturer

Asymptotisk analyse af algoritmers køretider

Danmarks Tekniske Universitet

Divide-and-Conquer algoritmer

Grundlæggende Algoritmer og Datastrukturer

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Danmarks Tekniske Universitet

14 Algoritmeanalyse. Noter. Algoritmebegrebet. Hvad er algoritmeanalyse? Problemstørrelse og køretid. Køretid for forskellige kontrolstrukturer.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen (bemærk at log n betegner totals logaritmen): n 2 (log n) 2 2.

Bits DM534. Rolf Fagerberg, 2012

Danmarks Tekniske Universitet

Divide-and-Conquer algoritmer

Forén og find. Introduktion Hurtig find Hurtig forening Vægtet forening Stikompression Dynamiske sammenhængskomponenter.

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: (logn) 5. 5n 2 5 logn. 2 logn

Sortering ved fletning (merge-sort)

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

Flowchart og Nassi ShneidermanN Version. Et flowchart bruges til grafisk at tegne et forløb. Det kan fx være et programforløb for en microcontroller.

Forén og find. Introduktion Hurtig find Hurtig forening Vægtet forening Stikompression Dynamiske sammenhængskomponenter.

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 5n 4. logn. n 4n 5 n/logn. n n/logn 5n

Mindste udspændende træ. Mindste udspændende træ. Introduktion. Introduktion

Mindste udspændende træ

Transkript:

Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Philip Bille

Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3

Algoritmer og datastrukturer Algoritmisk problem. Præcist defineret relation mellem input og output. Algoritme. Metode til at løse et algoritmisk problem. Beskrevet i diskrete og entydige skridt. Matematisk abstraktion af program. Datastruktur. Metode til at organise data så det kan søges i eller manipuleres.

Eksempel: Maksimalt tal Maksimalt tal. Givet en tabel A[0..n-1], find et tal i, således at A[i] er maksimalt. Input. Tabel A[0..n-1]. Output. Et tal i, 0 i < n, så A[i] A[j] for alle indgange j i. Algoritme. Gennemløb A og vedligehold indeks af nuværende maksimale indgang. Returner indeks. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 3 7 15 17 11 2 3 6 8 7 5 9 5 23

Beskrivelse af algoritmer Naturligt sprog. Gennemløb A og vedligehold indeks af nuværende maksimale indgang. Returner indeks. Program. Pseudokode. public static int findmax(int[] A) { int max = 0; for(i = 0; i < n; i++) if (A[i] > A[max]) max = i; return max; } FINDMAX(A, n) max = 0 for i = 0 to n-1 if (A[i] > A[max]) max = i return max

Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3

Toppunkter Toppunkt. Indgang A[i] er et toppunkt hvis A[i] er mindst ligeså stort som dets naboer: A[i] toppunkt hvis A[i-1] A[i] A[i+1] for i {1,.., n-2} A[0] toppunkt A[0] A[1] og A[n-1] er toppunkt hvis A[n-2] A[n-1]. (Tænk A[-1] = A[n] = - ). 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 3 7 15 17 11 2 3 6 8 7 5 9 5 23 Toppunktsproblem. Givet en tabel A[0..n-1], find et tal i, således at A[i] toppunkt. Input. En tabel A[0..n-1]. Output. Et tal i, 0 i < n, så A[i] er et toppunkt.

Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3

Algoritme 1 Algoritme 1. For hver indgang i A, check om den er et toppunkt. Returner indeks på første toppunkt. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 3 7 15 17 11 2 3 6 8 7 5 9 5 23 Pseudokode. TOPPUNKT1(A, n) if A[0] A[1] return 0 for i = 1 to n-2 if A[i-1] A[i] A[i+1] return i if A[n-2] A[n-1] return n-1 Udfordring. Hvordan analyserer vi algoritmen?

Teoretisk analyse Køretid/tidskompleksitet. T(n) = antallet af skridt som algoritmen udfører på et input af størrelse n. Skridt. Læsning/skrivning til hukommelse (x := y, A[i], i = i + 1,...) Arithmetiske/boolske operationer (+, -, *, /, %, &&,, &,, ^, ~) Sammenligninger (<, >, =<, =>, =, ) Programflow (if-then-else, while, for, goto, funktionskald,..) Værstefaldstidskompleksitet (worst-case complexity). Interesseret (næsten altid) i værstefaldstidskompleksitet = maksimal køretid over alle input af størrelse n.

Teoretisk analyse Køretid. Hvad er køretiden T(n) for algoritmen? TOPPUNKT1(A, n) if A[0] A[1] return 0 for i = 1 to n-2 if A[i-1] A[i] A[i+1] return i if A[n-2] A[n-1] return n-1 c1 (n-2) c2 c3 T(n) er en lineær funktion af n: T(n) = an + b, for passende konstanter a og b. Asymptotisk notation. T(n) = Θ(n) T(n) = c1 + (n-2) c2 + c3 Eksperimentiel analyse. Hvad er køretid af algoritmen i praksis? Hvordan passer den teoretisk analyse med praksis?

70 Alg 1 52,5 sek. for 1000 kørsler 35 17,5 0 100k 300k 500k 700k 900k 1.1m 1.3m 1.5m 1.7m 1.9m tabel str.

Toppunkter Algoritme 1 finder et toppunkt i Θ(n) tid. Stemmer overens med praksis. Udfordring. Kan vi gøre det bedre?

Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3

Algoritme 2 Observation. Et (globalt) maksimalt tal i A er et toppunkt. Algoritme 2. Find et maksimalt tal i A med FINDMAX(A, n). 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 3 7 15 17 11 2 3 6 8 7 5 9 5 23 FINDMAX(A, n) max = 0 for i = 0 to n-1 if (A[i] > A[max]) max = i return max

Teoretisk analyse Køretid. Hvad er køretiden T(n) for algoritmen? FINDMAX(A, n) max = 0 for i = 0 to n-1 if (A[i] > A[max]) max = i return max c4 n c5 c6 T(n) = c4 + n c5 + c6 = Θ(n) Ekperimentiel analyse. Bedre konstanter?

70 Alg 1 Alg 2 52,5 sek. for 1000 kørsler 35 17,5 0 100k 300k 500k 700k 900k 1.1m 1.3m 1.5m 1.7m 1.9m tabel str.

Toppunkter Teoretisk Algoritme 1 og 2 finder et toppunkt i Θ(n) tid. Eksperimentielt Algoritme 1 og 2 kører i Θ(n) tid i praksis. Algoritme 2 er en konstant faktor hurtigere end algoritme 1. Udfordring. Kan vi gøre det betydeligt bedre?

Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3

Algoritme 3 Snedig ide. Kig på en vilkårlig indgang A[i] og dens naboer A[i-1] og A[i+1]. Hvor kan vi finde et toppunkt ifht. A[i]? Naboer er A[i] A[i] er toppunkt. Ellers er A voksende i mindst en retning der findes toppunkt i den retning. i-1 i i+1 3 10 7 i-1 i i+1 12 10 7 i-1 i i+1 3 10 15 i-1 i i+1 12 10 15 Udfordring. Hvordan kan vi bruge ide til at lave en effektiv algoritme?

Algoritme 3 Algoritme 3. Kig på midterste indgang A[m] og naboer A[m-1] og A[m+1]. Hvis A[m] er toppunkt, returner m. Ellers fortsæt søgning rekursivt i halvdel af tabel hvor nabo er større end A[m]. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 3 7 15 17 11 2 3 6 8 7 5 9 5 23

Algoritme 3 Algoritme 3. Kig på midterste indgang A[m] og naboer A[m-1] og A[m+1]. Hvis A[m] er toppunkt, returner m. Ellers fortsæt søgning rekursivt i halvdel af tabel hvor nabo er større end A[m]. TOPPUNKT3(A,i,j) m = (i+j)/2) if A[m] naboer return m elseif A[m-1] > A[m] return TOPPUNKT3(A,i,m-1) elseif A[m] < A[m+1] return TOPPUNKT3(A,m+1,j) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 3 7 15 17 11 2 3 6 8 7 5 9 5 23

Algoritme 3 Køretid. Et rekursivt kald tager konstant tid. Hvor mange rekursive kald laver vi? Et rekursivt kald halverer størrelsen af tabellen vi kigger på. Vi stopper når tabellen har størrelse 1. 1. rekursive kald: n/2 2. rekursive kald: n/4. k te. rekursive kald: n/2 k. Efter ~log2 n rekursive kald har tabellen størrelse 1. Køretiden er Θ(log n) Ekperimentiel analyse. Betydeligt bedre? TOPPUNKT3(A,i,j) m = (i+j)/2) if A[m] naboer return m elseif A[m-1] > A[m] return TOPPUNKT3(A,i,m-1) elseif A[m] < A[m+1] return TOPPUNKT3(A,m+1,j)

70 Alg 1 Alg 2 Alg 3 52,5 sek. for 1000 kørsler 35 17,5 0 100k 300k 500k 700k 900k 1.1m 1.3m 1.5m 1.7m 1.9m tabel str.

Toppunkter Teoretisk Algoritme 1 og 2 finder et toppunkt i Θ(n) tid. Algoritme 3 finder et toppunkt i Θ(log n) tid. Eksperimentielt Algoritme 1 og 2 kører i Θ(n) tid i praksis. Algoritme 2 er en konstant faktor hurtigere end algoritme 1. Algoritme 3 er meget, meget hurtigere end algoritme 1 og 2.

Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3