1 Datastructuren Analyse van Algoritmen en O College 6.
-
Upload
esmee-verhoeven -
Category
Documents
-
view
213 -
download
0
Transcript of 1 Datastructuren Analyse van Algoritmen en O College 6.
1
Datastructuren
Analyse van Algoritmen en O
College 6
2
Dit onderwerp
Nog twee voorbeelden van analyse van loopstructuren
Analyse van algoritmen met recurrente betrekkingen
Oplossen van recurrente betrekkingen Master-theorem
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
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?
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 …
6
Recursief sorteeralgoritme
We kijken even naar een simpel recursief sorteeralgoritme
Hoe analyseren we zijn looptijd?
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)
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)
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)
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
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)
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))
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)
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)
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)
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)
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) = …?
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
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)
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
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!
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