Algoritmedesign med internetanvendelser ved Keld Helsgaun

Relaterede dokumenter
Analyse af algoritmer. Algoritmedesign med internetanvendelser ved Keld Helsgaun. Køretid. Algoritmebegrebet D. E. Knuth (1968)

Analyse af algoritmer

Asymptotisk analyse af algoritmers køretider

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

Asymptotisk analyse af algoritmers køretider

Algoritmer og Datastrukturer 1. Gerth Stølting Brodal

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.

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

Algoritmer og Datastrukturer 1

Danmarks Tekniske Universitet

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

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

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

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

DM507 Algoritmer og datastrukturer

Introduktion. Philip Bille

Rolf Fagerberg. Forår 2015

Introduktion til DM507

Rolf Fagerberg. Forår 2013

Grundlæggende køretidsanalyse af algoritmer

Danmarks Tekniske Universitet

Rolf Fagerberg. Forår 2015

Danmarks Tekniske Universitet

Rolf Fagerberg. Forår 2014

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Rolf Fagerberg. Forår 2012

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

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Netværksalgoritmer 1

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet

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

Algoritmer og datastrukturer Course No Cheat Sheet May 15, 2012

02105 Eksamensnoter. Lasse Herskind S maj Sortering 3

Danmarks Tekniske Universitet

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: 7 n 1/ log n. (log n) 4

Analyse af ombytningspuslespil

Martin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox

Opskriv følgende funktioner efter stigende orden med hensyn til O-notationen: n 7 n 1 7 7/n. 7nlogn. 7n 7nlogn n7

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

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

BRP Sortering og søgning. Hægtede lister

Bevisteknikker (relevant både ved design og verifikation)

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

Analyse af ombytningspuslespil

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

Danmarks Tekniske Universitet

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

Datalogi C + Datastrukturer og Algoritmer

Algoritmer og invarianter

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm3: More about recurrences - October 10, 2008

Sortering. Eksempel: De n tal i sorteret orden

DM507 Algoritmer og datastrukturer

Sortering ved fletning (merge-sort)

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

Algoritmisk geometri

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO) Mm2: Rekursive algoritmer og rekurrens - October 12, 2010

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jimmy Jessen Nielsen (JJE) Mm2: Rekursive algoritmer og rekurrens - October 10, 2008

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

Selvstudium 1, Diskret matematik

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Sortering af information er en fundamental og central opgave.

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Skriftlig Eksamen Algoritmer og Datastrukturer (dads)

Bits DM534. Rolf Fagerberg, 2012

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

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 1. Datalogisk Institut Aarhus Universitet. Mandag den 22. marts 2004, kl

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

Sortering. Eksempel: De n tal i sorteret orden

Sortering af information er en fundamental og central opgave.

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

28 Algoritmedesign. Noter. PS1 -- Algoritmedesign

DM507 Algoritmer og datastrukturer

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

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

Teoretiske Øvelsesopgaver:

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO), Jens Myrup Pedersen (JMP) Mm4: Sorting algorithms - October 23, 2009

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

DATALOGISK INSTITUT, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

INSTITUT FOR DATALOGI, AARHUS UNIVERSITET. Det Naturvidenskabelige Fakultet EKSAMEN. Grundkurser i Datalogi

Indhold. Maskinstruktur Kapitel 1. Assemblersprog Indledning Hop-instruktioner Input og output...

Divide-and-Conquer algoritmer

Algorithms and Architectures I Rasmus Løvenstein Olsen (RLO) Mm1: Introduction to analysis and design of algorithms - October 11, 2010

Transkript:

Algoritmedesign med internetanvendelser ved Keld Helsgaun 1

Analyse af algoritmer Input Algoritme Output En algoritme er en trinvis metode til løsning af et problem i endelig tid 2

Algoritmebegrebet D. E. Knuth (1968) En algoritme er en endelig, præcis og effektiv procedure med output Endelig: Algoritmen vil terminere efter et endeligt antal trin Præcis: Hvert trin skal være defineret i præcise og utvetydige termer Effektiv: Hvert trin skal kunne udføres i endelig tid Procedure: Algoritmen består af trin Output. Algoritmen må producere et resultat 3

Køretid De fleste algoritmer omformer input til output Køretiden for en algoritme vokser typisk med størrelsen af input Gennemsnitlig køretid er ofte vanskelig at bestemme Vi fokuserer på værste tilfælde, da det (1) er lettere at analysere (2) ofte er vigtigt (ja måske kritisk) Køretid 120 100 80 60 40 20 0 bedste tilfælde gennemsnitlige tilfælde værste tilfælde 1000 2000 3000 4000 Størrelse af input 4

Eksperimentel analyse (1) Skriv et program, der implementerer algoritmen (2) Kør programmet med input af varierende størrelse (3) Brug en metode som System.currentTimeMillis() i Java til at måle køretider (4) Plot resultaterne Køretid (ms) 9000 8000 7000 6000 5000 4000 3000 2000 1000 0 0 50 100 Størrelse af input 5

Ulemper ved eksperimentel analyse Det er nødvendigt at implementere algoritmen, hvilket kan være svært Resultaterne behøver ikke at være retningsgivende for input, der ikke er medtaget i eksperimenterne Hvis to algoritmer skal sammenlignes, skal det ske med det samme materiel og programmel 6

Teoretisk analyse Benytter en højniveau-beskrivelse af algoritmen i stedet for en implementering Karakteriserer køretiden som en funktion af inputstørrelsen Tager hensyn til alle mulige input Muliggør vurdering af en algoritmes hastighed uafhængigt af materiel og programmel 7

Pseudokode Højniveau-beskrivelse af en algoritme Mere struktureret end prosa Mindre detaljeret end programkode Eksempel: find det største element i et array Algorithm arraymax(a, n) Input array A of n integers Output maximum element of A currentmax A[0] for i 1 to n 1 do if A[i] > currentmax then currentmax A[i] return currentmax 8

Pseudokode-detaljer Kontrolstrukturer if then [else ] while do repeat until for do Indrykning erstatter parenteser Metodeerklæring Algorithm method(arg [, arg ]) Input Output Metodekald method(arg [, arg ]) Returnering af værdi return expression Udtryk Tildeling (svaret til = i Java) Test for lighed = (svarer til == i Java) n 2 Matematisk notation er tilladt 9

Random Access Machine (RAM) model En CPU En ubegrænset mængde lagerceller, som hver kan indeholde et tal eller et tegn 0 1 2 Lagercellerne er nummererede, og en tilgang til en hvilken som helst celle tager en tidsenhed 10

Primitive operationer De basale operationer foretaget af en algoritme Kan identificeres i pseudokoden Stort set uafhængige af programmeringssprog Antages at tage konstant tid i RAM-modellen Eksempler: Evaluering af et udtryk Tildeling af en værdi til en variabel Indeksering i et array Kald af en metode Returnering fra en metode 11

Optælling af primitive operationer Ud fra pseudokoden kan vi bestemme det maksimale antal primitive operationer, der udføres af en algoritme, som en funktion af inputstørrelsen Algorithm arraymax(a, n) # operationer (max)) currentmax A[0] 2 for i 1 to n 1 do 1 + n if A[i] > currentmax then 2(n 1) currentmax A[i] 2(n 1) { increment counter i } 2(n 1) return currentmax 1 I alt 7n 2 12

Estimering af køretid Algoritmen arraymax udfører i værste tilfælde 7n 2 primitive operationer Definer a = Den tid, det tager at udføre den hurtigste primitive operation b = Den tid, det tager at udføre den langsomste primitive operation og lad T(n) være den værste tid for arraymax Da gælder a(7n 2) T(n) b(7n 2) Køretiden er altså opadtil og nedadtil begrænset af to lineære funktioner 13

Vækstraten for køretiden Et skift til en anden maskine påvirker T(n) med en konstant faktor, men ændrer ikke på vækstraten for T(n) Lineær vækst af køretiden T(n) er en fundamental egenskab ved algoritmen arraymax 14

Vækstrater Eksempler på vækstrater: Lineær n Kvadratisk n 2 Kubisk n 3 I et log-log diagram svarer linjens hældningskoefficient til funktionens vækstrate T(n) 1E+30 1E+28 Kubisk 1E+26 1E+24 Kvadratisk 1E+22 1E+20 Lineær 1E+18 1E+16 1E+14 1E+12 1E+10 1E+8 1E+6 1E+4 1E+2 1E+0 1E+0 1E+2 1E+4 1E+6 1E+8 1E+10 n 15

Konstante faktorer Vækstraten påvirkes ikke af konstante faktorer og lavereordens termer Eksempler: 10 2 n + 10 5 er en lineær funktion 10 5 n 2 + 10 8 n er en kvadratisk funktion T(n) 1E+26 Kvadratisk 1E+24 1E+22 Kvadratisk 1E+20 Lineær 1E+18 Lineær 1E+16 1E+14 1E+12 1E+10 1E+8 1E+6 1E+4 1E+2 1E+0 1E+0 1E+2 1E+4 1E+6 1E+8 1E+10 n 16

O-notation (store-o) Givet funktionerne f(n) og g(n) Vi siger, at f(n) er O(g(n)), hvis der findes positive konstanter c og n 0, således at f(n) cg(n) for n n 0 Eksempel: 2n + 10 er O(n) 2n + 10 cn (c 2) n 10 n 10/(c 2) Vælg c = 3 og n 0 = 10 10,000 1,000 100 10 1 3n 2n+10 n 1 10 100 1,000 n 17

Eksempel Eksempel: Funktion n 2 er ikke O(n) n 2 cn n c Denne ulighed kan ikke tilfredsstilles, da c skal være en konstant 1,000,000 100,000 10,000 1,000 100 10 n^2 100n 10n n 1 1 10 100 1,000 n 18

Flere eksempler 7n-2 er O(n) Bestem c > 0 og n 0 1, så 7n-2 cn for n n 0 Det gælder for c = 7 og n 0 = 1 3n 3 + 20n 2 + 5 er O(n 3 ) Bestem c > 0 og n 0 1, så 3n 3 + 20n 2 + 5 cn 3 for n n 0 Det gælder for c = 4 og n 0 = 21 3 log n + log log n er O(log n) Bestem c > 0 og n 0 1, så 3 log n + log log n c log n for n n 0 Det gælder for c = 4 og n 0 = 2 19

O og vækstrater O-notationen giver en øvre grænse for vækstraten for en funktion Udsagnet f(n) er O(g(n)) betyder, at vækstraten for f(n) ikke er større end vækstraten for g(n) g(n) vokser hurtigst f(n) vokser hurtigst Samme vækstrate f(n) er O(g(n)) Ja Nej Ja g(n) er O(f(n)) Nej Ja Ja 20

Regler Hvis f(n) er et polynomium af orden d, så gælder, at f(n) er O(n d ). Fjern lavere-ordens led Fjern konstante faktorer Benyt så lille orden som muligt: Sig 2n er O(n) i stedet for 2n er O(n 2 ) Benyt så simpelt et udtryk som muligt: Sig 3n + 5 er O(n) i stedet for 3n + 5 er O(3n) Sig 75 + 25 er O(1) i stedet for 75+ 25 er O(100) 21

Asymptotisk algoritmeanalyse Asymptotisk analyse af en algoritme udtrykker køretiden i O-notation (1) Find det værste tilfælde og bestem antallet af primitive operationer som en funktion af inputstørrelsen (2) Udtryk denne funktion ved O-notation Eksempel: Vi afgør, at algoritmen arraymax højst udfører 7n 2 primitive operationer. Vi siger, at algoritmen arraymax udføres i O(n) tid Eftersom konstante faktorer og lavere-ordens led udelades, kan vi se bort fra dem, når vi tæller antallet af primitive operationer 22

Eksempel på asymptotisk analyse Beregning af løbende gennemsnit Det i te løbende gennemsnit, A[i], af et array X er gennemsnittet af de første (i +1) elementer i X: A[i] = (X[0] + X[1] + + X[i])/(i+1) 0 1 2 3 4 5 6 23

Løbende gennemsnit (i kvadratisk tid) Algorithm prefixaverages1(x, n) Input array X of n integers Output array A of prefix averages of X #operationer A new array of n integers n for i 0 to n 1 do n s X[0] n for j 1 to i do 1 + 2 + + (n 1) s s + X[j] 1 + 2 + + (n 1) A[i] s / (i + 1) n return A 1 Summen af de første n heltal er n(n + 1) / 2 Køretiden er derfor O(n 2 ) 24

Løbende gennemsnit (i lineær tid) Nedenstående algoritme bestemmer løbende gennemsnit i lineær tid ved at vedligeholde en løbende sum. Algorithm prefixaverages2(x, n) Input array X of n integers Output array A of prefix averages of X #operationer A new array of n integers n sum 0 1 for i 0 to n 1 do n sum sum + X[i] n A[i] sum / (i + 1) n return A 1 25

Slægtninge til store-o Store-Omega f(n) er Ω(g(n)), hvis der findes en konstant c > 0 og en heltalskonstant n 0 1, således at f(n) cg(n) for n n 0 Store-Theta f(n) er Θ(g(n)), hvis der findes konstanter c > 0 og c > 0, samt en heltalskonstant n 0 1, således at c g(n) f(n) c g(n) for n n 0 Lille-o f(n) er o(g(n)), hvis der for enhver konstant c > 0 findes en heltalskonstant n 0 0, således at f(n) cg(n) for n n 0 Lille-omega f(n) er ω(g(n)), hvis der for enhver konstant c > 0 findes en heltalskonstant n 0 0, således at f(n) cg(n) for n n 0 26

Intuitiv beskrivelse af asymptotisk notation Store-O f(n) er O(g(n)), hvis f(n) er asymptotisk mindre end eller lig med g(n) Store-Omega f(n) er Ω(g(n)), hvis f(n) er asymptotisk større end eller lig med g(n) Store-Theta f(n) er Θ(g(n)), hvis f(n) er asymptotisk lig med g(n) Lille-o f(n) er o(g(n)), hvis f(n) er asymptotisk skarpt mindre end g(n) Lille-omega f(n) er ω(g(n)), hvis f(n) er asymptotisk skarpt større end g(n) 27

Intuitiv beskrivelse af asymptotisk notation For en funktion f er o(f), O(f), Θ(f), Ω(f) og ω(f) mængder af funktioner karakteriseret på følgende måde: o(f) : vokser langsommere end f O(f) : vokser højst så hurtigt som f Θ(f) : vokser som f Ω(f) : vokser mindst så hurtigt som f ω(f) : vokser hurtigere end f 28

Citat People who analyze algorithms have double happiness. First of all they experience the sheer beauty of elegant mathematical patterns that surround elegant computational procedures. Then they receive a practical payoff when their theories make it possible to get other jobs done more quickly and more economically. Donald E. Knuth 29