Hyrje Ne Algoritmike-Leksioni 1
-
Upload
programmer -
Category
Documents
-
view
1.758 -
download
5
Transcript of Hyrje Ne Algoritmike-Leksioni 1
Leksion I Hyrje ne Algoritmike
B.Bimbari Tirane, me 08/02/2012
Libri baze per kursin
Introduction to Algorithms, third edition. Thomas Cormen,
Charles Leiserson, Ronald Rivest, Clifford Stein
Algoritmi, kuptimi i tij
Cilesi te algoritmeve
Korrektesia
Efiçenca
Thjeshtesia
Koha e ekzekutimit te algoritmeve
Algoritmi i kerkimit linear
Koha e ekzekutimit ne rastin me te keq
Cfare eshte algoritmi
Algoritmi eshte nje procedure me hapa te njepasnjeshem qe merr disa te dhena hyrese (input) dhe prodhon disa vlera dalese (output).
Algoritmi eshte nje sekuence hapash qe duke kryer perllogartje, shnderrojne inputin ne output.
Algoritmi perdor struktura te dhenash.
Strukturat e te dhenave jane menyra sistematike te ruajtjes dhe organizimit te te dhenave (inpute, outpute te algoritmeve) te cilat i bejne te aksesueshme (vektore, lista, stiva, peme). Nje strukture te dhenash nuk eshte e pershtatshme per te gjitha qellimet e mundshme, keshtu qe duhen njohur pikat e forta dhe kufizimet e seciles.
Cfare eshte algoritmi
Algoritmi mund te shikohet si nje mjet per zgjidhjen e nje problemi kompjutacional te percaktuar mire.
Percaktimi i problemit pershkruan ne menyre te pergjithshme lidhjen ndermjet inputit dhe outputit.
Algoritmi pershkruan nje procedure kompjutacionale per te arritur/ realizuar lidhjen mes inputit dhe outputit.
Psh. problemet e renditjes se numrave jane probleme qe zgjidhen nepermjet algoritmeve. Problemi percaktohet si:
Input: nje sekuence n numrash a1, a2…an.
Output : nje perkembim (a1’, a2’, …an’) i sekuences hyrese i tille qe a1’ ≤ a2’ ≤ … ≤ an’.
Probleme qe zgjidhen me algoritme
Jo vetem problemet e kerkimit apo renditjes zgjidhen nepermjet algoritmeve
Projekti i gjenomit human me qellim identifikimin e te gjithe gjeneve te trupit njerezor dhe sekuencimin e ADN perberese, ruajtjen e informacionit ne menyre te pershtatshme (neper databaza biologjike) ka qene i bazuar dhe i ndihmuar nga algoritme te sofistikuar, qe pervec te tjerash kane mundesuar shfrytezim eficent te burimeve.
Interneti mundeson aksesin dhe terheqjen e shpejte te sasive te medha te informacionit. Ky proces mbeshtetet nga algoritme inteligjente te cilat mund te gjejne rrugen me te mire neper te cilen duhet te kalojne te dhenat ose perdorimin e motorreve te kerkimit qe gjejne shpejt ku ndodhet informacioni.
Probleme qe zgjidhen me algoritme
Tregtia elektronike lejon shkembimin e mallrave
elektronikisht dhe varet shume nga privatesia dhe siguria
e informacionit personal. Teknologjite mbeshtetese
bazohen tek kriptografia dhe firmat dixhitale te cilat
perdorin algoritme numerike.
Problemet e gjetjes se menyrave te
perdorimit/shperndarjes ne menyre eficente te burimeve
per te marre perfitim maksimal zgjidhen gjithashtu
nepermjet algoritmeve te programimit linear.
Probleme te veshtira
Interesohemi per te gjetur zgjidhje eficente te problemeve.
Pergjithesisht eficenca matet me shpejtesine (sa kohe duhet
per te prodhuar rezultatin) e ekzekutimit te algoritmit.
Ka nje grup problemesh per te cilat nuk njihet nje zgjidhje
eficente por as nuk eshte provuar qe nuk ekziston nje zgjidhje e
tille. Keto quhen probleme NP-komplete.
Nese zgjidhet njeri nga problemet NP-komplete, pra gjendet
nje algoritem eficent, atehere ekzistojne algoritme eficente per
te gjitha problemet e tjera te kesaj klase. Kjo eshte nje veti e
vecante dhe interesante e ketyre algoritmeve.
Probleme te veshtira
Eshte e rendesishme te njihen problemet NP-Komplete
sepse ato shfaqen shpesh ne situata reale. Keshtu qe
mund te shpenzohet nje kohe e madhe per gjetjen e
zgjidhjes më eficente , nderkohe qe koha mund te
shpenzohet per gjetjen e nje zgjidhjeje te mire per rastin
konkret.
Cilesi te Algoritmeve
Interesohemi per algoritma te mire.
Kriteret kryesore per vleresimin e algoritmeve:
Korrektesia (correctness) – algoritmi kryen saktesisht ate qe duhet
te beje, pra per cdo instance te inputit, ai jep rezultatin korrekt te
pritur. Nese algoritmi jep rezultat te gabuar ose jep rezultat te sakte
per disa nga instancat e inputit, atehere ai nuk eshte korrekt. Nje
algoritem jo korrekt nuk vlen per zgjidhjen e problemit.
Efiçenca (efficiency) – algoritmi perdor ne menyre efiçente burimet
(kujtese, procesor) te kompjuterit. Duam qe algoritmat te
ekzekutohen shpejt duke perdorur sa me pak kujtese.
Thjeshtesia (simplicity) – thjeshtesia per ta kuptuar dhe
implementuar nje algoritem.
Cilesi te Algoritmeve
Shpesh duhet zgjedhur ndermjet efiçences dhe thjeshtesise.
Nje algoritem eficent (i shpejte), ne me te shumten e rasteve,
eshte i kompikuar.
Kriteri qe zgjedhim (efiçence apo thjeshtesi) varet nga problemi
aktual.
Nqs nje program perdoret shpesh, atehere kostoja e perdorimit
te nje algoritmi te ngadalte, por te thjeshte dhe te lexueshem
eshte me e madhe sesa po te perdorej nje algoritem efiçent por
jo shume i thjeshte per t’u kuptuar (dhe anasjelltas).
Matja e kohes se ekzekutimit te algoritmit
Koha qe i duhet nje programi per t’u ekzekutuar (per te kryer veprimet, perpunimet per te cilat eshte ndertuar) varet:
Koha e ekzekutimit te algoritmit qe perben programin.
Inputi konkret qe merr programi.
Cilesia e implementimit dhe cilesia e kodit te gjeneruar nga kompilatori.
Makina qe perdoret per te ekzekutuar programin.
Ne kohen e ekzekutimit te algoritmeve ndikon dhe gjuha e programimit e zgjedhur apo stili i implementimit (rekursivitet ose jo),.
Koha e ekzekutimit te nje algoritmi do te matet ne varesi
te kohes se ekzekutimit te cdo instruksioni perberes ose
me sakte numri konstant i cikleve makine qe duhen per te
ekzekutuar nje instruksion.
Thuhet konstant sepse konsiderohet ai numer qe nuk
varet nga vlerat aktuale te variablave qe algoritmi trajton.
Keshtu mund te vleresohet njetrajtesisht per kohen e
ekzekutimit te algoritmit, duke e vleresuar vetem nga
veprimet.
Matja e kohes se ekzekutimit te algoritmit
Shembull - Kerkimi linear
Ne tabelen A kerkohet per vleren k dhe nese kjo vlere
gjendet, kthehet pozicioni ne tabele ku ajo ndodhet.
Algorithm linSearch(A; k)
1. for i 0 to A.length - 1 do
2. if A[i] = k then
3. return i
4. return -1
Cila eshte koha e ekzekutimit te algoritmit nese inputi eshte tabela A =
[2, 4, 3, 3, 5, 6, 1, 0, 9, 7] dhe k = 0? Thene ndryshe, sa hapa
perllogarites duhet te kryhen perpara sesa te arrihet ne perfundimin
nese numri k ndodhet ne tabelen A ose jo?
Per te llogaritur numrin e hapave qe kryen nga algoritmi linSearch duhet te gjendet sesa here ekzekutohet secili rresht i algoritmit.
Rreshti i pare ekzekutohet 8 here (per vlera i = 0..7)
Rreshti i dyte ekzekutohet 8 here
Rreshti i trete ekzekutohet 1 here
Rreshti i katert nuk ekzekutohet asnjehere
Shenojme c1, c2, c3 numrin e instruksioneve makine qe duhet te ekzektuohen per secilin nga rreshtat 1, 2 dhe 3.
Numri i hapave perllogarites te algoritmit linSearch per tabelen A dhe numrin k eshte te shumten:
8c1 + 8c2 + c3
Shembull - Kerkimi linear
Numri i hapave/ koha ekzekutimit ne
rastin me te keq
Koha e ekzekutimit ne rastin me te keq e nje algoritmi A
eshte funksioni Ta : N N ku Ta(N) eshte numri
maksimal i hapave qe kryen A me te dhena input me
permase N.
Per nje permase te dhene, numri i tabelave me ate
permase eshte gjithmone i fundem, pra Ta eshte gjithmone
e percaktuar mire.
Pergjithesisht konsiderohen tabela te fundme
Numri i hapave te perllogaritjes nuk eshte i pavarur nga
madhesia e tabeles A.
Pritet qe algoritmi te kryeje me shume hapa kur perdor nje
tabele me 100 000 elemente sesa kur perdor nje tabele me 10
elemente.
Edhe per tabela te te njejtes permase, numri i hapava varet
shume edhe nga fakti nese numri k ndodhet ne tabele ose jo.
Prandaj, vleresohet numri i hapave te algortimit ne rastin me te
keq.
Shembull - Kerkimi linear
Analiza e rastit me te keq per kerkimin
linear
Per kerkimin linear, rasti me i keq eshte kur numri k ndodhet ne pozicionin e fundit te tabeles A ose nuk gjendet fare ne tabele. Tabela A ka gjatesi n.
Nqs numri k ndodhet ne pozicionin e fundit te tabeles, numri i hapave qe kryen algoritmi per te gjetur k eshte:
c1n + c2n + c3 = (c1 + c2)n + c3
Nqs numri k nuk ndodhet ne tabele, atehere kemi:
c1(n+1) + c2n + c4 = (c1 + c2)n + (c1 + c4)
Koha e kerkimit eshte:
Tlinsearch(n) ≤ max{((c1 + c2)n + c3 , (c1 + c2)n + (c1 + c4))}
Koha eshte funksion linear i permases n se tabeles A
Numri mesatar i hapave/ koha mesatare
e ekzekutimit
Rasti me i keq eshte mjaft optimist dhe nuk shfaqet gjithmone
Koha mesatare e ekzekutimit te nje algoritmi eshte
funksioni AVTa (n) R ku AVTa(n) eshte numri mesatar i hapave qe kryen algoritmi A me te dhena input me permase n.
Probleme me kohen mesatare:
Cfare kuptimi ka saktesisht mesatarja? Cfare quhet input mesatar varet plotesisht nga aplikimi
Analiza e kohes mesatare eshte shume e veshtire matematikisht
Shembull – Kerkimi Binar
Algoritmi kerkon ne nje tabele te renditur per nje numer.
Input: tabela A me numra, e renditur ne rendin rrites, i1, i2, k
Output: Index i, i1≤ i ≤ i2, i tille qe A[i] = k, nqs k kjo i ekziston, - 1
perndryshe.
Algorithm binarySearch(A; k; i1; i2)
1. if i2 < i1 then return -1
2. else
3. j = (i1+i2)/2
4. if k = A[j] then
5. return j
6. else if k < A[j] then
7. return binarySearch(A; k; i1; j - 1)
8. else
9. return binarySearch(A; k; j + 1; i2)
Koha e ekzekutimit te algoritmit te
kerkimit binar
Le te jete ci koha e ekzekutimit te hapit ne rreshtin i te algoritmit
c8, c9 dhe c10 jane koha e ekzekutimit te therritjes rekursive te funksionit, por jo koha e ekzekutimit te tere veprimeve perfshire ne kete therritje
Permasa e tabeles input A eshte n = i2 – i1 + 1. Ajo eshte edhe numri i elementeve te tabeles qe do te investigohen
Koha e ekzekutimit te kerkimit binar eshte:
TbinarySearch(n) ≤ Σci + TbinarySearch(n/2). (per i nga 1 ne 10)
Koha e ekzekutimit te algoritmit te
kerkimit binar
Pas transformimeve (dhe vertetimeve me induksion
matematik), llogaritet qe:
TbinarySearch(n) <= c(lg(n) + 2).