hyrje ne algoritmike-leksioni 1

22
Leksion I Hyrje ne Algoritmike B.Bimbari Tirane, me 08/02/2012

Upload: programmer

Post on 13-Oct-2014

1.756 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Hyrje Ne Algoritmike-Leksioni 1

Leksion I Hyrje ne Algoritmike

B.Bimbari Tirane, me 08/02/2012

Page 2: Hyrje Ne Algoritmike-Leksioni 1

Libri baze per kursin

Introduction to Algorithms, third edition. Thomas Cormen,

Charles Leiserson, Ronald Rivest, Clifford Stein

Page 3: Hyrje Ne Algoritmike-Leksioni 1

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

Page 4: Hyrje Ne Algoritmike-Leksioni 1

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.

Page 5: Hyrje Ne Algoritmike-Leksioni 1

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

Page 6: Hyrje Ne Algoritmike-Leksioni 1

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.

Page 7: Hyrje Ne Algoritmike-Leksioni 1

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.

Page 8: Hyrje Ne Algoritmike-Leksioni 1

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.

Page 9: Hyrje Ne Algoritmike-Leksioni 1

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.

Page 10: Hyrje Ne Algoritmike-Leksioni 1

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.

Page 11: Hyrje Ne Algoritmike-Leksioni 1

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

Page 12: Hyrje Ne Algoritmike-Leksioni 1

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

Page 13: Hyrje Ne Algoritmike-Leksioni 1

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

Page 14: Hyrje Ne Algoritmike-Leksioni 1

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?

Page 15: Hyrje Ne Algoritmike-Leksioni 1

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

Page 16: Hyrje Ne Algoritmike-Leksioni 1

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

Page 17: Hyrje Ne Algoritmike-Leksioni 1

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

Page 18: Hyrje Ne Algoritmike-Leksioni 1

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

Page 19: Hyrje Ne Algoritmike-Leksioni 1

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

Page 20: Hyrje Ne Algoritmike-Leksioni 1

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)

Page 21: Hyrje Ne Algoritmike-Leksioni 1

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)

Page 22: Hyrje Ne Algoritmike-Leksioni 1

Koha e ekzekutimit te algoritmit te

kerkimit binar

Pas transformimeve (dhe vertetimeve me induksion

matematik), llogaritet qe:

TbinarySearch(n) <= c(lg(n) + 2).