Grundlæggende køretidsanalyse af algoritmer Algoritmers effektivitet Størrelse af inddata Forskellige mål for køretid Store -notationen Klassiske effektivitetsklasser Martin Zachariasen DIKU 1
Algoritmers effektivitet To forskellige mål for en algoritmes effektivitet: 1. Tidsforbrug: Hvad er algoritmens køretid? 2. Pladsforbrug: Hvad er algoritmens (ekstra) lagerforbrug? Samlet benævnes tids- og pladsanalyse også kompleksitetsanalyse. I det efterfølgende fokuseres udelukkende på teknikker til forudsigelse af algoritmers tidsforbrug (lignende teknikker benyttes til analyse af pladsforbrug). 2
Tidskompleksitet Første observation: Næsten alle algoritmer kræver længere køretid for at løse større problemer. Vi ønsker derfor at besvare følgende spørgsmål: Hvordan forøges en algoritmes køretid som funktion af størrelsen af inddata? 3
Tidskompleksitet Første observation: Næsten alle algoritmer kræver længere køretid for at løse større problemer. Vi ønsker derfor at besvare følgende spørgsmål: Hvordan forøges en algoritmes køretid Giver anledning til flere spørgsmål: som funktion af størrelsen af inddata? Størrelsen af inddata : Hvad er et godt mål for størrelsen af inddata til en algoritme? Køretiden : For hvilke inddata af størrelse skal vi måle køretiden? På hvilken computer skal vi måle køretiden? Hvilket programmeringssprog og hvilken oversætter skal vi benytte? [...] 3-a
Et eksempel: Sekventiel søgning i et array Der er givet et array af heltal med indgange. 89 45 68 17 29 34 90 27 Findes elementet e=34 i arrayet? Benyt sekventiel søgning: Sammenlign med for indtil der er et sammenfald (om noget overhovedet). 4
Definition af inddatastørrelse I mange tilfælde kan vi lade betegne antallet af elementer i inddata, f.eks. antallet af elementer der skal sorteres eller antallet af elementer i det array hvor sekventiel søgning skal foretages. 5
matrice med knuder og heltal, hvert på Definition af inddatastørrelse I mange tilfælde kan vi lade betegne antallet af elementer i inddata, f.eks. antallet af elementer der skal sorteres eller antallet af elementer i det array hvor sekventiel søgning skal foretages. Dog ikke problemfrit. Hvad er problemstørrelsen for følgende inddata? en elementer der er forskellige fra nul en graf med kanter en liste med en liste med strenge cifre 5-a
matrice med knuder og heltal, hvert på Definition af inddatastørrelse I mange tilfælde kan vi lade betegne antallet af elementer i inddata, f.eks. antallet af elementer der skal sorteres eller antallet af elementer i det array hvor sekventiel søgning skal foretages. Dog ikke problemfrit. Hvad er problemstørrelsen for følgende inddata? en elementer der er forskellige fra nul en graf med kanter en liste med en liste med strenge cifre Generel definition af inddatastørrelse: Antallet af bit der benyttes ved en fornuftig repræsentation af inddata. I alle de efterfølgende eksempler er inddata elementer (f.eks. heltal) af begrænset størrelse. 5-b
Definition af køretid Vi ønsker at estimere køretiden ved at tælle antallet af basale operationer som algoritmen foretager. 6
Definition af køretid Vi ønsker at estimere køretiden ved at tælle antallet af basale operationer som algoritmen foretager. Eksempel: I sekventiel søgning er sammenligning af to heltal den basale operation. 6-a
Definition af køretid Vi ønsker at estimere køretiden ved at tælle antallet af basale operationer som algoritmen foretager. Eksempel: I sekventiel søgning er sammenligning af to heltal den basale operation. Antag at den basale operation kan udføres i op tid på en bestemt computer. Lad være antallet af udførte basale operationer for inddatastørrelse. Så er op 6-b
Køretidens afhængighed af inddata For en given algoritme findes der mange forskellige inddata af størrelse. Hvilke inddata skal benyttes til estimering af køretiden? 7
Køretidens afhængighed af inddata For en given algoritme findes der mange forskellige inddata af størrelse. Hvilke inddata skal benyttes til estimering af køretiden? Eksempel: I sekventiel søgning kan antallet af basale operationer (sammenligninger) variere fra til sammenligninger, afhængig af inddata. 7-a
Køretidens afhængighed af inddata For en given algoritme findes der mange forskellige inddata af størrelse. Hvilke inddata skal benyttes til estimering af køretiden? Eksempel: I sekventiel søgning kan antallet af basale operationer (sammenligninger) variere fra til sammenligninger, afhængig af inddata. Tre muligheder for valg af inddata: Værste-tilfælde Estimer køretiden for inddata som giver den længste køretid. Bedste-tilfælde Estimer køretiden for inddata som giver den korteste køretid. Gennemsnits-tilfælde Estimer gennemsnitskøretiden for alle inddata. 7-b
Hvorfor benytte værste-tilfælde som mål for køretid? Fordele: Simpelt og veldefineret mål. Giver en garanti for den maksimale køretid hvilket er væsentligt for mange realtids systemer. Er langt nemmere at analysere end f.eks. gennemsnits-tilfælde. Er en etableret standard indenfor køretidsanalyse af algoritmer. Ulemper: Pessimistisk mål for en algoritmes effektivitet. Kan afvige væsentligt fra den typiske eller gennemsnitlige opførsel af en algoritme. 8
Køretid som funktion af inddatastørrelse Det essentielle spørgsmål: Hvordan vokser køretiden som funktion af inddatastørrelsen? 9
Køretid som funktion af inddatastørrelse Det essentielle spørgsmål: Hvordan vokser køretiden som funktion af inddatastørrelsen? Eksempel: Lad antallet af basale operationer være. Hvis inddata bliver dobbelt så stort, forøges køretiden med en faktor op op op op Bemærk: Både denne udregning! op og den multiplikative faktor går ud dvs. er uden betydning i 9-a
Store- notationen Definition En funktion siges at være læses storeaf af hvis der findes en positiv konstant og et positivt heltal således at for alle 10
og et positivt heltal således at af Store- notationen Definition En funktion en positiv konstant siges at være læses storeaf for alle Eksempler: er : vælg og. er : vælg og, eller er : vælg og. er : vælg og. 10-a hvis der findes og.
Klassiske effektivitetsklasser Klasse Betegnelse Eksempler Konstant Læsning/skriving/sammenligning af enkelte elementer Logaritmisk Binær søgning Lineær Sekventiel søgning; enkelt løkke n-log-n Hurtig sortering Faktoriel Generering af alle permutationer Eksponentiel Generering af alle delmængder Kubisk Tre indlejrede løkker Kvadratisk Langsom sortering; to indlejrede løkker 11
Vækst af køretid for klassiske effektivitetsklasser Klasse 12
Konstant køretid Køretid opadtil begrænset af en konstant uafhængig af inddata. basale operationer sjældent af en komplet algoritme. Typisk køretid for 13
Konstant køretid Køretid opadtil begrænset af en konstant uafhængig af inddata. basale operationer sjældent af en komplet algoritme. Typisk køretid for Eksempler: Addition, multiplikation eller sammenligning af to tal af typen int eller double. Bemærk at addition, multiplikation eller sammenligning af to tal med konstant-tids algoritme, hvis er vilkårlig. cifre ikke er en 13-a
Logaritmisk køretid logaritmer med forskellige grundtal er proportionale: Det er ikke nødvendigt at specificere grundtallet for logaritmen i et storeudtryk, idet logaritmen med grundtal 2, dvs. hvis I det følgende betegner. så er 14
Logaritmisk køretid logaritmer med forskellige grundtal er proportionale: Det er ikke nødvendigt at specificere grundtallet for logaritmen i et storeudtryk, idet logaritmen med grundtal 2, dvs. hvis 34 I det følgende betegner. så er Eksempel: Binær søgning. Søg efter element i sorteret array. #ops #elem 17 27 29 34 45 68 89 90 17 27 29 34 29 14-a
Lineær køretid Svarer til den tid det tager at læse inddata. søgning og initialisering af et array tager lineær køretid. Elementære algoritmer som sekventiel 15
Lineær køretid Svarer til den tid det tager at læse inddata. søgning og initialisering af et array tager lineær køretid. Elementære algoritmer som sekventiel Eksempel: Fletning af to sorterede arrays eller lister af samlet længde. 17 45 68 89 27 29 34 90 17 27 29 34 45 68 89 90 Antallet af sammenligninger er præcis, dvs. køretiden er. 15-a
køretid Hurtige sorteringsalgoritmer har denne køretid. Der er ikke særlig stor forskel på lineær og tid i praksis. 16
køretid Hurtige sorteringsalgoritmer har denne køretid. Der er ikke særlig stor forskel på lineær og tid i praksis. Eksempel: Flettesortering af elementer. #ops #elem 89 45 68 17 29 34 90 27 4 45 89 17 68 29 34 27 90 6 17 45 68 89 27 29 34 90 7 17 27 29 34 45 68 89 90 Antallet af sammenligninger er mindre end, hvor og. Altså er køretiden. 16-a
Kvadratisk køretid 17
68 89 29 34 90 45 5 Kvadratisk køretid Eksempel: Udvælgelsessortering af elementer. #ops 89 45 68 17 29 34 90 27 7 #elem 17 45 68 89 29 34 90 27 6 17 27 17 27 29 89 68 34 90 45 4 17 27 29 34 68 89 90 45 3 17 27 29 34 45 89 90 68 2 17 27 29 34 45 68 90 89 1 17 27 29 34 45 68 89 90 Antallet af sammenligninger er mindre end, dvs. køretiden er. 17-a
Eksponentiel køretid Typisk køretid for algoritmer, som genererer alle delmængder af en mængde. Bemærk at der er forskellige delmængder af en -element mængde. 18
Eksponentiel køretid Typisk køretid for algoritmer, som genererer alle delmængder af en mængde. Bemærk at der er forskellige delmængder af en -element mængde. Eksempel: Lad der være givet en mængde med heltal. Undersøg om mængden kan opsplittes i to dele, så summen af tallene i de to delmængder er ens. Der findes ingen algoritme, der (i værste-tilfælde) er hurtigere end den trivielle: Generer alle delmængder og undersøg om summen af elementerne i delmængden og dens komplement er ens. 18-a
Faktoriel/supereksponentiel køretid Denne køretid fås for algoritmer, der undersøger alle permutationer (rækkefølger) af en -element mængde. Der er forskellige permutationer af en -element mængde. 19
Faktoriel/supereksponentiel køretid Denne køretid fås for algoritmer, der undersøger alle permutationer (rækkefølger) af en -element mængde. Der er forskellige permutationer af en -element mængde. Eksempel: Lad der være givet byer. Den omrejsende sælgers problem er at besøge disse byer, således at den samlede rejste distance bliver minimeret. Der findes ingen algoritme der (i værste-tilfælde) er hurtigere end den trivielle: Generer alle mulige rækkefølger af byerne, udregn distancen for hver af disse og vælg den korteste. 19-a