Anda di halaman 1dari 22

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 Efienca 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, a2an. 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. Efienca (efficiency) algoritmi perdor ne menyre efiente 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 efiences dhe thjeshtesise. Nje algoritem eficent (i shpejte), ne me te shumten e rasteve, eshte i kompikuar. Kriteri qe zgjedhim (efience 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 efient por jo shume i thjeshte per tu kuptuar (dhe anasjelltas).

Matja e kohes se ekzekutimit te algoritmit

Koha qe i duhet nje programi per tu 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),.

Matja e kohes se ekzekutimit te algoritmit


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.

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?

Shembull - Kerkimi linear

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

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

Shembull - Kerkimi linear

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.

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)


Tlinsearch(n) max{((c1 + c2)n + c3 , (c1 + c2)n + (c1 + c4))}

Koha e kerkimit eshte:

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