1 / 22

Datastructuren Analyse van Algoritmen en O

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.

tova
Download Presentation

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 • Nog twee voorbeelden van analyse van loopstructuren • Analyse van algoritmen met recurrente betrekkingen • Oplossen van recurrente betrekkingen • Master-theorem

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

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

  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)= 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 …

  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)=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)

  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)= 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)

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

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

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

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

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

  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) = Q(n1-1) dus mastertheorem geeft: • T(n) = Q(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 W 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 opte 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

More Related