You are on page 1of 4

Leksione të algoritmikës 3.

Algoritma iterative

Kapitulli 3. Algoritma iterative

3.1 Kerkimi i një vlere


3.2 Fshirja e një vlere
3.3 Futja e një vlere
3.4 Problemi i vlerave të dyfishta

Algoritma iterativë konsiderohen ata algoritma që kanë për bazë strukturat ciklike.
Mbi të gjitha, algortitmat iterative përshtaten mjaft mirë për përpunimin e të dhënave
të vendosura në tabela.
Nga pikpamja funksionale, veprimet me tabelat, mund të ndahen në dy kategori
kryesore:

a) Veprime menaxhimi, që kanë të bëjnë me përgatitjen e tabelave për


përpunimin e të dhënave që ato mbajnë, si për shembull:
- futja e një vlere (insert)
- fshirja e një vlere (delete)
- renditja e vlerave të elementëve sipas një kriteri të caktuar (sorting), etj

b) Veprime kërkimi, që kanë të bëjnë me përftimin e disa karakteristikave të


drejtpërdrejta ose të përpunuara të të dhënave si:
- kërkimi i ekzistencës së një vlere të caktuar apo pozicionit të saj
(search)
- kërkimi i disa vlerave të veçanta si vlera më e madhe, më e vogël, vlera
mesatare e elementëve, vlera medianë e elementëve, elementi i kte, etj
- kërkimi i disa agregateve tipike si shuma e elementëve, frekuenca e
elementëve, etj.

3.1 Kërkimi i një vlere

Në përgjithsi, kërkimi në një listë, për të gjetur një vlerë të caktuar, është i
zakonshëm në jetën e përditshme. Në aplikimet reale, lista e të dhënave përbëhet nga
të ashtuquajturit regjistrimet (records) (p.sh regjistrimet e studentëve), e
implementuar në një ose në disa tabela. Qëllimi i kërkimit është që të gjëndet një
regjistrim i veçantë që plotëson një kriter të caktuar. Kërkimi zakonisht bëhet, sipas
përmbajtjes së një ose disa fushave të regjistrimit, që quhen çelsa (keys), p.sh. kodi i
identitetit apo mbiemri. Gjetja e këtij regjistrimi mundëson aksesin në pjesën tjetër të
regjistrimit, p.sh notat e studentit. Më poshtë do të diskutojmë algoritma kërkimi për
një model më të thjeshtë dhe pikërisht rastin kur listat janë tabela, zakonisht me numra
të plotë ose me të dhena të tipit tekst. Eshtë e qartë që teknikat e kërkimit mund të
përgjithsohen për të dhëna më reale.
Cila është metoda më e thjeshtë për të kërkuar në një listë elementësh?
Kontrollohet elementi i parë, pastaj kontrollohet elementi i dytë dhe vazhdohet në
këtë mënyrë deri sa të gjendet elementi i kërkuar. Në rast se elementi i kërkuar nuk
gjendet atëhere kërkimi quhet i dështuar. Ky lloj kërkimi quhet kërkimi linear (linear
search) ose i quajtur edhe ndryshe kërkimi i njëpasnjëshëm (sequential search).
Së pari do të supozojmë se tek të dhënat fillestare nuk ka dy vlera të njëjta.
Algoritmi 3.1, i quajtur KerkimLinear, kërkon në një tabelë të quajtur a, ekzistencen e

Prof. Dr. Dhimitri Tole 1/4


Leksione të algoritmikës 3. Algoritma iterative

një vlere të quajtur Target. Aplikimi i një cikli While është i përshtatshëm, mbasi
vlera Target e kërkuar mund të jetë kudo në tabelë ose ndoshta edhe mund të mos jetë
fare. Algoritmi duhet të jetë i aftë që të dalë nga cikli sapo vlera Target të gjëndet dhe
të bredhë në të gjithë elementët në se është e domosdoshme. Rezultati që do të
prodhojë algoritmi është ose pozicioni i vlerës së kërkuar ose një mesazh në rast
dështimi.

Algoritmi 3.1 Kërkimi i një vlere në një tabelë

01 // Hyrje: tabela a[0],...a[n-1], me n elemente dhe vlera që kërkohet, target


02 // Dalje: pozicioni i vlerës se kerkuar ose -1 në se vlera nuk gjendet
03 Procedure KerkimLinear (n, a, target, poz)
04 Begin
05 i := 0;
06 While ((i < n) And (a[i] ≠ target)) Do
07 i:= i+1;
08 If (i > n)
09 Then poz :=-1
10 Else poz := i;
11 Return (poz)
10 End KerkimLinear

Një version tjetër, më elegant, i algoritmit do të krijohet në se vlera target në


hapin e parë të algoritmit injektohet pas vlerës se fundit në tabelën ku janë vendosur të
dhënat fillestare, tek a[n], duke krijuar kështu një të ashtuquajtur sentinel të
përfundimit të kontrollit, algoritmi 3.2. Në përgjithsi, sentinela ose vlera roje është një
vlere e cila përdoret zakonisht për të përfunduar një cikël. Një përdorim tipik i saj
është atëhere kur jemi duke pranuar të dhëna nga tastiera dhe një vlerë specifike
shërben për të treguar përfundimin e të dhënave fillestare.

Algoritmi 3.2 Kërkimi i një vlere në një tabelë, versioni me sentinele

01 // Hyrje: tabela a[0],...a[n-1], me n elemente dhe vlera që kërkohet, target


02 // Dalje: pozicioni i vlerës se kerkuar ose -1 në se vlera nuk gjëndet
03 Procedure KerkimLinearSnt (n, a, target, poz)
04 Begin
05 a[n] := target
06 i := 0;
07 While (a[i] ≠ target) Do
08 i := i+1;
09 If (i = n)
10 Then poz := -1
11 Else poz := i;
12 Return (poz)
13 End KerkimLinearSnt

3.2 Fshirja e një vlere

Së pari do të supozojmë se tek të dhënat fillestare nuk ka dy vlera të njëjta. Algoritmi


i fshirjes fillon me një kërkim të pozicionit të vlerës që do të zhduket me anë të
algoritmit KerkimLiner. Në se vlera nuk gjëndet, atëhere ndërpritet puna duke
sinjalizuar me anë të kthimit të vlerës False. Në se vlera gjëndet dallojmë dy raste:
a) Vlera e kërkuar është në pozicionin më të lartë dhe në këtë rast mjafton të
zvogëlojmë përmasën e tabelës me 1.

Prof. Dr. Dhimitri Tole 2/4


Leksione të algoritmikës 3. Algoritma iterative

b) Vlera e kërkuar ndodhet në segmentin [0, n-1]. Zhvendosen nga një pozicion
poshtë të gjitha vlerat duke filluar nga vlera që ndodhej menjëherë pas vlerës së gjetur.
P.sh duke supozuar që vlera e kërkuar ishte në pozicionin 5 atëhere në këtë pozicion
vjen vlera e 6; në vendin e 6-të vjen vlera e 7-të e kështu me rradhë. Zvogëlohet me
një përmasa e tabelës. Algoritmi 3.2, paraqitet një algoritëm që realizon procesin e
fshirjes se një elementi nga një tabelë.

Algoritmi 3.3 Fshirja e një vlere në një tabelë

01 // Hyrje: tabela a[0],..., a[n-1], me n elemente dhe vlera që do të fshihet, target


02 // Dalje: tabela e paksuar me një element ose njoftim për mossukses
03 Procedure FshiElement(n, a, target)
04 Begin
05 KerkimLinear (n, a, target, poz); // gjen pozicionin me ane të kerkimit linear
06 If (poz = -1)
07 Then
08 Return(False)
09 Else
10 Begin
11 If (poz = n - 1)
12 Then n := n - 1
13 Else
14 Begin
15 m := n -1 - poz;
16 For i := 1 To m Do
17 a[poz + i - 1] := a[poz + i]
18 n := n – 1;
19 End;
20 Return(a)
21 End;
22 End FshiElement

3.3 Futja e një vlere

Futja e një elementi në një tabelë të çfardoshme është një proces shumë i thjeshte, ai
kërkon vetëm një hap. Kjo është e vërtetë sepse vlera e re do të futet në vendin e parë
të lirë dhe ky pozicion i lirë është pozicioni pas vlerës të fundit. Do të supozohet se
algoritmi e njeh këtë pozicion. Më pas zmadhohet me një përmasa e tabelës. Problemi
është më i komplikuar kur tabela tashmë është e renditur dhe nuk dëshërojmë që të
prishet renditja nga futja në pozicionin e duhur elementit të ri.

3.4 Problemi i vlerave të dyfishta

Në se në një tabelë, ka të paktën dy elementë me vlerë të njëjtë atëhere thuhet se


tabela ka elementë të dyfishtë. Kur projektohet një strukturë për rezervimin e të
dhënave është e nevojshme të vendoset në se do të lejohen vlera të dyfishta apo jo. Ky
vendim përcaktohet nga fakti se çfarë lloj të dhënash do të rezervohen. P.sh në se
përpunojmë të dhënat e personelit dhe si çelës shërben numri i sigurimit social të
punonjësit atëhere nuk ka kuptim lejimi i vlerave të dyfishta për këtë variabël. Nga
ana tjetër, në se si çelës shërben mbiemri i punonjësit atëhere duke qënë se mund të
ketë punonjës me të njëjtin mbiemër është e natyrshme që të lejohet ekzistenca e
vlerave të dyfishta. Në rast se prodhohet një program për rezervimin e të dhënave, në

Prof. Dr. Dhimitri Tole 3/4


Leksione të algoritmikës 3. Algoritma iterative

të cilin nuk duhet lejuar ekzistenca e vlerave të dyfishta, atëhere duhet të


parashikohen module në program, që të mos lejojnë gabimet njerëzore që mund të
bëhen gjatë procesit të komunikimit me kompjutërin për futjen e vlerave të dyfishta.

a) Kërkimi në rastin e vlerave të dyfishta

Të lejuarit e vlerave të dyfishta e ndërlikon algoritmin e kërkimit. Në rast se gjëndet


një vlerë e dyfishte kërkimi duhet të vazhdojë deri në fund mbasi mund të ketë vlera
të tjera të dyfishta.

b) Fshirja në rastin e vlerave të dyfishta

Fshirja është më e ndërlikuar në rast se lejohen vlera të dyfishta mbasi duhet të


përcaktohet se cila është vlera që duhet të eleminohet. Megjithatë në qoftë se me
fshirje nënkuptohet fshirja e të gjitha vlerave të dyfishta për një vlerë të caktuar, i
njëjti veprim do të kërkojë përsëritjen e fshirjes deri sa të përjashtohen të gjitha vlerat
e dyfishta.

c) Futja në rastin e vlerave të dyfishta

Në këtë rast janë të vlefshme vërejtjet e bëra më parë.

3.5 Shumëzimi i matricave kuadratike

Deri tani shqyrtuam disa algoritma me tabela njëpërmasore (të quajtur vektorë në
matematikë). Le të shohim një algoritëm mbi një tabelë dypërmasore (të quajtura
matrica në matematikë dhe që përdoren gjërësisht sidomos në probleme inxhinierike).
Përsëri nga ana funksionale, veprimet me tabelat me dy përmasa, ndahen në veprime
menaxhimi dhe veprime kërkimi por me nuancat përkatse.

Algoritmi 3.4, shërben për shumëzimin e dy matricave kuadratike a, b me përmasa


( n-herë-n).
Algoritmi 3.4 Shumëzimi i dy matricave kuadratike

01 // në hyrje: n > 0 dhe a, b dy matrica kuadratike të rendit n


02 // në dalje: Një matrice c = a x b, e rendit n
03 Procedure MatMult(n, a, b, c)
04 Begin
05 For i := 1 To n Do
06 For j := 1 To n Do
07 Begin
08 c[i,j] := 0;
09 For k:=1 To n Do
10 c[i.j]:=c[i,j] + a[i,k]* b[k,j]
11 End
12 Return(c)
13 End MatMult

Prof. Dr. Dhimitri Tole 4/4

You might also like