Hoorcollege 1: efficiëntie en complexiteitsontwikkeling.
Kwaliteit van software Test in een computerblad: Twee 3D Rendering programma’ s: 3D studio max maya Kwaliteitscriteria: Gebruiksvriendelijkheid Functionaliteit Stabiliteit Snelheid
De benchmarktest Hoe de snelheid van twee programma’ s te testen? Conclusie: 3D Studio Max is sneller… Computer 1Computer 2 3D Studio MaxMaya Animatie gegenereerd in 3 minuten Animatie gegenereerd in 7 minuten
Snelheid van software Hoe dit te meten? Met een stopwatch!? Computer processormoederboardgeheugenhd Operating system Programma
Snelheid van software Uitspraken over de snelheid van software zijn afhankelijk van: Computer hardware Processor Geheugen Enz. Operating system Gebruikte compiler
Snelheid van software Uitspraken over snelheid zijn: Leeg indien hardware, o.s. en compiler niet vermeld. Ofwel: Nauwelijks bruikbaar, want afhankelijk van /specifiek voor gebruikte hardware, o.s. en compiler.
Snelheid van software Hoe onafhankelijke uitspraken te doen over de snelheid van software? Antwoord: Niet doen: het is onmogelijk. Alternatief: begrip snelheid vervangen door begrip efficiëntie.
Efficiëntie van software Efficiëntie van software: Niet afhankelijk van hardware. Niet afhankelijk o.s. Niet afhankelijk van gebruikte compiler. Gekeken wordt uitsluitend naar de source code. Belangrijkste vraag: hoeveel berekeningen genereert een programma?
Berekeningen… # include Int main(void) { Double x; X=System.in.parseString(); X = x* ; System.out(“”+x); Return(0); } Een programma…werking?
De herhalingsfrequentie… Slechts één instructie van belang: x=x* ; We definiëren nu een functie die het aantal herhalingen in het algoritme voorstelt:
De herhalingsfrequentie… In een programma: Herhalingsfrequentie: ……………… for(int i=0;i<100;i++) {result+=i;} ……………
De herhalingsfrequentie… Herhalingsfrequentie afhankelijk van de taakomvang: n ……………… for(int i=0;i<100;i++) {result+=i;} …………… for(int i=0;i<n;i++) {newresult+=i;} ………………
De herhalingsfrequentie… ……………… for(int i=0;i<100;i++) {result+=i;} …………… for(int i=0;i<n;i++) {newresult+=i;} ………………
De herhalingsfrequentie… De herhalingsfrequentie kan afhankelijk zijn van de taakomvang. Taakafhankelijke herhalingsfrequenties verschijnen in de functie als een variabele, Bijv:
De O Notatie… De herhalingsfrequentie wordt nogal complex en onoverzichtelijk: elke instructie wordt genoteerd Potentieel oneindig veel verschillende algoritmen evenzoveel herhalingsfrequenties. geen handige methode om de efficiëntie van algoritmen te vergelijken. Daarom: De O notatie….
De O Notatie… Dient ter classificering van herhalingsfrequenties, opgehangen aan “mooie” wiskundige functies.
De O Notatie… concept: Bekijk de herhalingsfrequentie van een algoritme. Sloop alles eraf wat niet bijdraagt tot een stijging van het aantal instructies. Vergelijk deze herhalingsfrequentie met een bekende wiskundige functie. Herhalingsfrequentie is nu van een bepaalde orde van grootte.
De O Notatie… voorbeeld Men neme 2 functies die de herhalingsfrequentie van 2 verschillende algoritmes voorstellen:
De O Notatie… Functie G(n) is een functie van een fictief algoritme, de functie is gekozen omwille van zijn wiskundige eenvoud. Voorbeelden: Hiermee kennen we het gedrag van G(n)
De O Notatie… Nu delen we voor elke n de functie T(n) op de functie G(n), zodanig dat de ontstane waarde kleiner is dan een bepaalde constante c:
De O notatie… Taakomvang Aantal instructies G(n) T(n) n
De O notatie… Limiet van Bachmann-Landau: Paul Gustav Heidrich Bachmann Edmund Landau
De O notatie… Standaard referentiefuncties: OrdeN=10N=1000 O(1)11Constant O(log n)13Logaritmisch O( )332 O(n)101000Lineair O( ) kwadratisch O( )1000Cubisch O( )1024Exponentieel
Verzamelingen van functies
De O notatie… De O notatie zegt iets over de verhouding tussen de stijging van het aantal instructies en de toename van de taakomvang.
De O notatie…Voorbeeld Herhalingsfrequentie: T(n)= Complexiteitsontwikkeling: O(1) ……………… for(int i=0;i<50;i++) {Doe iets;} Doe wat anders; En doe nog maar wat anders; ……………
De O notatie: regel 1 Een constant aantal instructies heeft een complexiteitsontwikkeling van de orde 1:
De O notatie… Taakomvang Aantal berekeningen Constant aantal instructies
De O notatie…regel 1 Software met een complexiteitsontwikkeling van de orde 1 genereert een constant aantal berekeningen. Hoeveel berekeningen dat zijn doet niet ter zake. Het gaat om het constant zijn van dat aantal.
De O notatie…voorbeeld Invoer: een lijst met namen. Lengte: n Herhalingsfrequentie: T(n)=n Complexiteitsontwikkeling: O(n) ……………… for(int i=0;i<n;i++) {schrijf weg;} ……………
De O notatie…regel 2 Invoer: een lijst met namen. Lengte: n Herhalingsfrequentie: T(n)=5n Complexiteitsontwikkeling: O(n) ……………… for(int i=0;i<n;i++) {schrijf 5 keer weg naar verschillende bestanden;} ……………
De O notatie: regel 2 Verklaring: Hoe snel iets lineair stijgt, is niet relevant; het gaat om het lineair zijn van die stijging.
De O notatie…regel 2 Taakomvang Aantal berekeningen Aantal berekeningen lineair afhankelijk van taakomvang: O(n)
De O notatie…voorbeeld Invoer: een lijst met namen. Lengte: n Herhalingsfrequentie: T(n)=20n+1 Complexiteitsontwikkeling: O(n) ……………… for(int i=0;i<20*n;i++) {schrijf weg;} Doe nog wat extra’ s; ……………
De O notatie: regel 3 Verklaring:constant aantal instructies zorgt niet voor stijging. Taakomvangafhankelijke complexiteitsontwikkeling wel:
De O notatie…voorbeeld Wat nu? complexiteitsontwikkeling: O(n) for(int i=0;i<10000;i++) {schrijf weg;} ……………… for(int i=0;i<n;i++) {schrijf weg;} …………… T(n)=10000 T(n)=n
De O notatie: regel 4 Het onderdeel van een algoritme dat voor de grootste stijging zorgt, is bepalend voor de complexiteitsontwikkeling:
De O notatie…regel 4 Taakomvang Aantal berekeningen Constant aantal instructies Lineair stijgend Aantal instructies
De O notatie: voorbeeld Herhalingsfrequentie: O-notatie: for(int i=0;i<n;i++) { for(j=0;j<n;j++) {schrijf weg;} }
De O notatie: regel 5 Taakafhankelijke loops in loops leiden tot kwadratische of cubische complexiteitsontwikkeling.
Regels O-notatie
De O-notatie…probleempjes Wat nu? if(iets=1) {schrijf 1 keer weg;} else{ for(int i=0;i<n;i++) { schrijf weg; }
De O-notatie Bij if-else constructies complexiteitsontwikkeling onvoorspelbaar. Derhalve: Worst case gedrag bepalen Best case gedrag bepalen Indien mogelijk: statistiek en kansrekening gebruiken om gemiddelde gedrag te bepalen.
De O-notatie Algemene lijn: Broncode analyseren. Herhalingsfrequentie bepalen. O-notatie afleiden. Regels O-notatie respecteren.
Einde
De O notatie… Taakomvang Aantal berekeningen Kwadratische groei Aantal instructies lineair afhankelijk van taakomvang