Analizë e algoritmeve Aparati për vlerësimin e algoritmeve Elver H. Bajrami elver.bajrami@uni-pr.edu, elver_bajrami@hotmail.com FSHMN, Departamenti i Matematikës, viti akademik 2021/22, Kapitulli 1 (Kapitulli 3 dhe 2 pjeserisht nga literatura bazë) Analizë e algoritmeve 1 Qellimet e kapitullit ◼ ◼ ◼ Koncepti i rritjes se një algoritmi, shkalla me të cilën rritet kostoja e një algoritmi me rritjen madhësia e inputit të tij; Koncepti i kufirit të sipërm dhe të poshtëm për një normë rritjeje, dhe si të vlerësohen këta kufij për një program të thjeshtë, algoritëm, ose problem; dhe Dallimi midis kostos së një algoritmi (ose programi) dhe kostos së një problemi. Analizë e algoritmeve 2 1.1 Hyrje ◼ ◼ Si ti krahasojmë dy algoritme që zgjidhin të njejtin problem në kuptimin e ‘eficiences’ Disa pengesa standard për vleresimin – krahasimin e algoritmeve: koha e kaluar per testim, algoritmi i koduar “mirë”, testimi empirik mund ta favorizon padrejtësisht ndonjërin, mbulueshmëria nga buxheti etj.Analizë e algoritmeve 3 Hyrje ◼ ◼ ◼ Zgjidhja mund te gjendet tek: Analiza asimptotike e algoritmeve – metodologjia kryesore, vlerësimi i shfrytëzimit të resurseve nga algoritmi, me rritjen e inputeve të tij. Poashtu konsiderohet si vegël e zakonshme që shfrytezohet për këtë problematikë Analizë e algoritmeve 4 Hyrje ◼ ◼ ◼ Resurs kritik që vlerësohen në një algoritëm është koha e ekzekutimitzgjidhjes së problemit Faktori tjetër me rëndësi – hapësira memorike e nevojshme (memoria kryesore ose hapësira në disk) Koha e ekzekutimi varet nga CPU, magjistralet, hardueri periferik dhe gjuha programuese Analizë e algoritmeve 5 Hyrje ◼ ◼ Krahasimi – ekzekutimi i algoritmeve në “ambientin” e njejtë, kushtet “benchmark” Shqyrtim parësor kur vlerësoni punën e një algoritmi është numri i operacioneve themelore të kërkuara nga algoritmi për të përpunuar një input të një madhësie të caktuar Analizë e algoritmeve 6 Hyrje ◼ ◼ P.sh. Mbledhja apo krahasimi i dy vlerave është operacion themelor në shumicën e gjuhëve programuese Por jo edhe mbledhja e n termave të vargut të dhënë, sepse varemi nga hyrja n Analizë e algoritmeve 7 Hyrje ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ Shemb 1. Algoritmi i thjeshtë për gjetjen e termit më të vogël në vargun prej n elemeteve (Smallest sequential Search algorithm) /** @return Poziten e vleres me te vogël në varg A */ static int smallest(int[] A) { int currsmall = 0; // Mban termin e pare si me te vogel for (int i=1; i<A.length; i++) // Për cdo element if (A[currsmall] > A[i]) // nese A[i] është më i vogel currsmall = i; //ruaj pozicionin return currsmall; // Kthe pozicionin per vlere me te vogel } Analizë e algoritmeve 8 Hyrje ◼ ◼ ◼ Per hyrjen e caktuar n, me T(n) do të shënojmë kohën e nevojshme për tu ekzekutuar algoritmi varësisht nga n. Le te jete c koha e nevojshme për ti krahasuar dy terma tek funksioni smallest. Nuk do të na interesojne ndarja e vlerës apo rritja e i-së brenda ciklit for. Analizë e algoritmeve 9 Hyrje ◼ ◼ Prandaj në rastin e përgjithshëm për algoritmin smallest përafërsisht do të kemi cn kohë të llogaritjes. Prandaj ◼ T(n)=cn Shemb. 2. Koha e nevojshme për ta kopjuar vlerën e parë në varg – le të jetë c1, prandaj ◼ T(n)= c1 = const. Analizë e algoritmeve 10 Hyrje ◼ Analizë e algoritmeve 11 Hyrje ◼ Rritja e disa funksioneve karakteristike Analizë e algoritmeve 12 Hyrje ◼ Rritja e disa funksioneve karakteristike Analizë e algoritmeve 13 Hyrje ◼ ◼ Shkalla e rritjes për një algoritëm është shkalla me të cilën rritet kostoja e algoritmit ndërsa rritet madhësia e inputit të tij. Koha e rritjes, lineare, kuadratike, eksponenciale dhe logaritmike (shih. grafikonet). Analizë e algoritmeve 14 Hyrje ◼ Analizë e algoritmeve 15 Hyrje ◼ Krahasimi i algoritmeve në sllajdet e mëhershme varesisht nga n, psh. Për n<15 apo n>15 në figurë. Analizë e algoritmeve 16 1.2 Rasti i mire, i keq dhe mesatar ◼ ◼ Metodat e kërkimit në algoritmin smallest dhe kërkimit sekuncial, dallimet! Sqarimi i rasteve të mësipërme sipas algoritmit sekuencial të kërkimit, termi i kërkuar të jetë i pari, i fundit apo nëse përsërisim ate disa herë – në mes!. Analizë e algoritmeve 17 Rasti i mire, i keq dhe mesatar ◼ ◼ Në praktikë rasti i mirë është shumë optimistik dhe rrallë herë analizohet, psh. te vargjet! Përparesia kryesore e analizimit rastit të keq është sepse të gjithë rastet tjera do të jenë me të volitshme në aspektin kohor të ekzekutimit, p.sh. Algoritmet real-time, kontrolli i trafikut ajror, përcjellja e disaAnalizë apo të gjithë aeroplanet18 e algoritmeve Rasti i mire, i keq dhe mesatar ◼ ◼ Ne raste tjera kur dëshirojm të dijmë koston e ekzekutimi disa here me hyrje te ndryshme, rasti i keq nuk është reprezentues, në atë rast perdorim rastin mesatar i cili në praktikë është më se vështiri të llogaritet. Në bazë të këtij rasti tek alg. i kërkimit sekuencial a mund të kërkojme gjithmonë vetëm deri tek gjysma e vargut? Analizë e algoritmeve 19 Rasti i mire, i keq dhe mesatar ◼ Analizë e algoritmeve 20 Rasti i mire, i keq dhe mesatar ◼ Analizë e algoritmeve 21 1.3 Kompjuteri apo algoritmi i shpejte ◼ Analizë e algoritmeve 22 Kompjuteri apo algoritmi i shpejte ◼ ◼ Krahasimi i këtyre dy kompjuterëve sipas kompleksitetit të dhëna në grafikët e mehershëm, përvec rastit linear nuk kemi 10fishim të shpejtësisë! Analizimi i ndryshimit të kohës, psh. rasti eksponencial Analizë e algoritmeve 23 Kompjuteri apo algoritmi i shpejte ◼ Analizë e algoritmeve 24 1.4 Analiza asimptotike ◼ ◼ ◼ ◼ Krahasojm grafikonet dhe nga grafikët e mëhereshëm per vlerën Çka ndodhë nëse marrim për krahasim Ndryshimi në cilindo nga funksionet e mësiperme vetëm e çvendos pikën e takimit të këtyre grafikoneve për një constant, por jo edhe dukurin që ndodhë pas pikëtakimit! Ketu gjendet edhe pergjigja për blerjen e kompjuterit te ri vs ndrrimit të algoritmit Analizë e algoritmeve 25 Analiza asimptotike, kufiri i siperm ◼ Analizë e algoritmeve 26 Analiza asimptotike, kufiri i siperm ◼ Analizë e algoritmeve 27 Analiza asimptotike, kufiri i siperm ◼ Analizë e algoritmeve 28 Analiza asimptotike, kufiri i siperm ◼ Analizë e algoritmeve 29 Analiza asimptotike, kufiri i poshtëm ◼ (g ( n) ) T (n) = c1n 2 + c2 n, c1 , c2 0 T (n) = c1n 2 + c2 n c1n 2 , n0 1, c = c1 T (n) Analizë e algoritmeve ( n 2 ) 30 Analiza asimptotike, notacioni ◼ O(n), (n) (n) (h(n)) O(h(n)) (h(n)) Analizë e algoritmeve 31 Analiza asimptotike, rregullat e thjeshtimit ◼ Disa rregulla bazike 1.Nese 2.Nese 3.Nese f (n) O( g (n)) dhe g (n) O(h(n)) f (n) O(h(n)). f (n) O(k g (n)) per k 0, f (n) O( g (n)). f1 (n) O( g1 (n)) dhe f 2 (n) O(g 2 (n)) f1 (n) + f 2 (n) O(max( g1 (n), g 2 (n))). 4.Nese f1 (n) O( g1 (n)) dhe f 2 (n) O(g 2 (n)) f1 (n) f 2 (n) O( g1 (n) g 2 (n)). ◼ 1-4 vlejne edhe për , Analizë e algoritmeve 32 Analiza asimptotike, klasifikimi i funksioneve Analizë e algoritmeve 33 Analiza asimptotike, klasifikimi i funksioneve Analizë e algoritmeve 34 1.5 Shumat dhe rekurencat ◼ Analizë e algoritmeve 35 Shumat dhe rekurencat ◼ Analizë e algoritmeve 36 Shumat dhe rekurencat, disa formula karakteristike ◼ Analizë e algoritmeve 37 Shumat dhe rekurencat, disa formula karakteristike ◼ Analizë e algoritmeve 38 Shumat dhe rekurencat, disa formula karakteristike ◼ Analizë e algoritmeve 39 Shumat dhe rekurencat, disa formula karakteristike ◼ ◼ ◼ Shumica e këtyre shumave vërtetohen me induksion matematik, por fakeqesisht ai nuk gjen edhe zgj. e formës së mbyllur. Në disa raste koha e ekzekutimit të një algoritmi rekurziv shprehet përmes rekurencës Relacioni rekurencës përkufizon një funksion në kuptimin e shprehjes e cila përmban një instance më të ulët se vetvetja Analizë e algoritmeve 40 Shumat dhe rekurencat, relacionet rekurzive ◼ Analizë e algoritmeve 41 Shumat dhe rekurencat, relacionet rekurzive ◼ Analizë e algoritmeve 42 Shumat dhe rekurencat, relacionet rekurzive ◼ Analizë e algoritmeve 43 Shumat dhe rekurencat, relacionet rekurzive ◼ Analizë e algoritmeve 44 Shumat dhe rekurencat, relacionet rekurzive ◼ Analizë e algoritmeve 45 1.6 Rekurzioni ◼ ◼ ◼ ◼ Algoritmi është rekurziv nëse e thirrë vetveten për ta kryer një pjesë të punës. Llogaritja e faktorielit nga shembulli paraprak mund te bëhet edhe me një urdhër përsëritës, psh. while Një problem që është i “pastër” rekurziv është edhe problem i “kullave të Hanoit” që përshkruhet si në vazhdim: Janë dhënë 6 disqe të madhësive të ndryshme dhe 3 shkopinjë (shtylla) ku janë të vendosur disqet të renditur nga madhësia më e madhe nga poshtë. Analizë e algoritmeve 46 Rekurzioni, kulla e Hanoit ◼ ◼ ◼ Problemi qëndron në lëvizjen e disqeve nga shtylla e pare në të treten nën kushtet që lejohet të lëvizet vetëm një disk në të njejten kohë dhe të mos vendoset disku i madh mbi të voglin. Provojmë rastet e thjeshta : një, dy dhe tre disqe Analizë e algoritmeve 47 Rekurzioni, kulla e Hanoit ◼ Analizë e algoritmeve 48 Rekurzioni, kulla e Hanoit ◼ Analizë e algoritmeve 49 Rekurzioni, kulla e Hanoit ◼ ◼ ◼ ◼ ◼ ◼ ◼ ◼ static void TOH(int n, Pole start, Pole goal, Pole temp) { if (n == 0) return; // Rasti baze TOH(n-1, start, temp, goal); // Thirrja rekurzive e n-1 disqeve move(start, goal); // lëvizja e diskut të madh TOH(n-1, temp, goal, start); // Thirrja rekurzive e n-1 disqeve } Çka ndodhë nëse ndërrohen kushtet e detyrës? Psh. nr. i shtyllave, lëvizja e dy disqeve në të njëjtën kohë etj, analizoni! Analizë e algoritmeve 50 1.7 Disa teknika të vërtetimit në matematikë ◼ Analizë e algoritmeve 51 1.8 Llogaritja e kohës së ekzekutimit të programit ◼ Analizë e algoritmeve 52 Llogaritja e kohës së ekzekutimit të programit ◼ Analizë e algoritmeve 53 Llogaritja e kohës së ekzekutimit të programit ◼ Analizë e algoritmeve 54 Llogaritja e kohës së ekzekutimit të programit ◼ Analizë e algoritmeve 55 Llogaritja e kohës së ekzekutimit të programit ◼ Analizë e algoritmeve 56 Llogaritja e kohës së ekzekutimit të programit ◼ Analizë e algoritmeve 57 1.9 Analizimi i problemeve dhe keqkuptime e zakonshme ◼ Analizë e algoritmeve 58 Analizimi i problemeve dhe keqkuptime e zakonshme ◼ ◼ ◼ ◼ ◼ Tjetër keqkuptim është hamendja se rasti i mirë na praqitet për n sa më të vogël në hyrje të algoritmit kurse i keq për n të madhe Rasti i mirë dhe i keq duhet të gjendet për çfarëdo madhësie të hyrjeve në algoritëm Shemb. 1. Sa është shpejtësia e rritjes në rastin më të mirë për algoritmin e kërkimit sekuencial Rasti i mirë paraqitet kur vlera e kërkuar është në poziten e parë pavarësisht madhësisë së vargut Eshtë jo korrekte të thuhet se rasti i mirë na paraqitet për n=1 Analizë e algoritmeve 59 Analizimi i problemeve dhe keqkuptime e zakonshme ◼ ◼ Shemb. 2. Imagjinoni vizatimi i grafikonit që tregon koston për gjetjen e vlerës më të madhe brenda n vlerave, kur n rritet. Krahasoni këtë shembull me algoritmin e kërkimit linear në rastin e mire, mesatar dhe te keq (paraqitni grafikoni për secilin rast) Analizë e algoritmeve 60 1.10 Parametrat e shumëfishtë ◼ ◼ ◼ ◼ ◼ ◼ ◼ Nganjëherë, analiza e mirëfilltë për një algoritëm kërkon të përshkruaj kompleksitetin përmes më shumë parametrave Marrim algoritmin për sortimin e një rangu të pikselave në fotografi. Supozojmë se pikseli merr vlera nga 0 deri C-1. Figurën e marrim si drejtkëndësh me P piksel, atëherë for (i=0; i<C; i++) // Inicializimi count[i] = 0; for (i=0; i<P; i++) // Kontrollimi i të gjithë pikselave count[value(i)]++; // Rritja e vlerës së pikselit sort(count); // Sortimi i ketyre vlerave Analizë e algoritmeve 61 Parametrat e shumëfishtë ◼ Analizë e algoritmeve 62 1.11 Kufijtë e hapësires memorike ◼ Analizë e algoritmeve 63 Kufijtë e hapësires memorike ◼ Analizë e algoritmeve 64 Kufijtë e hapësires memorike ◼ Analizë e algoritmeve 65 Kufijtë e hapësires memorike ◼ ◼ Shembulli 3 kërkon të pakten dyfish kohë për tu ekzekutuar më shumë se Shembulli 2, por përgjysmë më pak hapësirë memorike Principi disk-based space/time tradeoff i ngjashëm por i orientuar në qasje me të shpejt në disk, shemb HDD vs SSD, pastaj kompresimi i shenimeve gjatë bartjen në rrjetë etj. Analizë e algoritmeve 66 1.12. Përshpejtimi i programit ◼ Analizë e algoritmeve 67 Përshpejtimi i programit ◼ ◼ ◼ ◼ - Eshtë me rëndësi të kemi statistikën e kohës për secilën pjesë të kodimit, në shumë compiler dhe SO kjo bëhet përmes programeve të quajtura Profilers - Shpesh herë mund të largohet ndonjë pjesë e kodit për zbatim për raste më të kufizuara - Optimizimi i shprehjeve (logjike) nën kushtin të ruhet korrektësia Gjithmonë së pari të përmirësoni algoritmin e pastaj kodin Analizë e algoritmeve 68 1.13. Analiza empirike ◼ ◼ ◼ ◼ Në disa raste (posaçërisht në rast me më pak shënime) në vend të analizës asimptotike si vegël vlerësuese përdoret edhe analiza empirike Kjo formë përfshinë ekzekutimin e dy programeve nën kushet e njejta, për të pare cili po e kryen punën më “mirë” Në praktikë kjo është mjaft e vështirë e realizueshme Tjetër teknikë e analizës empirike është simulimi – modelimi i problemit përmes programit kompjuterik dhe ekzekutimi i tij për ti marrur rezultatet Analizë e algoritmeve 69