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

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

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

Algoritmedesign med internetanvendelser ved Keld Helsgaun

Danmarks Tekniske Universitet

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

Sortering af information er en fundamental og central opgave.

Dynamisk programmering

BRP Sortering og søgning. Hægtede lister

Asymptotisk analyse af algoritmers køretider

Danmarks Tekniske Universitet

Sortering. Eksempel: De n tal i sorteret orden

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

Datalogi C + Datastrukturer og Algoritmer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

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

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

Dynamisk programmering

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

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

Introduktion til datastrukturer. Philip Bille

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

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

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

Introduktion til datastrukturer

Rolf Fagerberg. Forår 2015

Algoritmisk geometri

Skriftlig Eksamen Algoritmer og Datastrukturer 1. Datalogisk Institut Aarhus Universitet

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

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

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

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

Rolf Fagerberg. Forår 2014

Divide-and-Conquer algoritmer

Danmarks Tekniske Universitet

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

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

Selvstudium 1, Diskret matematik

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

Sortering i lineær tid

Introduktion til DM507

DM507 Algoritmer og datastrukturer

Algoritmer og Datastrukturer 1

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

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Danmarks Tekniske Universitet

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 )?

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

Asymptotisk analyse af algoritmers køretider

DM507 Algoritmer og datastrukturer

Danmarks Tekniske Universitet

Divide-and-Conquer algoritmer

Danmarks Tekniske Universitet

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

Danmarks Tekniske Universitet

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

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.

Danmarks Tekniske Universitet

Divide-and-Conquer algoritmer

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.

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

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Grundlæggende Algoritmer og Datastrukturer

Netværksalgoritmer 1

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

Mm7: A little bit more about sorting - and more times for exercises - November 4, 2008

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Science and Technology EKSAMEN. Grundkurser i Datalogi. Algoritmer og Datastrukturer 1 (2003-ordning)

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

DM507 Algoritmer og datastrukturer

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Transkript:

Philip Bille 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.

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 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] = - ). 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.

Algoritme 1. For hver indgang i A, check om den er et toppunkt. Returner indeks på første toppunkt. 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 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. Udfordring. Hvordan analyserer vi algoritmen? Teoretisk analyse Køretid. Hvad er køretiden T(n) for algoritmen? 70 Alg 1 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 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 c1 (n-2) c2 c3 sek. for 1000 kørsler 52,5 35 17,5 Eksperimentiel analyse. Hvad er køretid af algoritmen i praksis? Hvordan passer den teoretisk analyse med praksis? 0 100k 300k 500k 700k 900k 1.1m 1.3m 1.5m 1.7m 1.9m tabel str.

Toppunkter finder et toppunkt i Θ(n) tid. Stemmer overens med praksis. Udfordring. Kan vi gøre det bedre? Algoritme 2 Observation. Et (globalt) maksimalt tal i A er et toppunkt.. Find et maksimalt tal i A med FINDMAX(A, n). 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 FINDMAX(A, n) max = 0 for i = 0 to n-1 if (A[i] > A[max]) max = i return max T(n) = c4 + n c5 + c6 = Θ(n) Ekperimentiel analyse. Bedre konstanter?

sek. for 1000 kørsler 70 52,5 35 Alg 1 Alg 2 Toppunkter Teoretisk og 2 finder et toppunkt i Θ(n) tid. Eksperimentielt og 2 kører i Θ(n) tid i praksis. er en konstant faktor hurtigere end algoritme 1. Udfordring. Kan vi gøre det betydeligt bedre? 17,5 0 100k 300k 500k 700k 900k 1.1m 1.3m 1.5m 1.7m 1.9m tabel str. 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. 3 10 7 12 10 7 3 10 15 12 10 15 Udfordring. Hvordan kan vi bruge ide til at lave en effektiv algoritme?

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]. 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) 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) sek. for 1000 kørsler Alg 1 Alg 2 Alg 3 70 52,5 35 17,5 0 100k 300k 500k 700k 900k 1.1m 1.3m 1.5m 1.7m 1.9m tabel str.

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