1 Datastructuren Analyse van Algoritmen en O College 6.

Post on 05-Aug-2015

213 views 0 download

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