220 likes | 337 Views
Datastructuren Analyse van Algoritmen en O. College 6. Dit onderwerp. Nog twee voorbeelden van analyse van loopstructuren Analyse van algoritmen met recurrente betrekkingen Oplossen van recurrente betrekkingen Master-theorem. Voorbeeld 1: for i =1 to n do for j =1 to i do O(1) werk.
E N D
Dit onderwerp • Nog twee voorbeelden van analyse van loopstructuren • Analyse van algoritmen met recurrente betrekkingen • Oplossen van recurrente betrekkingen • Master-theorem
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 Loop-structuur-analyse soms met sommaties
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)= Q(1) Als n>1, dan T(n) = 2T(n/2)+ Q(n) Hoe los je zo’n recurrente betrekking op? Analyse van algoritmen met recurrente betrekkingen
Methode 1: Substitutie • Gok de juiste vorm van de oplossing • Bewijs met inductie dat die gok goed is • Dus, als we hebben: • T(1)= Q(1) • Als n>1, dan T(n) = 2T(n/2)+ Q(n) • Schrijf dan eerst eens: • T(1)= a • Als n>1, dan T(n) = 2T(n/2)+ bn • Gok dan dat T(n) = cn lg n voor geschikte c • Nu …
Recursief sorteeralgoritme • We kijken even naar een simpel recursief sorteeralgoritme • Hoe analyseren we zijn looptijd?
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)
Selection sort: de recurrente betrekking • T(1)=Q(1) • T(2)=Q(1) • Als n>2 dan • T(n) = T(n-1) + Q(n) • Of, equivalent, maar iets simpeler: • T(1)=Q(1) • Als n>1 dan • T(n) = T(n-1) + Q(n)
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)
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
Voorbeelden • Merge-sort: • T(1)= Q(1) • Als n>1, dan T(n) = 2T(n/2)+ Q(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)
De master theorem • Stel a³1 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: • Als f(n) = O(nlogb a- e)(n tot de macht logb a-e), voor constante e>0, dan T(n) = Q(nlogb a) • Als f(n) = Q(nlogb a), dan T(n) = Q(nlogb a* lg n) • Als f(n) = W(nlogb a+ e)(n tot de macht logb a+e), voor constante e>0, en a f(n/b) £ c f(n) voor een constante c<1 dan T(n) = Q(f(n))
Als f(n) = O(nlogb a- e)voor constante e>0, dan T(n) = Q(nlogb a) Als f(n) = Q(nlogb a), dan T(n) = Q(nlogb a* lg n) Als f(n) = W(nlogb a+ e)voor constante e>0, ena f(n/b) £ c f(n) voor een constante c<1 danT(n) = Q(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) = Q(n2) Toepassen van de master theoremvoorbeeld type 1
Als f(n) = O(nlogb a- e)voor constante e>0, dan T(n) = Q(nlogb a) Als f(n) = Q(nlogb a), dan T(n) = Q(nlogb a* lg n) Als f(n) = W(nlogb a+ e)voor constante e>0, ena f(n/b) £ c f(n) voor een constante c<1 danT(n) = Q(f(n)) Vb:T(n)=T(2n/3)+1 a=1 b=3/2 logb a = log3/2 1 = 0 1 = Q(n0) = Q(1) Geval 2 is geldig: T(n) = Q(n0 log n) = Q(log n) Toepassen van de master theoremvoorbeeld type 2
Als f(n) = O(nlogb a- e)voor constante e>0, dan T(n) = Q(nlogb a) Als f(n) = Q(nlogb a), dan T(n) = Q(nlogb a* lg n) Als f(n) = W(nlogb a+ e)voor constante e>0, ena f(n/b) £ c f(n) voor een constante c<1 danT(n) = Q(f(n)) Vb:T(n)= 4 T(n/2)+ Q(n2) a=4 b=2 logb a = log2 4 = 2 Geval 2 is geldig: T(n) = Q(n2 log n) Toepassen van de master theoremvoorbeeld type 2 (nog eentje)
Als f(n) = O(nlogb a- e)voor constante e>0, dan T(n) = Q(nlogb a) Als f(n) = Q(nlogb a), dan T(n) = Q(nlogb a* lg n) Als f(n) = W(nlogb a+ e)voor constante e>0, ena f(n/b) £ c f(n) voor een constante c<1 danT(n) = Q(f(n)) Vb3: T(n)=3T(n/4)+n log n a=3 b=4 logb a = log4 3 < 1 Neem e = 1- log4 3 n log n = W(n) 3 (n/4) log (n/4) £ 3/4 n log n Dus neem c=3/4 Geval 3 is geldig: T(n) = Q(n log n) Toepassen van de master theoremvoorbeeld 3
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) = …?
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
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) = Q(n1-1) dus mastertheorem geeft: • T(n) = Q(n)
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 W grens
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 opte lossen… Maar liever niet!
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