1 Datastructuren Analyse van Algoritmen en O College 6.

22
1 Datastructuren Analyse van Algoritmen en O College 6

Transcript of 1 Datastructuren Analyse van Algoritmen en O College 6.

Page 1: 1 Datastructuren Analyse van Algoritmen en O College 6.

1

Datastructuren

Analyse van Algoritmen en O

College 6

Page 2: 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

Page 3: 1 Datastructuren Analyse van Algoritmen en O College 6.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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