Uploaded by Michael Rose

kapitulli 1

advertisement
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
Download