1 / 43

Datastructuren Analyse van Algoritmen en O

Datastructuren Analyse van Algoritmen en O. College 6. Dit onderwerp. Sommaties en analyse van algoritmen Analyse van algoritmen met recurrente betrekkingen Oplossen van recurrente betrekkingen Master-theorem. 1. Sommaties EN LOOPSTRUCTUREN. Rekenkundige reeks.

idalee
Télécharger la présentation

Datastructuren Analyse van Algoritmen en O

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DatastructurenAnalyse van Algoritmen en O College 6

  2. Dit onderwerp • Sommaties en analyse van algoritmen • Analyse van algoritmen met recurrentebetrekkingen • Oplossen van recurrentebetrekkingen • Master-theorem

  3. 1 Sommaties EN LOOPSTRUCTUREN Datastructuren

  4. Rekenkundige reeks • Een rekenkundige rij getallen is een rij getallen waarvan het verschil tussen twee opeenvolgende getallen steeds hetzelfde is • Voorbeeld: 4, 7, 10, 13, 16 • Een rekenkundige reeks is de sommatie van zo’n rij. Datastructuren

  5. De uitkomst van een rekenkundige reeks • Onthoud: (eerste plus laatste)*aantal / 2 Datastructuren

  6. Voorbeelden • for i=1 to n do • for j=1 toido • O(1) werk • for i=1 to ndo • for j=1 toido • for k = 1 to n do • O(1) werk Datastructuren

  7. Voorbeelden (2) = • for i=1 to n do • for j=1 toido • O(1) werk • for i=1 to n do • for j=1 toido • for k = 0 to n do • O(1) werk = * n = Datastructuren

  8. Meetkundige rijen en reeksen • Meetkundige rij: quotient van opeenvolgende getallen is steeds hetzelfde • Voorbeeld: 2 6 18 54 162 • Een meetkundige reeks is de sommatie van zo’n rij Datastructuren

  9. Over de meetkundige reeks • Eerste term A • Groeifactor r • A Ar Ar2 Ar3 Ar4 ... Datastructuren

  10. Uitkomst meetkundige reeks • = • Als de groeifactor een positief getal behalve 1 is: • (“volgende term” – eerste) / (groeifactor -1) • Volgende term: de eerste term die zou komen als we de rij eentje langer zouden maken, dus bij deze som: • En volgende term is 16 bij Datastructuren

  11. Voorbeelden • = Datastructuren

  12. Analyse met meetkundige reeks Voorbeeld: • k=1 • for i=1 to n do • k = k*3 • for j = 1 to k do • O(1) werk Datastructuren

  13. Analyse met meetkundige reeks (2) Voorbeeld: • k=1 • for i=1 to n do • k = k*3 • for j = 1 to k do • O(1) werk Datastructuren

  14. Nog eentje Voorbeeld: • i=n • while (i>1) do • i=i/2 • for j=1 to i do • O(1) werk Datastructuren

  15. Nog eentje (2) Voorbeeld: • i=n • while (i>1) do • i=i/2 • for j=1 to i do • O(1) werk • O(n) werk Datastructuren

  16. En deze? Voorbeeld: • i=n • while (i>1) do • i=i/2 • O(1) werk

  17. En deze? Voorbeeld: • i=n • while (i>1) do • i=i/2 • O(1) werk • O(log n) iteraties van O(1) werk: O(log n) tijd

  18. Oneindige geometrische reeks • … • ... • Als r>1 dan wordt dit oneindig • Als r<1 dan , dus: Convergentie Datastructuren

  19. Resultaat oneindige meetkundige reeks Als Datastructuren

  20. Harmonische reeks • Komen we straks ook nog tegen bij sommige datastructuren • … is niet op telossen. Hebbenzedaaromeennaampjegegeven: • ... Is ongeveer ln(n) Datastructuren

  21. Analyse met Harmonische reeks • for i = 1 to n do • j = 1; • whilej < n do • O(1) work • j = j+ i Datastructuren

  22. Analyse met Harmonische reeks(2) • for i = 1 to n do • j = 1; • whilej < n do • O(1) work • j = j+ i Datastructuren

  23. 2 Recurrente Betrekkingen Datastructuren

  24. 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

  25. 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 …

  26. Recursief sorteeralgoritme • We kijken even naar een simpel recursief sorteeralgoritme • Hoe analyseren we zijn looptijd?

  27. 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)

  28. 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)

  29. 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)

  30. 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

  31. 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)

  32. 3 De MASTERTHEOREM Datastructuren

  33. 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))

  34. 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

  35. 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

  36. 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)

  37. 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

  38. 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) = …?

  39. 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

  40. 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)

  41. 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

  42. 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!

  43. 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

More Related