Professional Documents
Culture Documents
Skripta Ne Gjuhen Shqipe
Skripta Ne Gjuhen Shqipe
Skripta Ne Gjuhen Shqipe
Përmbajtja
Kam fillu me bo kete skripte ne gjuhen shqipe per landen analize e algoritmeve duke perkthy nga librat
1.Computer Algorithms – Introduction to Design and Analysis by Sara Baase
2.Introduction to Algorithms by Cormen, Leiseron, Rivest, Stein
dhe nga disa shenime shtese po nuk me ka premtu koha me vazhdu dhe me perfundu, kushdo qe osht I
interesum mundet me vazhdu prej aty ku e kam lan une
1
NJOHURI MATEMATIKORE
Përgjatë këtij kursi do të na duhen njohuri themeleore në: funksione logaritmike, probabilitet, permutacione
dhe shuma. Gjithashtu do të njoftohemi me relacionet e rekurencës.
Logaritmet
Më së shpeshti do të na paraqitet funksioni logaritmik, zakonisht funksioni logaritmik me bazë 2.
Përkufizim: 𝑃ë𝑟 𝑏 > 1 𝑑ℎ𝑒 𝑥 > 0, log 𝑏 𝑥 (𝑙𝑜𝑔𝑎𝑟𝑖𝑡ë𝑚 𝑖 𝑥 𝑚𝑒 𝑏𝑎𝑧ë 𝑏) ë𝑠ℎ𝑡ë 𝑛𝑢𝑚𝑟𝑖 𝑦 𝑖 𝑡𝑖𝑙𝑙ë 𝑞ë 𝑏 𝑦 = 𝑦;
log 𝑏 𝑥 ë𝑠ℎ𝑡ë 𝑓𝑢𝑞𝑖𝑎 𝑛ë 𝑡ë 𝑐𝑖𝑙ë𝑛 𝑛𝑔𝑟𝑖𝑡𝑒𝑡 𝑏 𝑝ë𝑟 𝑡ë 𝑚𝑎𝑟𝑟ë 𝑟𝑒𝑧𝑢𝑙𝑡𝑎𝑡𝑖𝑛 𝑥.
Nga përkufizimi vlejnë vetitë, ku x është numër pozitiv dhe a çfardo numri real.
1. 𝑙𝑜𝑔𝑏 ë𝑠ℎ𝑡ë 𝑓𝑢𝑛𝑘𝑠𝑖𝑜𝑛 𝑟𝑟𝑖𝑡ë𝑠; 𝑥1 > 𝑥2 𝑎𝑡ëℎ𝑒𝑟ë log 𝑏 𝑥1 > log 𝑏 𝑥2
2. 𝑙𝑜𝑔𝑏 ë𝑠ℎ𝑡ë 𝑓𝑢𝑛𝑘𝑠𝑖𝑜𝑛 𝑛𝑗ë − 𝑛𝑗ë; log 𝑏 𝑥1 = log 𝑏 𝑥2 𝑎𝑡ëℎ𝑒𝑟ë 𝑥1 = 𝑥2
3. log 𝑏 1 = 0
4. log 𝑏 𝑏 𝑎 = 𝑎
5. log 𝑏 (𝑥1 ∙ 𝑥2 ) = log 𝑏 𝑥1 + log 𝑏 𝑥2
6. log 𝑏 (𝑥 𝑎 ) = 𝑎 ∙ log 𝑏 𝑥
7. 𝑥1 log𝑏 𝑥2 = 𝑥2 log𝑏 𝑥1 (𝑑𝑢ℎ𝑒𝑡 𝑣ë𝑟𝑡𝑒𝑡𝑢𝑎𝑟 𝑞ë 𝑙𝑜𝑔𝑎𝑟𝑖𝑡𝑚𝑒𝑡 𝑛ë 𝑡ë 𝑑𝑦 𝑎𝑛ë𝑡 𝑗𝑎𝑛ë 𝑡ë 𝑏𝑎𝑟𝑎𝑏𝑎𝑟𝑡ë)
8. log 𝑏1 𝑥 = (log 𝑏2 𝑥)/(log 𝑏2 𝑏1 )
Pasi logaritmi me bazë 2 përdoret më shpesh në llogaritje të kompleksitetit ekziston shënim i veçantë për të:
lg 𝑥 = log 2 𝑥. Logaritmi natyral me bazë e shënohet 𝑙𝑛.
Shumat
Janë disa shuma që përdoren më shpesh në analizën e algoritmeve.
Disa do ti paraqesim këtu ndërsa tjerat janë të vertetuara në fund të kapitullit.
1. Shuma e numrave të plotë të njëpasnjëshem
𝑛
𝑛(𝑛 + 1)
∑𝑖 =
2
𝑖=1
Vërtetim
𝑆𝑛 = 1 + 2 + ⋯ + (𝑛 − 1) + 𝑛
(+) {
𝑆𝑛 = 𝑛 + (𝑛 − 1) + ⋯ + 2 + 1
(𝑛 + 1) + (𝑛 + 1) + ⋯ + (𝑛 + 1)
2𝑆𝑛 = ⏟
𝑛−ℎ𝑒𝑟ë
2𝑆𝑛 = 𝑛(𝑛 + 1)
𝑛(𝑛 + 1)
𝑆𝑛 =
2
2
2. Shuma e katrorëve
𝑛
2𝑛3 + 3𝑛2 + 𝑛
2
∑𝑖 = (vërtetimi në faqe … )
6
𝑖=1
3. Fuqitë e 2-shit.
𝑘
∑ 2𝑖 = 2𝑘+1 − 1
𝑖=0
Vërtetim
Zgjerojmë shumën ∑𝑘𝑖=0 2𝑖 , 𝑆𝑛 = 20 + 21 + 22 + ⋯ + 2𝑘 , 𝑠ℎ𝑢𝑚ë𝑧𝑜𝑗𝑚ë 𝑚𝑒 2 𝑑ℎ𝑒 𝑓𝑖𝑡𝑜𝑗𝑚ë
2𝑆𝑛 = 21 + 22 + 23 + ⋯ + 2𝑘+1
2𝑆𝑛 = 21 + 22 + 23 + ⋯ + 2𝑘+1
( −) {
𝑆𝑛 = 20 + 21 + 22 + ⋯ + 2𝑘
2𝑆𝑛 − 𝑆𝑛 = 2𝑘+1 − 20
𝑆𝑛 = 2𝑘+1 − 1
4. Shumat gjeometrike
𝑘
1 1
∑ 𝑖
=2− 𝑘 (𝑣ë𝑟𝑡𝑒𝑡𝑖𝑚𝑖 ë𝑠ℎ𝑡ë 𝑖 𝑛𝑗𝑒𝑗𝑡ë 𝑠𝑖𝑘𝑢𝑟 𝑡𝑒 𝑠ℎ𝑢𝑚𝑎 𝑒 𝑚ë𝑝𝑎𝑟𝑠ℎ𝑚𝑒)
2 2
𝑖=0
Formulat binomiale
(𝑎 ± 𝑏)3 = 𝑎3 ± 3𝑎2 𝑏 + 3𝑎𝑏 2 ± 𝑏 3
(𝑎 ± 𝑏)4 = 𝑎4 ± 4𝑎3 𝑏 + 6𝑎2 𝑏 2 ± 4𝑎𝑏 3 + 𝑏 4
Pjesa e poshtme e plotë ⌊𝑥⌋ ; Pjesa e sipërme e plotë ⌈𝑥⌉ ku x është nr. real.
𝑥 − 1 < ⌊𝑥⌋ ≤ 𝑥 ≤ ⌈𝑥⌉ < 𝑥 + 1
3
ANALIZA E ALGORITMEVE
Algoritëm quajmë çdo varg të fundëm të instruksioneve, rregullave apo veprimeve të përkufizuara
mirë që ndërmerren për zgjidhjen e një problemi të caktuar.
Korrektësia
Për një algoritëm themi se është korrekt nëse për hyrje merr ato vlera që japin rezultatin e saktë.
Programet janë të mëdha dhe komplekse, për të testuar a janë korrekte duhet të ndahen në module më të
vogla, testohen secili modul ndaras dhe nëse të gjithë e bëjne punën e pritshme atëherë i gjithë programi
është korrekt. Pothuajse të gjithë algoritmet në këtë kurs janë module të vogla nga të cilat ndërtohen
programe të mëdha.
4
Nganjëherë është e nevojshmë të analizohet kompleksiteti në rastin mesatar A(n), llogaritet numri i
operacioneve për çdo element të vlerës hyrëse të gjatësisë n dhe merret mesatarja. Në praktikë disa elemente
mund të paraqiten më shpesh sesa disa tjera prandaj matja e mesatares ka kuptim. Le të jetë p(I) probabiliteti
që paraqitet elementi I.
𝐴(𝑛) = ∑ 𝑝(𝐼)𝑡(𝐼)
𝐼∈𝐷𝑛
Funksioni p është i përcaktuar sipas përvojës (eksperiencës), sipas informatave të veçanta të aplikacionit që
përmban atë algoritëm ose duke bërë supozime që lehtësojnë punën, p.sh. të gjithë elementet e vargut hyrës
kanë probabilitet të njejtë të paraqitjes. Nëse p është i komplikuar atëherë llogaritja e rastit mesatar do të jetë
e komplikuar.
Optimizimi
Pa marrë parasysh sa të mençur jemi nuk mund ta përmisojmë algoritmin përtej një pike të caktuar.
Për të analizuar kompleksitetin e algoritmit zgjedhim klasën e algoritmeve, zakonisht duke specifikuar llojet
e operacioneve që do të ekzekutohen dhe llogaritjen e kompleksitetit, p.sh operacionet bazike që do të
numërohen. Pastaj mund të shtrojmë pyetjen sa operacione nevojiten të zgjidhet problem i algoritmit. Themi
se algoritmi është optimal (në rastin më të keq) nëse nuk ekziston algoritëm tjetër brenda asaj klase qe do të
ekzekutoj më pak operacione bazike (në rastin më të keq).
5
ELEMENTE TË ANALIZËS ASIMTOTIKE.
KLASIFIKIMI I FUNKSIONEVE SIPAS RRITJES
Sa është e mirë matja e kohës të ekzekutimit të algoritmit? Sa të saktë mund ta bëjmë krahasimin ndërmjet
dy algoritmeve? Pasi nuk numërojmë çdo hap(operacion) të ekzekutuar nga algoritmi atëherë kemi ca
pasaktësi. Kemi cekur më parë që do të jemi të kënaqur nëse numri total i hapave është përafërsisht i njejtë
me numrin e operacioneve bazike. Kjo është e mjaftueshme që të bëhet klasifikimi ndërmjet dy algoritme që
kryejnë sasi pune të ndryshme për hyrje me gjatësi të mëdha.
Supozojmë algoritmi për zgjidhjen e një problem bën 2n oepracione bazike, pra përafërsisht 2cn
operacione në total për ndonjë konstantë c, dhe algoritmi tjetër bën 4.5n operacione bazike, ose 4.5c’n në
total. Cili ekzekutohet më shpejtë? Nuk e dimë. Algoritmi i parë mund të bëj më shumë operacione të larta
p.sh. konstanta e tij mund të jetë më e madhe. Pra nëse funksioni i cili krahason dy algoritme dallon për nga
faktori i konstantës është e pakuptimtë të veçohet njëri (përderisa nuk bëjmë analiza më të hollësishme).
Algoritmet e tilla i konsiderojmë të jenë në një klasë të përbashkët të kompleksitetit.
Supozojmë një algoritëm bën 𝑛3 /2 shumëzime dhe tjetri algoritëm bën 5𝑛2 . Cili algoritëm
ekzekutohet më shpejtë? Për vlera të vogla të n-it algoritmi i parë bën më pak shumëzime por për vlera të
mëdha të n-it algoritmi i dytë është më i shpejtë edhe nëse ka më shumë operacione. Shkalla e rritjes e
funksionin kubik është shumë më e madhe sesa ajo e funksionit kuadratik ku konstanta e propocionalitetit
nuk ka rëndësi kur n bëhet i madh.
Siç pamë nga shembujt ne dëshirojmë të krahasojmë ose të klasifikojmë funksionet që injorojnë
faktorët e konstantës dhe hyrjet me gjatësi të vogla. Kuptuam klasifikim të tillë duke studiuar çka quajmë
shkallë të rritjes asimptotike ose më thjeshtë rend(klasë) të funksionieve.
Pwrkufizim