![Page 1: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/1.jpg)
1
Datastructuren
Analyse van Algoritmen en O
College 6
![Page 2: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/2.jpg)
2
Dit onderwerp
Nog twee voorbeelden van analyse van loopstructuren
Analyse van algoritmen met recurrente betrekkingen
Oplossen van recurrente betrekkingen Master-theorem
![Page 3: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/3.jpg)
3
Loop-structuur-analyse soms met sommaties
Voorbeeld 1: for i=1 to n do
for j=1 to i do• O(1) werk
Voorbeeld 2: i=n while (i>1) do
i=i/2 for j=1 to i do
• O(1) werk
Voorbeeld 3: i=n while (i>1) do
i=i/2 O(1) werk
![Page 4: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/4.jpg)
4
Analyse van algoritmen met recurrente betrekkingen
Merge-sort if n>1 then
Recursie op n/2 elementen
Recursie op n/2 elementen
O(n) werk voor merge Else O(1) werk
Schrijf: T(n) is de tijd van merge-sort op n elementen
T(1)= (1) Als n>1, dan T(n) =
2T(n/2)+ (n) Hoe los je zo’n
recurrente betrekking op?
![Page 5: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/5.jpg)
5
Methode 1: Substitutie
Gok de juiste vorm van de oplossing Bewijs met inductie dat die gok goed is Dus, als we hebben:
T(1)= (1) Als n>1, dan T(n) = 2T(n/2)+ (n)
Schrijf dan eerst eens: T(1)= Als n>1, dan T(n) = 2T(n/2)+ n
Gok dan dat T(n) = cn lg n voor geschikte c Nu …
![Page 6: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/6.jpg)
6
Recursief sorteeralgoritme
We kijken even naar een simpel recursief sorteeralgoritme
Hoe analyseren we zijn looptijd?
![Page 7: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/7.jpg)
7
Selection Sort
Selection sort (A, p, q) {Sorteert de rij A[p … q]} {Reken eerst uit waar de grootste waarde staat} max = A[p]; for i = p to q do
• if A[i] > A[max] then max = i; {Zet de grootste waarde achteraan} Verwissel A[q] en A[max] {Sorteer de rest recursief} if (q>p+1) then Selection sort (A, p, q – 1)
![Page 8: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/8.jpg)
8
Selection sort: de recurrente betrekking
T(1)=(1) T(2)=(1) Als n>2 dan
T(n) = T(n-1) + (n)
Of, equivalent, maar iets simpeler: T(1)=(1) Als n>1 dan
T(n) = T(n-1) + (n)
![Page 9: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/9.jpg)
9
Twee voorbeelden voor substitutie
Selection sort: T(1)= O(1) T(n)= T(n-1)+O(n)
Binary search: T(1) = O(1) T(n) = T(n/2)+O(1)
![Page 10: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/10.jpg)
10
Methode 2: De recursie-boom
Analyseer de recursie-boom Hoeveel niveau’s heeft de boom? Hoeveel werk doen we per level? Sommeer het werk over de levels
![Page 11: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/11.jpg)
11
Voorbeelden
Merge-sort: T(1)= (1) Als n>1, dan T(n) = 2T(n/2)+ (n)
Selection sort: T(1)= O(1) T(n)= T(n-1)+O(n)
Binary search: T(1) = O(1) T(n) = T(n/2)+O(1)
![Page 12: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/12.jpg)
12
De master theorem
Stel a1 en b>1 zijn constantes, f(n) is een functie en T(n) is een functie van de niet-negatieve (of positieve) integers), gedefineerd met:
T(n) = a T(n/b)+f(n) Waarbij n/b zowel omhoog als omlaag kan afgerond
worden Voor kleine n …
Dan geldt dat:1. Als f(n) = O(nlog
b a- ) (n tot de macht logb
a-), voor constante >0, dan T(n) = (nlog
b a)
2. Als f(n) = (nlogb
a), dan T(n) = (nlogb
alg n)
3. Als f(n) = (nlogb
a+ ) (n tot de macht logb a+), voor
constante >0, en a f(n/b) c f(n) voor een constante c<1 dan T(n) = (f(n))
![Page 13: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/13.jpg)
13
Toepassen van de master theoremvoorbeeld type 1
1. Als f(n) = O(nlogb
a- ) voor constante >0, dan T(n) = (nlog
b a)
2. Als f(n) = (nlogb
a), dan T(n) = (nlog
b alg n)
3. Als f(n) = (nlogb
a+ ) voor constante >0, ena f(n/b) c f(n) voor een constante c<1 danT(n) = (f(n))
Vb: T(n)= 9T(n/3)+n
a=9 b=3 logb a = log3 9 = 2 n = O(n2-1) Geval 1 is geldig: T(n) = (n2)
![Page 14: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/14.jpg)
14
Toepassen van de master theoremvoorbeeld type 2
1. Als f(n) = O(nlogb
a- ) voor constante >0, dan T(n) = (nlog
b a)
2. Als f(n) = (nlogb
a), dan T(n) = (nlog
b alg n)
3. Als f(n) = (nlogb
a+ ) voor constante >0, ena f(n/b) c f(n) voor een constante c<1 danT(n) = (f(n))
Vb:T(n)=T(2n/3)+1
a=1 b=3/2 logb a = log3/2 1 = 0 1 = (n0) = (1) Geval 2 is geldig: T(n) = (n0 log n) =
(log n)
![Page 15: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/15.jpg)
15
Toepassen van de master theoremvoorbeeld type 2 (nog eentje)
1. Als f(n) = O(nlogb
a- ) voor constante >0, dan T(n) = (nlog
b a)
2. Als f(n) = (nlogb
a), dan T(n) = (nlog
b alg n)
3. Als f(n) = (nlogb
a+ ) voor constante >0, ena f(n/b) c f(n) voor een constante c<1 danT(n) = (f(n))
Vb:T(n)= 4 T(n/2)+ (n2)
a=4 b=2 logb a = log2 4 = 2 Geval 2 is geldig: T(n) = (n2 log n)
![Page 16: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/16.jpg)
16
Toepassen van de master theoremvoorbeeld 3
1. Als f(n) = O(nlogb
a- ) voor constante >0, dan T(n) = (nlog
b a)
2. Als f(n) = (nlogb
a), dan T(n) = (nlog
b alg n)
3. Als f(n) = (nlogb
a+ ) voor constante >0, ena f(n/b) c f(n) voor een constante c<1 danT(n) = (f(n))
Vb3: T(n)=3T(n/4)+n log n
a=3 b=4 logb a = log4 3 < 1
Neem = 1- log4 3 n log n = (n) 3 (n/4) log (n/4)
3/4 n log n Dus neem c=3/4
Geval 3 is geldig: T(n) = (n log n)
![Page 17: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/17.jpg)
17
Toepassing op algoritme
int Voorbeeld (int[] A, int begin, int eind) formaat = eind – begin + 1; derdef = formaat / 3 ; if (formaat < 3) then return A[begin] else
int hulp = Voorbeeld(A, begin, begin + derdef) hulp += Voorbeeld(A, begin+derdef+1, eind-
derdef); Return (hulp + Voorbeeld(A,eind-derdef,eind)
Schrijf n = eind – begin+1 T(n) = …?
![Page 18: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/18.jpg)
18
Toepassing op algoritme
int Voorbeeld (int[] A, int begin, int eind) formaat = eind – begin + 1; derdef = formaat / 3 ; if (formaat < 3) then return A[begin] else
int hulp = Voorbeeld(A, begin, begin + derdef) hulp += Voorbeeld(A, begin+derdef+1, eind-
derdef); Return (hulp + Voorbeeld(A,eind-derdef,eind)
Schrijf n = eind – begin+1 T(n) = 3 T(n/3) + O(1)
Afrondingen kunnen we negeren
![Page 19: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/19.jpg)
19
Toepassing op algoritme
int Voorbeeld (int[] A, int begin, int eind) formaat = eind – begin + 1; derdef = formaat / 3 ; if (formaat < 3) then return A[begin] else
int hulp = Voorbeeld(A, begin, begin + derdef) hulp += Voorbeeld(A, begin+derdef+1, eind-derdef); Return (hulp + Voorbeeld(A,eind-derdef,eind)
Schrijf n = eind – begin+1 T(n) = 3 T(n/3) + O(1)
Afrondingen kunnen we negeren log33= 1 O(1) = (n1-1) dus mastertheorem geeft: T(n) = (n)
![Page 20: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/20.jpg)
20
Over de mastertheorem
Bewijs in boek Vaak handig en makkelijk te gebruiken als
je ‘m eenmaal kent Soms gevallen waar ‘t niet gaat
Bijvoorbeeld als T(n) = a T(n-1) + f(n)
Wat als je T(n) aT(n/b)+f(n) hebt? En wat als T(n) aT(n/b)+f(n) ?
Net zo, maar je krijgt alleen een O of grens
![Page 21: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/21.jpg)
21
Een exponentieel algoritme
Duur(n) If n=1 dan O(1) werk Ga in recursie met Duur(n-1) Ga in recursie met Duur(n-1) Doe O(n) werk
Sommige problemenkosten veel tijd om op
te lossen…Maar liever niet!
Sommige problemenkosten veel tijd om op
te lossen…Maar liever niet!
![Page 22: 1 Datastructuren Analyse van Algoritmen en O College 6](https://reader036.vdocuments.net/reader036/viewer/2022062703/5551a0f14979591f3c8bc550/html5/thumbnails/22.jpg)
22
Conclusies
Wat technieken voor analyse van algoritmen Recurrente betrekkingen oplossen
• Gokken en controleren• Analyse van de recursieboom• Master-theorem
Inspectie loopstructuur• Analyse doen van binnen naar buiten• Soms: opschrijven van sommaties; ken en gebruik
standaard sommaties