Algoritmika dhe Programimi i Avancuar KAPITULLI I HYRJE Algoritmat nje problem renditjeje Hyrja: a1, a2,, an> Dalja: <a 1, a 2,, a n> a 1 a 2 a n.

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Algoritmika dhe Programimi i Avancuar KAPITULLI I HYRJE Algoritmat nje problem renditjeje Hyrja: a1, a2,, an> Dalja: <a 1, a 2,, a n> a 1 a 2 a n."

Transcript

1 KAPITULLI I HYRJE Algoritmat Ne menyre informale do te perkufizonim nje algoritem si nje procedure perllogaritese cfaredo qe merr disa vlera ose nje bashkesi vlerash ne hyrje dhe prodhon disa vlera ose nje bashkesi vlerash ne dalje. Keshtu mund te themi se nje algoritem eshte nje sekuence hapash perunues qe transformojne hyrjen ne dalje. Nje algoritem mund te konsiderohet edhe si nje instrument per te zgjidhur nje problem perllogarites te mirepercaktuar. Studimin e algoritmave do ta fillojme me nje problem renditjeje te nje sekuence numrash ne rendin zbrites. Ky problem prezantohet ne menyre frekuente ne praktike, formalisht nje problem renditjeje do ta percaktojme si : -Hyrja: nje sekuence n numrash <a1, a2,, an> -Dalja: perpunim i sekuences ne hyrje <a 1, a 2,, a n> e tille qe a 1 a 2 a n. Kur jepet sekuenca ne hyrje <31,41,59,26,41,58>, nje algoritem renditjeje kthen ne dalje sekuencen <26,31,41,41,58,59>. Nje sekuence ne hyrje te ketij lloji do ta quajme instance te nje problemi rendites. Ne pergjithsi instanca e nje problemi konsiston ne te gjitha te dhenat ne hyrje te nevojshme per perllogaritjen e nje zgjidhjeje. Renditja eshte nje problem fondamental ne informatike (perdoret ne shume programe si hap ndermjetes) dhe faktikisht jane zhvilluar nje numer i madh algoritmash renditjeje. Zgjedhja e algoritmit per nje aplikacion te dhene varet nga numri i elementeve qe duhen renditur, nga fakti sesa te renditur mund te jene elementet dhe nga lloji i memories qe do te perdoret: memorie kryesore, disqe etj. Nje algoritem eshte korekt nese per çdo instance ne hyrje ndalon ekzekutimi kur prodhohet dalja korrekte; themi se nje algoritem korrekt zgjidh problemin perllogarites te dhene. Nje algoritem jokorrekt mund te mos ndaloje asnjehere per ndonje instance ne hyrje, ose mund te ndaloj duke dhene nje pergjigje te ndryshme nga ajo qe pritet. Ndryshe nga c pritet algrotimat jokorrekt mund te jene te dobishem nese shkalla e gabimit tek ta mund te kontrrollohet. Gjuhes per pershkrimin e algoritmave gjate ketij kursi do ti referohemi si pseudokod, kjo gjuhe eshte nje gjuhe e ngjashme me C; ajo cfare e dallon pseudokodin nga programi real eshte fakti qe ne nje pseudokod algoritmi shprehet ne menyre me te qarte dhe me koncize shpesh te gershetuar me shprehje te gjuhes se folur. Insertion Sort Algoritmi Insertion Sort eshe nje algoritem qe rezulton te jete efektiv ne rastin kur duhet renditur nje numer i vogel elementesh. Insertion Sort ngjason me menyren e perdorur per te renditur nje pale letra; fillohet me doren e majte bosh dhe letrat e mbyllura te vendosura mbi tavoline, letrat merren nje nga nje dhe vendosen ne pozicionin e duhur ne doren e majte. Per te gjetur pozicionin e duhur te nje letre e krahasojme me te gjitha letrat qe kemi ne dore duke filluar nga e djathta ne te majte

2 Pseudokodi i algoritmit pershkruhet si nje procedure qe merr si parameter nje vektor A[1 n] qe permban nje sekuence me gjatesi n qe duhet renditur. Insertion Sort(A) 1. for j to length(a) 2. do key A[ j ] 3. > A[ j ] shtohet ne sekuencen e renditur A[1,.. j-1] 4. i j while i > 0 dhe A [ i ] > key 6. do A[ i +1 ] A[ i ] 7. i i A [i +1] key Fig1.1-Ne fig tregohet funksionimi i algoritmit per A=<5,2,4,6,1,3>. Indeksi j tregon elementin e radhes qe do te renditet, elementet A[1...j-1] te vektorit perbejne elementet tashme te renditur, elementeta[j+1... n] i korrespondojne elementeve qe jane ne vektor dhe qe nuk jane krahasuar ende. Indeksi j spostohet nga e majta ne te djathte ne te gjithe vektorin; ne çdo hap te ciklit for elementi A[j] kopjohet jashte vektorit (rreshti2), keshtu duke filluar nga pozicioni j-1, elementet spostohen nje nga nje me nje pozicion ne te djathte derisa te gjehet pozicioni i duhur per A[j](rreshit 4-7): ne kete pike shtohet elementi A[j] (rreshti 8). Fig 1.2- Perpunimi i Insertion-Sort ne vektorin A=<5,2,4,6,1,3>. Pozicioni i indeksit j tregohet me nje rreth. Konvecione te perdorura ne pseudokod 1. Simboli > tregon se rreshti ne vijim eshte nje koment 2. Simboli tregon vleredhenie i j do te thote i merr vleren e j 3. Variablat (i, j, key) jane variabla lokale te procedures variablat global do te specifikohen si te tille

3 Ushtrim Zgjdhni problemin e kerkimit te perkufizuar sa me poshte: Input: nje sekuence e n numrave A = < a 1, a 2,, a n > dhe nje vlere v Output: nje indeks i te tille qe A[i]= v, ose vlere NIL nese v nuk eshte prezente ne A. Shkruani pseudokodin per kerkimin linear qe kontrrollon sekuencen duke filluar nga elementi i pare ne kerkim te vleres v. Analiza e Algoritmave Analizim i nje algoritmi do te thote te parashikosh burimet e kerkuara nga algoritmi. Ndonjehere jane te rendesishme burime te tilla si memoria, portat e komunikimit dhe portat llogjike; shume me shpesh eshte me mjaft interes matja e kohes se ekzekutimit. Pergjithsisht, gjate analizimit te algoritmave kandidat per zgjidhjen e nje problemi,s me efikasi mund te identifikohet lehtesisht; nje analize e tille mund te na tregoj me shume se sa nje kandidat ndersa disa algoritmma me inferior skarcohen gjate analizes. Perpara se te mund te analizojme nje algoritem duhet te percaktojme nje model per teknollogjine e realizimit qe do te perdoret, duke perfshire nje model te burimeve per nje teknollogji te tille dhe koston e tyre. Gjate kursit do ti referohemi modelit perllogarites te njohur si RAM (Random Access Machine). Algoritmat do te realizohen si programe per nje makine te tille. Ne modelin RAM instruksionet ekzekutohen njeri pas tjetrit dhe nuk kemi operacione konkurrente. Analiza e nje algoritmi mund te rezultoj komplekse edhe pse algoritmi eshte i thjesht. Duke qene se sjellja e nje algoritmi mund te jete e ndryshme per çdo input te mundshem, eshte e nevojshme nje metode per te pergjithsuar kete sjellje ne nje formule te thjeshte dhe te kuptueshme. Analiza e insertion-sort Koha e kerkuar nga proceduar INSERTION-SORT varet nga hyrja [input]: renditja e tre mije numrave kerkon me shume kohe se renditja e tre numrave. Gjithashtu procedura mund te kerkoje kohe te ndyrshme ekzekutimi edhe per sekuenca me madhesi te njejte ne varesi te faktit sesa e renditur eshte fillimisht sekuenca. Ne pergjithsi koha e kerkuar nga algoritmi rritet me zmadhimin e dimensionit te hyrjes. Per kete eshte e nevojshme nje metode me formale ne terma te kohes se ekzekutimit dhe dimensionit ne hyrje. Koha e ekzekutimit te nje algoritmi per nje input te vecante perfaqesohet nga numri i operacioneve elementare ose hapat e ekzekutuar per te perllogaritur daljen korresponduese; percaktimi i konceptit te hapit ne menyren me te pavarur te mundur nga cfaredolloj makine rezulton konvenient. Duke pasur parasysh kete mund te bejme supozimet e meposhtme: - per te ekzekutuar çdo rresht pseudokodi kerkohet nje kohe konstante - çdo rresht mund te kerkoj nje kohe ekzekutimi te ndryshme nga tjetri Hipoteza se ekzekutimi i rreshtit te i-te eshte Ci ku Ci eshte konstante dhe eshte kompatibel me modelin RAM dhe me pjesen me te madhe te makinave perllogaritese moderne

4 Fillojme analizen e procedures insertion-sort n.p.r koheve te ekzekutimit te çdo rreshti dhe numrin e hereve qe ekzekutohet çdo rresht. Per çdo j = 2,3,...,n ku n = length [A] le te jete tj numri i hereve qe perseritet testimi i kryer nga cikli while ne rreshtin e peste te pseudokodit. Supozojme se komentet nuk ekzekutohen dhe si pasoje nuk i llogarisim. Insertion Sort(A) kosto n o i hereve 1. for j to length(a) C1 n 2. do key A[ j ] C2 n > A[ j ] shtohet ne sekuencen e renditur A[1,.. j-1] 4. i j 1 C4 n while i >0 dhe A [ i ] >key C5 n j =2 tj 6. do A[ i +1 ] A[ i ] C6 n j = 2 (tj - 1) 7. i i - 1 C7 n j = 2 (tj - 1) 8. A [i +1] key C8 n -1 Koha e ekzekutimit te algoritmit jepet nga shuma e koheve te ekzekutimit te çdo rreshti qe ekzekutohet; nje instruksion qe kerkon ci hapa per tu ekzekutuar dhe perpunohet n here kontribuon me ci n ne kohen totale te ekzekutimit. Per te llogaritur kohen e ekzekutimit T(n) kryejme shumen e te gjithe produkteve ne kolonat kosto dhe numri i hereve dhe kemi: T ( n ) = c1n + c2( n - 1 ) + c4(n - 1) + c5 n j =2 tj + c 6 n j = 2 (tj - 1) + c7 n j = 2 (tj - 1) + c8( n - 1 ) Edhe kur dimensioni i hyrjes eshte i njejte koha e ekzekutimit te nje algoritmi mund te varet nga lloji i hyrjes psh per Isertion-Sort rasti me i mire paraqitet kur vektori eshte i renditur: per çdo j=2,3,..., n gjendet A[i] key ne rreshtin 5, kur i ka vleren fillestare j-1. Keshu kemi tj=1 per çdo j= 2,3,...,n dhe nje kohe ekzekutimi per rastin me te mire T ( n ) = c1n + c2( n - 1 ) + c4(n - 1) + c5(n - 1) + c 8(n - 1) = = (c1+c2+c4+c5+c8)n - (c1+c2+c4+c5+c8) Kjo kohe ekzekutimi mund te shprehet si an + b, ku a dhe b mund te shprehen n.p.r Ci si rrjedhim T(n) eshte nje funksion linear i n. Nese vektori eshte i renditur ne sensin e kundert verifikohet rasti me i keq. Ne kete rast duhet te krahasohet çdo A[j] me elementet e nenvektorit A[1...j-1], keshtu qe tj=j per çdo j=2,3,...n duke pasur parasysh se Σ n j = n ( n + 1 )/

5 j=2 Σ n n(j-1)= n(n + 1)/2-1 j=2 Ne rastin me te keq koha e kezekutimit shprehet si : T(n)=c1n+c2(n-1)+c4(n-1) +c5(n(n+1)/2-1) +c6(n(n-1)/2 ) +c7(n(n-1)/2 )+c8(n-1) T(n)=(c5/2+c6/2+c7/2)n2+(c1+c2+c4+c5/2-c672-c7/2+c8)n- (c2+c4+c5+c8) Kjo kohe ekzekutimi ne rastin me te keq mund te shprehet si T(n)=an 2 +bn+c ku konstantet a,b,c shprehen n.pr ci. Analiza e rastit me te keq dhe rastit mesatar Gjate analizimit te algoritmit isertion sort u morren ne konsiderate si rasti me i mire ashtu edhe rasti me i keq. Gjate kursit pergjithsisht do te merret ne konsiderate koha e ekzekutimit per rastin me te keq, qe do te thote koha me e gjate e ekzekutimit per çdo hyrje me dimension n; kjo zgjiedhje motivohet nga qrsyet e meposhtme: Koha e ekzekutimit ne rastin me te keq per nje algoritem prezanton nje limit superior ne kohet e ekzekutimit per çdo input. Njohja e kesaj kohe na garanton se algoritmi nuk do te kerkoj asnjehere kohe me te madhe; gjithashtu nuk eshte e nevojshme te studiohet asnje hipoteze ne lidhje me faktin se koha e ekzekutimit mund te perkeqesohet. Per disa algoritma, rasti me i keq verifikohet mjaft shpesh. Per shembull gjate kerkimit te nje informacioni ne bazen e te dhenave, rasti me i keq i algoritmit te kerkimit do te verifikohet sa here ai informacion nuk eshte prezent ne bazen e te dhenave; ne disa aplikacione qe lidhen me kerkimin i te dhenave qe mungojne mund te ndodh ne menyre frekuente Mesatar pergjithsisht eshte po aq i keq sa rasti me i keq. Supozojme se jane zgjedhur n numra rastesisht tek te cilet aplikojme insertion-sort; sa kohe do te na duhet per te percaktuar se ku do te shtohet A[j] ne nenvektorin A[1..j-1]? Mesatarisht do te thonim se gjysma elementeve te A[1...j-1] jane me te vegjel se A[j] dhe gjysma tjeter jane me te medhenj. msi rrjedhim mesatarisht, duhet te verifikohet gjysma e A[1...j-1] qe do te thote tj= j/2. Duke llogaritur kohen rezultante perftohet nje funksion kuadratik ne varesi te dimensionit ne hyrje, ashtu si koha e ekzekutimit per rastin me te keq. Rendi i Rritjes Per te lehtesuar analizen e procedures Insertion-Sort beme disa abstragime, fillimisht injoruam koston e ekzekutimit te çdonjeres prej komandave duke perdorur nje konstante Ci per te perfaqesuar keto kosto; gjithashtu vume re se edhe keto konstante paraqisnin me shume detaje nga cka na nevojiteshin; ne rastin me te keq kohen e ekzekutimit e

6 llogaritem si an 2 +bn+c, ku a, b, c i shprehem ne varesi te Ci. Pra jo vetem qe injoruam kostot reale te komandave por edhe kostot abstrakte te tyre. Mund te bejme nje abstragim tjeter duke marre ne konsiderate shkallen e rritjes ose rendin e rritjes te kohes se ekzekutimit, qe paraqet vleren me interes me te madh ne analizen e algoritmave. Per nje qellim te tille, konsiderohet vetem termi kryesor i formules (psh an 2 ), duke qene se termat e rendeve inferiore jane relativisht me pak te rendesishem per vlera shume te medha te n; mund te injorohet gjithashtu faktori konstant i termit kryesor pasi faktoret konstant jane me pak te rendesishem ne shkallen e rritjes per percaktimin e eficeneces perllogaritese per input te medha. Keshtu themi se insertion-sort ne rastin me te keq ka nje kohe ekzekutimi Θ(n 2 ). Funksioni Θ do te perdoret ne kete kapitull ne menyre informale dhe do te percaktohet me vone. Se fundmi mund te themi se nje algoritem konsiderohet me efikas se nje tjeter nese koha e ekzekutimit ne rastin me te keq ka nje rend rritjeje me te vogel. Ushtrim Le te jete dhene problemi i renditjes se n numrave, te memorizuar ne nje vektor A si vijon: -gjendet elementi me i vogel i A dhe vendoset ne elementin e pare te nje vektori tjeter B -gjendet elementi i dyte me i vogel i A dhe vendoset ne pozicionin e dyte te vektorit B duke vazhduar me rradhe per te gjithe elementet e A. Shkruani pseudokodin e ketj algoritmi te njohur si selection-sort. Percaktoni kohen e ekzekutimit per rastin me te mire dhe rastin me te keq duke perdoru shenimin Θ. Projektimi i Algoritmave Ekzistojne shume teknika per projektimin e algoritmave; per shembull algoritmi insertion-sort perdor nje llogjike rritese; pasi renditet nenvektori A[1...j-1], shtohet elementi A[j] ne pozicionin e tij duke prodhuar vektorin A[1...j] te renditur. Ne kete paragraf do te studiohet nje llogjike tjeter e njohur si perca-dhe-sundo (dividi-etimpera), qe do te perdoret per projektimin e algoritmave te renditjes koha e ekzekutimit te te cileve eshte shume me e vogel se ajo e insertion-sort. Llogjika Perca-dhe-Sundo Shume algoritma kane nje strukture rekursive: per te zgjidhur nje problem te caktuar, algoritma te tille ritherrasin veten per te menaxhuar nenprobleme analoge me ate te dhene. Keto algoritma pergjithsisht ndjekin llogjiken perca-dhe-sundo: problemi seksionohet ne disa nenprobleme qe jane te ngjashem me ate origjinal por me dimension me te vogel; nenproblemet zgjidhen rekursivisht dhe te gjitha zgjidhjet kombinohen per te formuar zgjidhjen e problemit fillestar. Llogjika perca-dhe-sundo, ne çdo nivel rekursiviteti strukturohet ne tre hapa: Perca: problemi ndahet ne nje numer te caktuar nenproblemesh

7 Sundo: nenproblemet zgjidhen rekursivisht. Gjithsesi nese dimensioni i nenproblemeve eshte mjaftueshmerisht i vogel ato mund te zgjidhen ne menyre direkte. Kombino: zgjidhjet e nenproblemeve kombinohen per te perftuar zgjidhjen e problemit origjinal. Algoritmi merge-sort ndjek ne menyre te ngushte llogjiken perca-dhe-sundo; intuitivisht ai funksion ne menyren e meposhtme: Perca: n elementet e sekuences qe do te renditen ndahen ne dy sekuenca me n/2 elemente Sundo: renditen dy nensekuencat, duke perdorur ne menyre rekursive merge-sort Kombino: shkrihen dy nensekuencat per te prodhuar si pergjigje sekuencen e renditur Vini re se procesi i thirrjes rekursive fillon kur sekuenca qe do te renditet ka nje gjatesi te barabarte me 1: ne kete rast nuk kryhet asnje veprim pasi sekuenca me nje element eshte vetvetiu e renditur. Operacioni çels i algoritmit merge sort eshte shkrirja e dy nensekuencave te renditura ne hapin kombino. Per te ekzekutuar nje funksion te tille perdoret nje procedure ndihmese MERGE(A,p,q,r) ku A eshte nje vektor dhe p,q,r jane indekse te vektorit te tilla qe p q<r; kjo procedure, duke supozuar se A[p,...q] dhe A[q+1...r] jane te renditur, gjeneron nje nenvektor te vetem qe zevendeson nenvektorin korrent A[p...r]. Pseudokodi i algoritmit mund te shkruhet lehtesisht (detyre), koha e ekzekutimit te tij eshte Θ(n), ku n = r p + 1 eshte numri i elementeve ku ekzekutohet shkrirja. Procedura MERGE mund te perdoret si nje nenprogram i algoritmit merge sort. Procedura MERGE-SORT(A,p,r) rendit elementet e nenvektorit A[p...r]; nese p r atehere vektori ka te shumten nje element dhe si rrjedhim eshte i renditur; ne te kundert hapi i ndarjes llogarit nje indeks q qe pjesezon A[p..r] ne dy nenvektor: A[p..q] qe permban [n/2] (numri i plote me i vogel qe eshte i barabarte ose me i madhe se x) elemente dhe A[q+1...r] qe permban [n/2] elemente (numri i plote me i madh i barabarte ose me i vogel se x). Sekuenca e renditur

8 Fig 1.3 Perpunimi i merge-sort ne vektorin A=<5,2,4,6,1,3,2,6>. Gjatesia e sekuencave shkrirja te renditura ku do te kryhet shkrirja rritet shkalle shkalle me perparimin e algoritmit nga poshte larte MERGE-SORT (A,p,r) 1. if p< r shkrirja 2. then q (p+r) / 2 3. MERGE-SORT shkrirja (A, p, q) shkrirj 4. MERGE-SORT (A, q+1,r) shkrirja shkrirja shkrirj 5. MERGE (A, p, q, r) Per te renditur te gjithe sekuencen Sekueca A = <A[1],A[2], A[n]>, fillestare thirret procedura MERGE- SORT (A, 1, length[a]), ku length[a] = n. Shohim funksionimin bottom up te procedures kur n eshte nje fuqi e 2, algoritmi ekzekuton shkrirjen e cifteve te sekuencave me nje element per te formuar sekuencen e renditur me gjatesi dy; me pas ekzekutohet shkrirja e sekuences me gjatesi 2 per te formuar sekuencen e renditur me gjatesi 4 dhe keshtu me radhe deri ne shkrirjen e dy nensekuencave me gjatesi n/2 per te formuar sekuencen e renditur me gjatesi n si tregohet ne fig. Analiza a algoritmit Perca-dhe-Sundo Kur nje algoritem permban nje thirrje rekursive tek vetvetja, koha e tij te ekzekutimit mund te pershkruhet n.p.r nje ekuacioni rekursitiviteti ose shkurt rekursioni qe pershkruan kohen e ekzekutimit komplekse per nje problem me dimension n ne termat e kohes se ekzekutimit per input me te vogla. Mund te perdorim instrumente matematik per te zgjidhur rekursivitetin duke vendosur keshtu limite mbi performancen e nje algoritmi. Rekusiviteti per kohen e ekzekutimit te nje algoritmi perca-dhe-sundo bazohet ne tre hapat e llogjikes primare. Le te jete T(n) koha e ekzekutimit te nje problemi me dimension n; nese dimensioni i problemit eshte mjaftueshmerisht i vogel, per shembull n c per ndonje konstante c, atehere zgjidhja eshte fare banale dhe kerkon nje kohe konstante qe shkruhet si Θ(1). Supozohet se problemi ndahen ne a nenprobleme, ku secili ka dimension 1/b kundrejt problemit kryesor; nese harxhohet nje kohe D(n) per te ndare problemin ne nenproblema dhe nje kohe C(n) per te kombinuar zgjidhjen e nenproblemave ne zgjidhjen e problemit origjinal, perftohet ekuacioni rekursiv i meposhtem: T(n) = a T(n/b) + D(n) + C(n) T(n) = Θ(1) n c n > c

9 Analiza e merge-sort Edhe pse pseudokodi i MERGE-SORT funksionon ne menyre korrekte edhe kur numri i elementeve nuk eshte cift, analiza e bazuar ne rekursionin thjeshtezohet nese supozohet qe problemi origjinal ka nje dimension qe eshte fuqi e dyshit. Ne nje rast te tille secili nga hapat e ndarjes prodhon dy nensekuenca me gjatesi ekzakte n/2; kjo hipoteze nuk influencon absolutisht rendin e rritjes se rekursionit. Per te percaktuar kohen e ekzekutimit T(n) ne rastin me te keq dhe ne rastin me te mire te merge-sort ne n numra, mund te llogjikojme ne menyren e meposhtme. Merge-sort i aplikuar ne çdo njerin prej elementeve kerkon nje kohe konstante; kur kemi n>1 elemente, koha e ekzekutimit ndahet si me poshte. Perca: hapi i ndarjes llogarit indeksin e mesit te vektorit, keshtu kemi nje kohe konstante nga ku D(n) = Θ(1) Sundo: zgjidhen rekursivisht dy nenprobleme, secili me dimension n/2 qe kontribuojne ne kohen e ekzekutimit me 2T(n) Kombino: kemi ekzaminuar me pare faktin se procedura Merge ne nenvektorin me n elemente kerkon nje kohe Θ(n), si rrjedhim C(n) = Θ(n). Keshtu ne rastin me te keq per merge-sort kemi T(n) = Θ(1) n = 1 T(n) = 2 T(n/2) + Θ (n) n > 1 Ushtrim Duke perdorur fig 1.3 si model ekzekutoni operacionet e merge-sort ne vektorin A=<3,41,52,26,38,57,9,49>. Rendi i rritjes se funksioneve Rendi i rritjes se kohes se ekzekutimit te nje algoritmi paraqet nje karakteristike te thjeshte te efikasitetit te nje algoritmi dhe nje mjet per krahasimin e performances se algoritmave alternativ. Kur marrim ne konsiderate input mjaftueshmerit te medha qe bejne qe vetem rendi i rritjes se kohes se ekzekutimit te jete i rendesishem, jemi duke studiuar efikasitetin asimptotik te algoritmit. Ne nje rast te tille eshte me interes sesi rritet koha e ekzekutimit te algoritmit kur hyrja rritet ne menyre infinite. Pergjithsisht, nje algoritem qe eshte asimptotikisht me efikas perben zgjedhjen me te mire per te gjitha input-et Perveç atyre me dimension vertet te vogel. Per te lehtesuar analizen do te shohim disa tipe tendencash asimptotike [asymptotic notation-notazione asintotica], nje shembull te cilin e pame ne tendencen Θ. Tendenca asimptotike Tendencat e perdorura per te pershkruar kohen asimptotike te ekzekutimit te nje algoritmi percaktohen ne termat e funksioneve hapesira e vlerave te te cileve eshte bashkesia e numrave natyror N={0,1,2,...}. Keto tendenca jane shume komode per te pershkruar

10 funksionin T(n) te kohes se ekzekutimit te rastit me te keq, percaktuar pergjithsisht per hyrje qe e kane dimensionin nje numer te plote. Do te shohim disa lloje tendencash baze ne studimin tone. Tendenca Θ Ne kapitullin e pare u percaktua qe koha e ekzekutimit ne rastin me te keq per algoritmin insertion sort eshte T(n)=Θ(n 2 ). Kjo tendence ka kuptimin e meposhtem. Per nje funksion te dhene g(n), percaktohet si Θ(g(n)) bashkesia e funksioneve Θ(g(n)) = { f (n) : ekzistojne tre konstante pozitive c1,c2 dhe n0 te tile qe 0 c1 g(n) f(n) c2 g(n) per çdo n n0 Nje funksion f (n) i perket bashkesise Θ (g(n)) nese ekzistojne konstantet pozitive c1 dhe c2 te tilla qe funksioni merr vlera ndermjet c1g(n) dhe c2g(n) per n mjaftueshmerisht te medha. Edhe pse Θ (g(n)) eshte nje bashkesi, per te treguar qe f (n) eshte anetar i Θ (g(n)) do te shkruhet f(n) = Θ (g(n)) ose mund te shkruhet f(n) Θ (g(n)) Ne fig 2.1 paraqiten funksionet f(n) dhe g(n), ku f(n)= Θ (g(n)). Per çdo vlere te n ne te djathte te n0 vlera e f(n) eshte e njejte ose me e madhe se c1g(n) dhe e njejte ose me e vogel se c2g(n). Themi se g(n) eshte nje limit aimptotikisht i ngushte per f(n). Fig 2.1 Shembuj grafik te tendencave Θ, O dhe ς, vlera n0 e treguar eshte vlera me vogel e mundur; çdo vlere tjeter me e madhe se n0 eshte ne rregull. Tendenca e mesiperme e limiton asimptotikisht funksionin nga poshte dhe nga larte, Perveç tendences Θ dallojme edhe dy tendenca te tjera ate O dhe ς qe e limitojne funksionin perkatesisht nga larte dhe nga poshte. Themi se: T (n)= O (g(n)) n.q.s dhe vetem n.q.s ekzistojne dy konstante pozitive c dhe n0 te tilla qe: 0 T(n) cg(n) per çdo n n0 Ne kete rast themi se g(n) eshte limiti asimptotik superior i T (n). Themi se: T (n)= Ω (g(n)) n.q.s dhe vetem n.q.s ekzistojne dy konstante pozitive c dhe n0 te tilla qe: 0 cg(n) T(n)) per çdo n n0. Ne kete rast themi se g(n) eshte limiti asimptotik inferior i T (n)

11 KAPITULLI II Renditja dhe Selektimi Edhe ne kete kapitull do te shohim disa algoritma qe zgjidhin problemin e renditjes, ne kapitullin e pare pame dy algoritma te ndryshem jo vetem ne llogjiken e perdorur por qe kane edhe kompleksitet te ndryshem;insertion-sort nje algoritem interaktiv me kompleksitet O(n 2 ) dhe merge-sort nje algoritem rekursiv me kompleksitet Θ(n lgn) [Θ (n lgn) eshte zgjidhja e ekuacionit rekursiv qe perdorem per te shprehur kompleksitetin e algoritmit]. Dy algoritmat qe do te studiohen jane HEAP-SORT dhe QUICK-SORT. Algoritmi heapsort paraqet nje teknike tjeter projektimi: perdorimin e nje strukture te dhenash, te quajtur heap per menaxhimin e te dhenave gjate ekzekutimit te algoritmit. Heap Struktura e te dhenave heap (binar) eshte nje vektor qe mund te shihet si peme binare [shiko shenim] gati komplete sic tregohet ne figuren e meposhtme

12 Fig. Nje heap i pare si nje peme binare (a) dhe nje vektor (b). Numri brenda çdo nyjeje eshte vlera e memorizuar ne ate nyje. Numri afer nyjes i korrespondon indeksit ne vektor. Çdo nyje e pemes i korrespondon nje elelmenti te vektorit qe permban vlerat e nyjes. Pema eshte e mbushur ne te gjitha nivelet Perveç nivelit te fundit qe eshte i mbushur vetem ne te majte. Nje vektor A qe perfaqson nje heap eshte nje objekt me dy atribute: length [A] qe eshte numri i elementeve te vektorit dhe heap-size[a] numri i elementeve te heap te memorizuar ne vektorin A. Edhe pse A[1, length[a]] permban elemente te vlefshem asnje element pas A[heap-size[A]], ku heap-size[a] length[a] nuk mund te jete element i heap. Rrenja e pemes eshte A[1], dhe nese i eshte indeksi i nje nyjeje, indeksi i babait PARENT( i ), i femijes se majte LEFT( i ) dhe femijes se djathte RIGHT( i ) mund te llogariten thjesht: PARENT( i ) LEFT( i ) RIGHT( i ) return i/2 return 2i return 2i + 1 Shenim: Nje peme binare eshte nje strukture e percaktuar ne nje bashkesi te fundme nyjesh qe permban asnje ose tre bashkesi te vecanta nyjesh: -nje nyje rrenje, nje peme binare te quajtur nenpema e majte dhe nje peme binare tjeter te quajtur nenpema e djathte. Pema binare qe nuk ka asnje nyje quhet peme boshe ose peme nul; nese nenpema e majte nuk eshte boshe rrenja e kesaj peme do te quhej femija e majte ndersa rrenja e nenpemes se djathte femij i djathte niveli lartesia 3 niveli 1 niveli 2 niveli

13 Ne shume makina, procedura LEFT mund te llogaris 2i me nje inkstruksion te vetem Heap-et jane struktura qe plotesojne vetine e renditjes se pjessheme te heap te ciles do ti referohemi si veti e heap. Kjo veti percakton se: Per çdo nyje i te ndryshme nga rrenja A[Parent(i)]>=A[i] qe do te thote vlera e nje nyjeje esht eme e vogel ose e barabarte me vleren e babait. Keshtu elementi me I madh ne heap memorizohet ne rrenje, nenpemet e e nje nyjeje te caktuar permajne vlera jo me te medha se vlera e nenyjes ne fjale qe do te sherbente si rrenje per nenpemen. Percaktohet si lartesi e nje nyje ne nje peme numri I harqeve ne rrugen me te gjate zbritese qe shkon nga nyja ne nje nga gjethet dhe percaktohet si lartesi e pemes lartesia e rrenjes se saj. Duke qene se nje heap ma n elemente bazohet ne nje peme binare komplete, lartesia e saj ehste θ (lgn). Ne vazhdim do te shohim pese procedura baze te operimit me struktuart heap dhe do te tregojme si perdoren ato ne algortimat e renditjes dhe ne strukturat e te dhenave te quajtura radha me priorite. HEAPIFY eshte procedura kyce qe perdoret per te ruajutr vetine heap, koha e ekzekutimit te kesaj procedure eshte O (lgn) BUILD-HEAP eshte procedura qe perdoret per te ndertuar nje heap kur meret si parameter ne hyrje nje vektor I parenditur, koha e ekzekutimit eshte lineare HEAP-SORT eshte procedura e rendijtes se nje vektori te vendosur ne heap koha e kezekutimit O (lgn) EXTRACT-MAX dhe INSERT qe kane kohe kezekutimi O (lgn) mundesojne perdorimin e struktures se te dhenave heap si te ishte nje rradhe me prioritet Ruajtja e vetise se Heap HEAPIFY eshte nje nenprogram per administrimin e nje heap. Hyrja e ketij nenprogrami eshte nje vektor A dhe nje indeks i ne vektor. HEAPIFY bazohet ne supozimin e kundert, ne hapin e pare kur thirret heapify supozojme se nenpemet binare te majta dhe te djathta perkatesisht LEFT (i) dhe RIGHT(i) jane heap, ndersa rrenja A[i] eshte me vogel se femijet e saj duke thyer keshtu vetine e HEAP. Pseudokodi i ketij algoritmi jepet si me poshte: HEAPIFY(A,i) 1. l LEFT (i) 2. r RIGHT (i) 3. if l <= heap-size[a] dhe A[l] < A[I] 4. then maks l 5. else maks r 6. if r <=heap-size[a] dhe A[r] > A [maks] 7. then maks r

14 8. if maks I 9. then nderro A[i] me A [maks] 10. HEAPIFY (A, maks) Ne çdo hap te algoritmit percaktohet me I madhi mes A[I], A[LEFT(i)] dhe A[RIGHT(i)] dhe indeksi memorizohet tek maks. Nese A[I] eshte me I madh atehere nenpema me rrenje ne nyjen I eshte nje heap dhe procedura perfundon, ne te kundert nese nje nga femijet ka nje element me te madh duke nderruar A[I] ma A[maks] nyja I dhe femijet plotesojne vetine e heap. Por nyja maks ka tashme vleren orgjinale te A[I] keshtu nenpema me rrenje ne nyjen maks mund te mos e plotesoj vetine, kjo sjell nevojen e thirjes se HEAPIFY ne menyre rekusive ne kete nenpeme. Fig. Aksioni I HEAPIFY(A,2) ku heap-size=10. Konfigurimi fillestar bie ndesh me vetine heap pasi A[2] ne nyjen I=2 nuk eshte me I madh se femijet e tij. (b) Vendoset vetia heap per nyjen me indeks 2 duke nderruar A[2] me A[4], por kjo sjell shkeljen e vetise per nyjen 4, si pasoje thirret HEAPIFY (A,4). (C) Pas nderrimit te A[4] me A[9] nyja 4 ploteson vetine heap. Koha ekezekutimit te HEAPIFY ne nje nenpeme me dimesion n dhe rrenje ne nje nyje te dhene eshte I barabarte me θ(1), per te vendosur relacionet ndermjet elaemnteve A[I], A[LEFT(i)] dhe A[RIGHT(i)] plus kohen e ekzekutimit te HEAPIFY ne nje nenpeme me rrenje ne nje nga dy femijet e e nyjes i. Nenpema e femijve kane secila dimension te pakten 2n/3. me ikeq verifikohet kur niveli I fundit I pemes eshte plote ekzatesiht ne mes. Koha e ekzekutimit mund te pershktuhet si T(n) = T(2n/3) + θ(1) Ndertimi I nje heap Per te transformuar nje vektor A[1 n] ne nje heap perdoret proceduar HEAPIFY ne menyren nga poshte-lart (ose te njhur si menyra bottom-up). Elementet e nenvektorit A[([n/2]+1) n] jane te gjithe gjethe te pemes si rrjedhim jane heap me nje element; procedura BUILD-HEAP pershkruan te gjitha nyjet e mbetura te pemes dhe ekzekuton HEAPIFY ne secilen prej tyre. Rendi sipas se cilit trajtohen nyjet garanton qe nenpemet me rrenje tek femijet e nje nyjeje jane heap, perpara se HEAPIFY te ekzekutohet ne ate nyje. BUILD-HEAP (A) 1. heap-size [A] length [A] 2. for I [length [A/2] down to 1 3. do HEAPIFY (A,I) Ne fig tregohet nje shembulle I ekzekutimit te BUILD-HEAP

15 *sqarimi I figures: (a) Nje vektor A me 10 elemente dhe pema binare qe e perfaqson, indeksi I ciklit shenjon tek nyja 5 perpara thirrjes HEAPIFY (A,I) (b) Struktura e te dhenave rezultante, indeksi I ciklit tashme shenjon ne nyjen 4. (c) (e) Nderveprimet e metejshme te ciklit for te BUILD-HEAP. Mund te vezhgohet se kur HEAPIFY thirret ne nje nyje te dyja nenpemet ne ate nyje jane heap.(f) Heap pasi BUILD-HEAP ka perfunduar. Persa I perket kohes se ekzekutimit mund te llogaritet nje limit superior. Çdo thirrje per HEAPIFY kerkon nje kohe O(lgn) dhe te tilla qe thirren jane O(n), keshtu koha e

16 Quicksort Quicksort eshte nje algoritem koha e ekzekutimit te cilit per nje vektor me n element ne hyrje, ne rastin me te keq eshte Θ(n 2 ). Edhe pse i ngadalte quicksort shpesh eshte zgjidhja me e mire ne praktike per rendtije pasi ne rastin mesatar eshte mjaft efikas; koha e ekzekutimit per rastin mesatar eshte Θ(n lgn). Pershkrimi i quicksort Quicksort ashtu si merge sort, bazohet ne llogjiken perca dhe sundo. Procesi perca-dhesundo per renditjen e nje vektori tipik A[p r] kalon neper tre fazat e pershkruara me pare. Perca: vektori A[p r] risistemohet ne dy nenvektor jo bosh A[p q] dhe A[q+1 r] ne menyre te tille qe çdo element I A[p q] te jete me I vogel ose I barabarte me çdo element te A[q+1 r]. Sundo: dy nenvektoret A[p q] dhe A[q+1 r] renditen duke thirur ne menyre rekursive quicksort Kombino: perderisa nenvektoret jane te renditur nuk krekohet asnje sforco per kombinimin e tyre: vektori I plote A[p r] eshte menjehere I renditur. Procedura e meposhtme paraqet quicksort Quicksort (A,p,r) 1. if p < r 2. then q PARTITION (A,p,r) 3. QUICKSORT (A,p,q) 4. QUICKSORT (A, q+1, r) Per te renditur nje vektor A me numra te plote fillimisht thirret QUICKSORT(A,1,length[A]) Pjesezimi I vektorit Zemra e algoritmit eshte procedura PARTITION, qe risistemon vektorin A[p r]. PARTITION (A,p,r) 1. x A [p] 2. i p j r while TRUE 5. do repeat j j 1 6. until A[j] x 7. repeat i i until A[i] x 9. if i < j 10. then nderro vendet A[i] A[j] 11. else return j

17 Fig 2.1 trego si funksionon PARTITION. Fillimisht seleksionohet nje element x = A[p] nga A[p r] rreth te cilit pjesezohet A[p r]. Keshtu zmadhohen dy zonat A[p i] dhe A[j r] respektivisht nga fillimi dhe fundi i A[p r] ne menyre te tille qe A[p i] te jete me e vogel ose e barabarte me x dhe çdo element ne A[j r] te jete me i madh ose i barabarte se x fillimisht I = p-1 dhe j= r +1 dhe te dyja zonat jane boshe. A[p r] i (a) j i A[p q] (b) j A[q+1 r] i (c) j i j (d) i j (e) Fig. Shembull I ekzekutimit te Partiotion ne nje vektor. Elementet e bardhe te vektorit jane te vendosur ne pjesen korrekte dhe ata gri jane ne pozicionin e tyre. (a) Vektori input, me vlerat fillestare te i dhe j jashte limiteve te majta dhe te djathta te vektorit. Kryhet pjesezimi rreth x=a[p]=5. (b) Pozicioni i i dhe j ne rreshtin e nente ne nderveprimin e pare te ciklit while. (c) Rezultati i shkembimit te elementeve te shenjuar nga i dhe j ne rreshtin e dhjete. (d) Pozicioni i i dhe j ne nderveprimin e dyte te ciklit while. (e) Pozicioni i i dhe j ne rreshtin 9 ne nderveprimin e fundit te ciklit while. Procedura perfundon sepse i eshte me e madhe ose e barabarte me j dhe kthehet vlera q=j. Elementet e vektorit qe paraprijne dhe perfshijne A[j] jane me te medhenj ose te barabarte me x=5 ndersa elementet e vektorit pas A[j] jane me te medhenj ose te barabarte me x=5. Ne trupin e ciklit while, indeksi j dekrementohet ndersa indeksi I inkrementohet, ne rreshtat 5-8, derisa A[i] x A[j]. Duke supozuar se mosbarizimet jane te vogla, A[I] eshte shume e madhe per ti perkitur zones me te ulert se A[j] dhe shume e vogel per ti perkitur zones me siper. Keshtu duke nderruar A[i] me A[j], si behet ne rreshtin e 10, mund te zgjerohen te dyja zonat. Trupi i ciklit while perseritet derisa i j; ne kete pike vektori A[p r] u pjesezua ne dy nenvektor A[p q] dhe A[q+1 r] ku p q r, te tille qe asnje element i A[p q] nuk eshte me i madh se ndonje element i A[q+1 r]. Ne fund te procedures kthehet vlera q = j. Konceptualisht procedura e pjesezimit kryen nje funksion te thjeshte; vendos elementet me te vegjel se x ne zonen e poshtme te vektorit dhe ata me te medhenj ne zonen e siperme te tij. Ka aspekte teknike qe e komplikojne pseudokodin, per shembull indekset i dhe j nuk duhet ti referohen asnjehere elementeve te A[p r] jashte limitive, pro kjo nuk eshte evidente nga kodi. Gjithashtu eshte e rendesishme qe A[p] te perdoret si element

18 baze. Nese do te perdorej A[r] dhe nese ky i fundit do te ishte elementi me i madh i nenvektorit A[p...r], atehere partition do ti kthente quicksort vleren q=r, dhe Quicksort do te futej ne nje cikel te perhershem. Koha e ekzekutimit te Partiotion ne nje vektor A[p...r] eshte Θ(n), ku n = r-p+1. Veti te quicksort Koha e ekzekutimit te quicksort varet nga fakti nese pjeseaimi eshte i balancuar apo jo, qe nga ana e tij varet nga cilet elemente perdoren per pjesezimin. Nese pjesezimi eshte i balancuar, algoritmi ekzekutohet me te njejten shpejtesi asimptotike si ajo e merge sort. Nese pjesezimi nuk eshte i balancuaralgoritmi mund te jete me i ngadalte se insertion sort. Ushtrim 1 Duke perdorur figuren e mesiperme si reference, ilustroni operacionet e PARTITION ne vektorin A=<13,19,9,5,12,8,7,4,11,2,6,21> Ushtrim 2 Cila eshte vlera e kthyer e q nga procedura PARTITION nese te gjithe vektoret e elementit A[p r] kane vlera te njejta. Renditja ne kohe lineare Sapo studiuam disa algoritma qe rendisin n numra ne kohen O(n lgn).merge sort dhe heapsort ne rastin me te keq arrijne kete limit superior; quicksort e arrine kete limit ne rastin mesatar. Gjithashtu per secilin nga keta algoritma mund te prodhohet nje sekuence n numrash ne hyrje ne menyre te tille qe algoritmi te ekzekutohet ne kohen Ω(n lgn). Keta algoritma kane nje veti interesante te perbashket: renditja qe kryhet bazohet ne krahasimin elementeve ne hyrje. Keta algoritma renditjeje quhen edhe rendtije nepermjet krahasimit. Te gjithe algoritmat e renditjes te studiuar deritani jane renditje me krahasim. Limite inferiore per renditjen Ne nje renditje me krahasim, perdoret vetem krahasimi i elementeve per te perftuar informacion mbi renditjen e sekuences ne hyrje <a1,a2,,an>. Qe do te thote per dy elemente te dhene ai dhe aj per te percaktuar renditjen relative, ekzekutohet njeri nga krahasimet e meposhtme: ai<aj, ai aj, ai=aj, ai aj, ai>aj. Vlerat nuk mund te krahasohen ne asnje menyre tjeter

19 Ne kete paragraf supozohet, pa humbur pergjithsimin, se te gjithe elementet ne hyrje jane te ndryshem. Pasi eshte kryer kjo hipoteze, krahasimet e formes ai=aj jane te panevojshem. Gjithashtu veme re se ai<aj, ai aj, ai aj dhe ai>aj jane te njevlefshem, ne kuptimin qe ofrojne informacion te njejte mbi renditjen relative mes ai dhe aj. Keshtu supozojme se krahasimet kane formes ai aj. Modeli i pemes se vendimarrjes Renditjet mes krahasimit mund te shihen ne menyre abstrakte ne termat e pemes se vendimarrjes. Nje peme vendimarrje perfaqson krahasimin krahasimin qe kyen nje algoritem ne nje input me nje dimesion te dhene. Kotrrolli, levizjet e te dhenave dhe te gjitha aspektet e tjera te algoritmit i injorojme. Ne fig tregohet pema e vendimarrjes qe I korrespondon algoritmit insertion sort qe vepron ne nje sekuence ne hyrje me tre element. Ne nje peme vendimarrje, çdo nyje e brendshme eshte etikeruar me ai:aj per çdo i dhe j ne intervalin 1 I, j n, ku n eshte numri i elementeve ne sekuencen e hyrjes. Çdo gjethe eshte e etiketuar nga nje perkembim < π(1), π(2),, π(n)>. Ekzekutimi I nje algoritmi renditjeje I korrespondon shenjimit te nje rruge ne pemen e vendimarrjes nga rrenja tek nje gjethe. Ne çdo nyje te brendshme ekzekutohet nje krahasim ai aj; nenpema e e majte imponon krahasimet e metejshme per ai aj, ndersa nenpema e djathte imponon krahasimet per ai>aj. Kur arrihet ne nje gjethe, algoritmi ka percaktuar renditjen a π(1) a π (2) aπ (n). Qe algoritmi te funksionoj ne menyre te pershtatshme, çdo njera prej n! perkembimeve te n elementeve duhet te shfaqet ne nje nga gjethet e pemes se vendimarrjes. a1:a2 > a2:a3 <1,2,3> > a1:a3 > a1:a3 <2,1,3> > a2:a3 > <1,3,2> <3,1,2> <2,3,1> <3,2,1> Fig. Pema e vendimarrjes per insertion sort qe vepron ne tre element. Kemi 3!=6 perkembime te mundshme te elementeve ne hyrje, keshtu pema e vendmarrjes duhet te kete te pakten 6 gjethe. Nje limit inferior per rastin me te keq Gjatesia e rruges me te gjate ne pemen e vendimarrjes nga rrenja ne nje nga gjethet cfaredo perfaqeson numrin e krahasimeve qe kryen algoritmi I renditjes ne rastin me te keq, numer qe rrjedhimisht eshte I barabarte me lartesine e pemes. Keshtu nje limit inferior ne lartesine e pemeve te vendimarrjes eshte nje limit inferior ne kohen e ekzekutimit te çdo algoritmi renditjeje per krahasim. Teorema e meposhtme percakton nje limit te tille inferior

20 Teoreme Çdo peme vendimarrje qe rendit n elemente ka nje lartesi Ω(n lgn). Vertetim Konsiderojme nje peme vendimarrje me lartesi h qe rendit n elemente. Meqenese kemi n! perkembime te n elementeve, ku çdo njeri prej perkembimeve prezanton nje renditje te ndryshme te elementeve, pema duhet te kete te pakten n!gjethe. perderisa nje peme binare me lartesi h nuk ka me shume se 2 h gjethe kemi n! 2 h qe po te kthehemi tek algoritmat do te thote h lg(n!), duke qene se funksioni ls eshte monoton rrites kemi n! >(n/e) n h lg(n/e) n = nlgn n lge = Ω(n lgn) Counting sort Counting sort bazohet ne hipotezen se çdonjeri nga n elementet ne hyrje eshte nje numer I plote ne intervalin nga 1 ne k, per ndonje numer te plote k, kur k=o(n) renditja kryhet ne kohen O(n). Ideja baze e counting sort eshte te percaktohet per çdo element x ne hyrje, numri I elementeve me te vegjel se x. Ky informacion mund te perdoret per te vendosur elementin x direkt ne pozicionin e duhur ne output-in e vektorit. Per shembull, nese ekzistojne 17 elemente me te vegjel se x, atehere x vendoset ne pozicionin e 18 te daljes. Kjo skeme duhet te modifikohet lehtesisht per te menaxhuar situaten ne te cilen disa elemente kane vlere te njejte, faktikisht nuk do te donim ti vendosnim te gjithe ne te njejtin pozicion. Ne kodin e counting sort, supozohet se input eshte nje vektor A[1 n] dhe qe length[a]=n. kerkohen dhe dy vektor te tjere: vektori B[1 n] qe permban daljen e renditur dhe vektori C[1 k] qe ofron memorien e perkohshme. COUNTING-SORT(A,B,k) 1. for i 1 to k 2. do C[i ] 0 3. for j 1 to length[a] 4. do C[A[j] C[A[j]] >C[ i] permban tashme numrin e elementeve te barabarte me i 6. for i 2 to k 7. do C[I] C[I] + C[I-1] 8. >C[i] permban numrin e elementeve me te vegjel ose te barabarte me I 9. for j length[a] downto do B[C[A[j]]] A[j] 11. C[A[j]] C[A[j]]

21 Counting sort ilustrohet ne fig e meposhtme. Pas inicializimit ne rreshtin1-2 analizohet çdo element ne hyrje ne rreshtin 3-4. Nese vlera e nje elementi ne hyrje eshte I rritet C[I]. Keshtu, pas rreshtave 3-4, C[I] permban numrin e elementeve te hyrjes qe jane te barabarte me I per çdo numer te plote I = 1,2, k. Ne rreshtat 6-7, percaktohet per çdo I=1,2, k sa element te hyrjes jane me te vegjel ose te barabarte me I. Se fundmi ne rreshtat 9-11, çdo element A[j] vendoset ne vektorin output B ne pozicionin korrekt te renditur. Nese te gjithe n elementet jane te ndryshem, atehere heren e pare qe ekzekutohet rreshti 9, per çdo A[j], vlera C[A[j]] eshte pozicioni final korrekt I A[j] ne pozicionin ne vektorin output: faktikisht ekzistojne C[A[j]] elemente me te vegjel ose te barabarte me A[j]. Duke qene se elementet mund te mos jene te ndryshem, C[A[j]] dekrementohet sa here vendoset nje vlere A[j] ne vektorin B: kjo ben qe elementi pasues I hyrjes me vlere te barabarte me A[j] nese ekziston te vendoset menjehere ne pozicionin perpara A[j] ne vektorin output. Fig. Operacioni COUNTING-SORT ne nje vektor input A[1,...,8], ku çdo element i A eshte nje numer i plote jonegativ jo me i madhe se k=5.(a) Vektori A dhe vektori ndihmes C pas rreshtit 4.(b) Vektori C pas rreshtit 7.(c)-(e) Dalja e vektorit B dhe vektori ndihmes C pas nje,dy dhe tre interacione te ciklit respektivisht ne rreshtat Vetem elemente me ngjyre te hapur jane vendosur ne ne vektorin B.(f) Vektori final e renditur B Sa kohe ekzekutimi kerkon Counting Sort? Cikli for ne rreshtat 1-2 kerkon kohen Θ(k), cikli for ne rreshtat 3-4 kerkon kohen Θ(n), cikli for ne rreshtat 6-7 kerkon kohen Θ(k),dhe cikli for ne rreshtat 9-11 kerkon kohen Θ(n). Keshtu, koha e pergjithshme eshte Θ(k+n). Ne praktike pergjithsisht e perdorim counting sort kur kemi k=o(n), dhe ne nje rast te tille koha e ekzekutimit eshte Θ(n). Nje veti e rendesishme e counting sort eshte fakti se ai eshte i qendrueshem: numra me te njejten vlere shfaqen ne vaktorin output ne te njetin pozicion si ne ate ne vektorin input. Bucket Sort

22 Bucket Sort ekzekutohet ne kohe lineare kur hyrja perftohet nga nje shperndarje uniforme. Ashtu si counting sort, bucket sort edhte i shpejte pasi supozon dicka mbi hyrjen. Ndersa countig sort supozon se hyrja konsiston ne numra te plote me vlere te vogel. Bucket sort supozon se hyrja gjenerohet nga nje proces random qe i shperndan elementet ne menyre uniforme ne intervalin [0,1). Ideja e bucket sort eshte te ndahet intervali [1,0) ne n intervale me gjatesi-barabarte, ose bucket-a dhe te shperndahen n numrat e hyrjes ne keto bucket-a. Duke qene se hyrjet jane te shperndara ne menyre uniforme ne [0,1), ne nuk presim qe te kemi shume numra ne secilen prej bucket-ave. Per te prodhuar daljen, ne thjesht rendisim numrat ne çdo bucket dhe me pas kalojme ne çdonjeren prej bucket-ave duke listuar elementet e seciles. Kodi per bucket sort merr te mireqene se hyrja eshte nje vektor A me n element dhe qe çdo element A[i] ne vektor ploteson kushtin 0<=A[i]<1. Kodi kerkon nje vektor ndihmes B[0,... n-1] qe mben lidhjet me listen (e bucket-ave) dhe supozon se ekziston nje mekanizem per ruajtjen e listave te tilla. 6 lidhim listat B[0], B[1],...,B[n-1] se bashku duke i renditur Figura e meposhtme tregon funksionimin e bucket sort ne vektorin me 10 numra. Sqarim per figuren:(a) Vektori ne hyrje A[1,...10](b) Vektori B[0,...9] i listave te renditura(bucket-ave) pas rreshtit te 5 te pseudokodit. Bucket i mban vlerat e gjysemintervalit[i/10,(i+1)/10). Dalja e renditur konsiston ne nje lidhje zinxhir te renditur te listave B[0],B[1],...,B[9]. Per te verifikuar qe ky algoritem funksionon konsiderojme dy element A[i] dhe A[j]. Supozojme pa humbur konceptin e pergjithshem se A[i]<=A[j]. Duke qene se

23 n A[i] < na[j],elementi A[i] vendoset ne te njetin bucket si A[j] ose ne nje bucket me indeks me te vogel. Nese A[i] dhe A[j] vendosen ne te njetin bucket, atehere cikli for ne rreshtat 4-5 i vendos ato ne rendin e duhur. Nese A[i] dhe A[j] vendose ne bucket te ndryshem, atehere rreshti 6 i vendos ne rendin e duhur. Ne konluzion themi se bucket sort funksionon ne menyre te rregullt. Per te llogaritur kohen e ekzekutimit te algoritmit pas nje analize te detajuar matematike arrijme ne konkluzionin qe koha e pritur eshte: Keshtu i gjthe algorimit bucket-sort ekzekutohet ne nje kohe lineare te pritur. Strukturat e te dhenave Strukturat lineare te te dhenave jane struktura qe zhvillohen ne nje dimension te vetem dhe mund te konsiderohen si sekuenca objektesh. Diferencat qe ekzistojne ndermjet strukturave varen nga: Menyrat e percaktimit te pozicionit ne te cilin do te operohet me sekuencen Menyra e operimit ne pozicionin e percaktuar Persa I perket aspektit te pare mund te dallohen tre mundesi : - aksesim direkt - aksesim n.p.r skanimit - aksesim n.p.r ekstremeve Vektori eshte nje shembull tipik i aksesimit direkt, Lista nje shembull i aksesimit nepermjet skanimit dhe Stiva nje shembull i aksesimit nepermjet ekstremeve. Persa i perket menyres se operimit mund te kemi tipat e meposhtem te operimit: -Lexim te vleres se nje komponenti -Modifikim te vleres se nje komponenti -Shtimin e nje komponenti te ri -Fshirjen e nje komponenti Ndermjet kombinimeve te mundshme te menyrave te aksesimit dhe te operimit, problemi i vetem qendron ne kombinimin e aksesimit direkt te struktures dhe mundesise se fshirjes dhe shtimit te komponenteve ne te ( Ndryshon numerimi I komponenteve dhe kjo eshte ne kontrast me parimin qe komponente individuohen n.p.r nr te pozicionit te tyre ne renditje). Te gjitha strukturat lineare Perveç vektorit jane te pajisura me operatore per shtimin dhe fshirjen e komponenteve. LISTAT Nje liste eshte nje sekuence e fundme elementesh qe mund te jete edhe boshe te te njejtit tip. Ne ndryshim me konceptin e bashkesise ku nje element nuk mund te shfaqet disa here, tek listat i njejti element mund te shfaqet disa here ne pozicione te ndryshme. Çdo elementi te listes I caktohet nje pozicion, keshtu çdo element I listes karakterizohet nga pos (i) pozicioni

24 a(i) vlera Listat Zinxhir Nje liste zinxhir eshte nje strukture te dhenash ne te cilen objektet sistemohen sipas nje rendi linear. Ne ndrydhim nga nje vektor ku rendi linear percaktohet nga indeksi I vektorit, rendi ne nje liste zinxhir percaktohet nepermjet nje pointeri ne çdo objekt. Listat zinxhir perfaqesojne nje prezantim te thjeshte dhe fleksibel te bashkesive dinamike. Bashkesite qe si pasoje e manipulimeve te algoritmave mund te riten ne kohe, te modifikohen apo te ndryshojne quhen bashkesi dinamike. Shume algoritma gjate operimit te tyre e kane te nevojshme te shtojne, fshijne, modifikojne ose te verifikojne perkatesine e nje elementi ne nje bashkesi, pikerisht bashkesi dinamike te tilla qe ofrojne keto mundesi operimi me to quhen fjalor. Si tregohet edhe ne fig çdo element I nje liste zinxhir dyfishe ose nje liste dydrejtimshe L eshte nje objekt me nje fushe çels dhe me dy fusha pointer next e prev. Objekti mund te permbaj edhe te dhena te tjera satelit. Fig Nje liste dydrejtimeshe qe perfaqson bashkesine dinamike {1,4,9,16}. Çdo element ne liste eshte nje objekt me tre fusha nje per çelsin dhe dy per pointerat (te perfaqesuar nga shigjetat) tek objekti pasardhes dhe paraardhes. Fusha next e bishtit dhe fusha prev e kokes permbajne vleren Nill, qe tregohet me /. Atributi head (L) shenjon tek koka e listes. (b) Pas ekzekutimit te LIST-INSERT (L,x) ku key(x)=25 lista zinxhir ka nje objekt te ri me çels 25 si koke te re. Ky objekt shenjon tek koka e vjeter me çels 9. (c) Rezultati I thirrjes pasues LIST-DELETE(L,x), ku x shenjon tek objekti me çels 4. Le te jete dhene nje element x ne liste, next [x] shenjon tek pasardhesi i listes kurse prev[x] tek paraardhesi i saj. N.q.s prev[x]=nil, elementi x nuk ka paraardhes si pasoje eshte elementi i pare i listes ose sic quhet ndryshe koke e listes, n.q.s next [x] =NIL elementi x nuk ka pasardhes si pasoje eshte elementi I fundit I listes ose sic quhet ndryshe bishti I listes. Atributi head(l) shenjon tek koka e listes pra ne elementin e pare, n.q.s head(l)=nil lista eshte boshe. Nje liste mund te kete forma te ndryshme mund te jete zinxhir e thjeshte ose dydrejtimshe, e renditur ose jo si dhe mund te jete unazore. Nese nje liste eshte liste zinxhir e thjeshte nuk perdoret me shenjuesi prev per çdo element; nese nje liste eshte e renditur, rendi linear I listes I korrespondon rendit rendit linear te çelsave te memorizuar ne elementet e listes, elementi minimal eshte koka e listes kurse elementi maksimal eshte bishti I listes. Nese lista eshte e parenditur elementet

25 mund te shfaqen ne cfaredo lloj rendi. Ne nje liste unazore shenjuesi prev I kokes se listes shenjon tek koka. Lista mund te shihet keshtu sin nje unaze elementesh. Kerkim ne Listen Zinxhir Procedura LIST-SEARCH(L,k) gjen elementin e pare me çels k ne listen L nepermjet nje kerkimi te thjeshte linear, duke kthyer si vlere ne dalje nje pointer tek elementi. Nese nuk gjendet asnje objekt me çels k atehere kthehet NIL. Per listen ne fig thirrja LIST- SEARCH(L,4) kthen nje shenjues ne elementin e trete te listes kurse LIST-SEARCH(L,k) kthen NIL. LIST-SEARCH(L,k) 1. x head (L) 2. while x NIL dhe key [x] k 3. do x next [x] 4. return x per kerkimin ne nje liste me n objekte procedura kerkon kohen θ(n), ne rastin me te keq kerkimi mund te mbuloj te gjithe listen. Shtimi ne nje Liste Zinxhir Le te jete dhene nje element fusha çels e te cilit eshte e inicializuar. Procedura LIST- INSERT shton x ne fillim te listes si tregohet ne fig e mesiperm. LIST-INSERT (L,x) 1. next [x] head [L] 2. if head[l] NIL 3. then prev [head[l]] x 4. head [L] x 5. prev [x] NIL Koha e ekzekutimit per nje list me n elemente eshte Θ(1). Fshirja ne nje liste zinxhir Procedura LIST-DELETE fhsin nje element x nga nje liste zinxhir L. Duhet te jepet nje pointer qe shenjon tek x, qe perdoret me pas per te modifikuar poinerat. Nese duam te fshijme nje element me nje çels te caktuar, duhet te thirret me pare LIST-SEARCH per te gjetur poinerin e ketij elementi

26 LIST-DELETE ekzekutohet ne kohen O(1), por nese duam te fshijme nje element me nje çels te caktuar koha e ekzekutimit ne rastin me te keq do te jete Θ(n) pasi fillimisht duhet te therrasim proceduren LIST-SEARCH. STIVAT DHE RRADHET Stivat dhe Rradhet jane bashkesi dinamike tek te cilat fshirja e nje elementi nga bashkesia n.pr operacionit DELETER eshte nje operacion i parashikuar me pare. Ne nje stive element i fshire nga bashkesia eshte a i shtuar i fundit: realizohet politika i fundit sherbehet i pari politike e quajtur LIFO (last-in first-out). Ne menyre te ngjashme elementi qe fshihet tek rradhet eshte ai qe ka me shume kohe qe eshte shtuar: realizohet politika i pari sherbehet i pari quajtur FIFO (first-in first-out) Stivat Operacioni i shtimit te nje elementi ne stive INSERT shpesh quhet PUSH kurse operacioni DELETE quhet POP. Shembulli me i qarte per nje stive eshte a ii stives se pjatave te palara pjata qe shtohet e fundit eshte edhe e para qe terhiqet per tu lare. Si tregohet edhe ne fig mund te realizojme nje stive me te shumten n elemente n.p.r nje vektori S[1...n]. vektori la nje atribut top[s] qe eshte dhe indeksi i elementit te shtuar ne fund. Stiva perbehet nga elementet S[1...top[S]] ku S[1] eshte elementi qe ndodhet ne fundin e stives dhe S[top[S] elementi qe ndodhet ne majen e stives. Kur top[s]=0 kontrrollohet nese stiva eshte bosh n.p.r procedures STACK-EMPTY. Nese ekzekutohet nje operacion POP ne nje stive bosh, themi se stiva peson underflow dhe nese ekzekutohet nje operacion PUSH ne menyre te tilleqe top[s] te marre nje vlere me te madhe se n gjenerohet overflow. Fig. Realizimi i nje stive S n.pr nje vektori. (a) Stiva ka 4 elemente, elementi ne majen e stives eshte elementi me vlere 9. (b) Stiva pas ekzekutimit te thirrjeve PUSH(S,17) dhe PUSH(S,3). (c) Stiva pas thirrjes POP(S) mbi elementin me vlere 3 pasi ai eshte elementi qe eshte shtuar i fundit. Operacionet qe ekzekutohen ne stive jepen si me poshte:

27 Rradhet Operacioni INSERT ne nje rradhe quhet ENQUEUE ndersa operacioni DELETE quhet DEQUEUE, ashtu si edhe POP koj procedure nuk asnje argument. Politika FIFO ben qe nje rradhe te veproj si nje rradhe njerezish ne nje zyre. Rradhe ka nje koke (head) dhe nje bisht (tail). Kur nje element shtohet ne rradhepozicionohet ne fund te bishtit, si nje person i sapoardhur qe vendoset ne fund te rradhes. Elementi qe fshihet eshte ai ne maje te rradhes ashtu si personi qe ndodhet ne fillim te rradhes qe po prêt prej shume kohesh. Ne fig tregohet menyra e realizimit te nje rradhe me se shumti n element duke perdorur nje vektor Q[1 n]. Rradha ka nje atribut head[q] qe shenjon tek koka e rradhes dhe atributin tail[q] qe shenjon te bishti i rradhes. Elementet e rradhes jane head[q], head[q]+1,..., tail[q]-1 dhe procedohet ne forme unazore, elementi ne pozicionin e pare ndiqet nga elementi ne pozicionin e fundit. Nese head[q]=tail[q] rradha eshte boshe. Fillimisht head[q]=tail[q]=1. Kur rradha eshte boshe dhe tentohet te fshihet nje element do te gjenerohet underflow, kur head[q]=tail[q] + 1 rradha eshte plot dhe nese tentohet te shtohet nje element gjenerohet overflow

28 Fig. Realizimi i nje rradhe n.pr. vektorit Q[1...12]. (a) Rradha Q ka 5 elemente ne Q[7...11].(b) Konfigurimi i rradhes pas thirrjes ENQUEUE (Q,17), ENQUEUE (Q,3) dhe ENQUEUE (Q,5).(c) Konfidurimi i rradhes pas thirrjes DEQUEUE(Q) kthen vleren 15 te çelsit qe ndodhet ne koke te rradhes. Koka e re e ka çelsin

29 Perfaqesimi i objekteve n.p.r vektoreve shumfish Nje koleksion objektesh qe kane te njejtat fusha mund ti prezantojme duke perdorur nje vektor. Ne fig e meposhtme tregohet sesi mund te implementohet nje liste zinxhir duke perdorur tre vektore. Vektori çels ruan vlerat e çelsave te bashkesise dinamike, pointerat ruhen ne vektoret next dhe prev. Per nje vektor te dhene x, key[x], next[x] dhe prev[x] perfaqesojne nje objekt ne listen zinxhir. Sipas ketij interpretimi, nje pointer x eshte thjesht nje indeks i pergjithsshem ne vektoret key, next dhe prev. Fig. Lista zinxhir qe morem si shembull ne paragrafin e kaluar.(a) perfaqesimi n.p.r vektoreve key, next dhe prev. Çdo vije vertikale perfaqeson nje objekt te caktuar. Objektet me ngjyre te hapur permbajne elementet e listes. Variabli L ruan indeksin e kokes. Ne fig e dhene kur prezantuam listat zinxhir, objekti me çels 4 eshte vendosur pas objektit me çels 16. Ne fig e mesiperme çelsi 4 shfaqet ne key[2] ndersa çelsi 16 ne key[5], keshtu kemi next[5]=2 dhe prev[2]=5. Gjithashtu konstantja NIL shfaqet ne fushen next te bishtit dhe fushen prev te kokes. Variabli L mban indeksin e kokes se listes. Perfaqesimi i objekteve n.pr vektoreve te vetem Ne memorien e nje kompjuteri fjalet pergjithsisht adresohen n.pr integer-ave nga 0 deri ne M-1, ku M eshte nje numer int i pershtatshem. Ne shume gjuhe programimi, nje objekt ze nje set pozicionesh te vazhdueshem ne memorien e nje kompjuteri. Nje pointer eshte thjesht adresa e pozicionit te pare te memories se zene nga objekti, pozicionet e tjera aksesohen duke i shtuar nje offset pointerit. Ne mund te perdorim te njejten strategji per implementimin e objekteve ne ambiente programimi qe nuk sigurojne ne meyre eksplicite te dhena te tipit pointer. Per shembull ne fig e meposhtme trgohet sesi nje vektor i vetem A mund te perdoret per te paraqitur nje liste zinxhir [te njejten qe kemi treguar ne dy fige meparshme]. Nje objekt ze ne vektorin tone nje nenvektor te vazhdueshem A[j,,k]. Çdo fushe e objektit i korrespondon nje offset-i nga 0 deri ne k-j, dhe nje pointeri tek objekti qe shprehet n.p.r indeksit j. Ne fig offset-et qe i korrespondojne fushave key, next dhe prev jane perkatesisht 0,1 dhe 2. Per te lexuar vleren e prev[i] per nje pointer te dhene i, i shtojme offset-it 2 vleren i te pointerit, keshtu lexojme A[i +2]

30 Prezantimi n.pr vektoreve njefish eshte fleksibel dhe mundeson qe objektet e gjatesive te ndryshme te ruhen tek i njejti vektor. Problemi i te menaxhuarit nje koleksion te tille heterogjen objektesh eshte me i veshtire se menaxhimi i nje koleksioni homogjen, ku te gjithe objektet kane fusha te njejta. Duke qene se pothuaj te gjitha strukturat e te dhenave qe ne do te studiojme perbehen nga elemente homogjene, do te ishte e mjaftueshme te perdorej prezantimi i objekteve n.p.r vektoreve shumfish. Fig Lista zixhir perfaqesuar nga nje vektor i vetem A. Çdo element i listes eshte nje objekt qe ze nje nenvektor te vazhdueshem me gjatesi 3 ne vektor. Tre fushat key, next dhe prev i korrespondojne offset-eve 0,1 dhe 2. Nje pointer tek nje objekt eshte nje indeks ne elementin e pare te objektit. Objektet qe permbajne elemente te listes jane me ngjyre te hapur Alokimi dhe lirimi i objekteve Per te shtuar nje çels ne nje bashkesi dinamike te perfaqesuar nga nje liste zinxhir, fillimisht alokohet nje pointer tek nje objekt i paperdorur ne liste. Keshtu eshte e dobishme qe te menaxhohen objektet e paperdorur ne liste ne menyre qe te mund alokohen. Ne disa sisteme perdoret garbage collector qe eshte pergjegjes per percaktimin e objekteve te paperdorur. Supozojme se vektoret ne perfaqesimin me vektor shumfish kane gjatesi m dhe qe ne nje moment te caktuar bashkesia dinamike permban n m elemente. Keshtu n objekte perfaqesojne elementet aktual te bashkesise dinamike, dhe m-n objektet e ngelura perfaqesojne objektet e lira (free); objektet e e lira mund te perdoren per te perfaqesuar elementet qe do te shtohem ne te ardheme ne bashkesine dinamike. Objektet e lira i ruajme ne nje liste te vecante qe e quajme lista e lire. Lista e lire perdor vektorin next, qe ruan pointerat next ne liste. Koke e listes se lire mbahet nga variabli global free. Kur bashkesia dinamike e perfaqesuar nga lista L eshte joboshe, lista e lire mund te nderrthuret me listen L si tregohet ne fig. Vini re se nje objekt mund te ndodhet ne listen L ose ne listen e lire por nuk mund te ndodhet te te dyja

31 Fig. Efekti i procedurave ALLOCATE-OBJECT dhe FREE-OBJECT.(a) Lista e fig te meparshme dhe lista e lire ( me ngyre te erret) Vektoret tregojne strukturen e listes se lire. (b) Rezultati i thirrjes ALLOCATE-OBJEKT() (qe kthen indeksin 4), dhe qe vendos key[4] tek 25, dhe thirrjes LIST-INSERT(L,4). Koka e re e listes se lire eshte objekti 8,qe ishte next[4] ne listen e lire.(c) Pas ekezekutimit te LIST-DELETE(L,5), therrasim FREE- OBJEKT(5). Objekti 5behet koka e re e listes se lire. Lista e lire eshe nje stive: objekti qe alokohet eshte ai qe eshte liruar i fundit. Ne mund te perdorim nje implemtim te operacioneve PUSH dhe POP tek listat per te realizuar procedurat e alokimit dhe dealokimit (lirimit) te objekteve e menyre respaktive. Supozojme se variabli global free i perdorur ne procedurat e meposhtme shenon ne elementin e pare te listes se lire. Lista e lire fillimisht permban n objekte te paalokuar. Kur lista e lire eshte ezauruar, procedura ALLOCATE-OBJEKT do te sinjalizonje nje gabim. Pergjithsisht perdoret nje liste e lire qe sherben disa lista. Fig e meposhtme tregohen dy lista dhe nje liste e lire te nderthurura mes vektoreve key, next dhe prev. TABELAT HASH Shume aplikacione kerkojne nje bashkesi dinamike qe te furnizoj veten operacionet INSERT, SEARCH, DELETE te fjalorit. Per shembull nje kompilator i nje gjuhe programimi mban nje tabele te simboleve, ne te cilet çelsat e elementeve jane stringa karakteresh cfaredo qe i korrespondojne identifikuesve te gjuhes. Nje tabele hash eshte nje strukture te dhenash efikase per realizimin e fjaloreve. Edhe pse kerkimi i nje elementi ne nje tabele hash mund te kerkoj te njeten kohe kerkimi si kerkimi i nje elementi ne nje liste zinxhir- kohen Θ(n) ne rastin me te keq- ne praktike performanca e metodes hash jane shume me te mira. Duke bere hipotezat e nevojshme koha mesatare e kerkimit ne nje tabele hash eshte O(1). Nje tabele hash eshte pergjithsimi me i thjeshte i konceptit te vektorit. Adresimi direkt i nje vektori te thjeshte perdor ne menyre efikase mundesine e ekzaminimit te nje pozicioni arbitrar te nje vektori ne kohen O(1)

32 Kur numri i çelsave te memorizuara ne krahasim me numrin total te çelsave te mundshem eshte i vogel, tabelat hash behen nje alternative efikase per adresimin direkt te vektorit, duke qene se nje tabele hash pergjithsisht perdor nje vektor me dimensione proporcionale me numrin e çelsave te memorizuar. Ne vend qe te perdoret çelsi si indeks per te adresuar direkt vektorin, indeksi llogaritet duke perdorur çelsin. Tabelat me adresimim direkt Adresimi direkt eshte nje teknike e thjeshte qe funksionon mire kur universi U i çelsave eshte mjaftueshmerisht i vogel. Supozohet qe nje aplikacioni i nevojitet nje bashkesi dinamike ne te cilen çdo element ka nje çelsa qe perftohet nga universi U={0,1,...,m-1} ku m nuk eshte shume e madhe. Supozohet se asnje nga ciftet e elementeve nuk çelsa te njejte. Per te perfaqesuar bashkesine dinamike, perdoret nje vektor ose nje tabele me adresim direkt, T[0...m-1], ne te cilin çdo pozicion ose slot i korrespondon nje çelsi ne universin U. Fig ilustron kete marredhenie : pozicioni k shenjon ne nje element te bashkesise me çels k. Nese bashkesia nuk permban elemente me çels k, atehere T[k]=NIL. Opercaionet e fjalorit mund te realizohen fare thjesht. Universi i çelsave çelsa K (çelsat e perdorur) Te dhena sateltit Fig Realizimi i nje bashkesie dinamike nepermjet nje tabele adresimi direkt T. Çdo çels ne universin U={0,1...,9} i korrespondon nje indeksi ne tabele. Bashkesia e çelsave efektiv percakton pozicionet ne tabelen qe mban pointerat e elementeve. Pozicionet ne ngjyre gri te erret permbajne NIL

33 Secili prej operacioneve eshte i shpejte: koha e kerkuar eshte O(1). Per disa aplikacione elementet e bashkesise dinamike mund te memorizohen direkt ne tabelen e adresimit. Qe do te thote ne vend qe te memorizohet çelsi i nje elementi dhe te dhenat satelit ne nje objekt te jashtem per tabelen, n.pr nje pointeri ne pozicionin e tabeles ku ndodhet objekti, zgjidhet qe vete objekti te ruhet tek pozicioni i tij duke kursyer memorie ne kete menyre. Gjithashtu shpesh nuk eshte e nevojshme te memorizohet fusha çels e objektit pasi kemi indeksin e nje objekti ne nje tabele, qe do te thote çelsin e tij. Gjithsesi, nese çelsi nuk eshte memorizuar duhet te kemi ndonje menyre per te kodifikuar faktin qe pozicioni eshte bosh. Tabelat HASH Veshtirsia a adresimit direkt eshte e dukshme: nese universi U eshte i madh, ruajtja ne kujtese e nje tabele T me dimension U mund te jete aspak praktike, ose pothuaj e pamundur per shkak te limiteve qe kemi per perdorimin e memories se nje kompjuteri. Gjithashtu, bashkesia e çelsave K te perdorur ne menyre efikase mund te jete shume e vogel ne krahasim me U dhe keshtu pjesa me e madhe e hapesires se alokuar per T do te ishte e paperdorur. Kur bashkesia e çelsave K te memorizuar ne nje fjalor eshte shume me e vogel se universi U i te gjitha çelsave te mundshem, nje tabele Hash kerkon shume me pak memorie se nje tabele me adresim direkt. Ne veçanti, memoria e kerkuar mund te reduktohet ne Θ( K ), dhe kerkimi i nje elementi ne tabelen Hash kerkon vetem kohen O(1). Me adresimin direkt nje element me çels K memorizohet ne pozicionin k. Me metoden hash, ky element memorizohet ne h(k): perdoret nje funksion hash h per te perllogaritur pozicionin duke u nisur nga çelsi k; h percakton nje korrespondence mes universit U te çelsave dhe pozicioneve ne nje tabele hash T[0...m-1]: h: U-> {0,1,...,m-1} Nese elementit me çels k i korrespondon pozicioni h(k) thuhet se h(k) eshte vlera hash e k. Fig e meposhtme ilustron idene baze. Pika kryesore e funksionit hash eshte reduktimi i intervalit te indekseve te vektorit qe do te shqyrtohet. Ne vend te U vlerave, duhet te menaxhohen vetem m vlera. Memoria e kekuar reduktohet ne te njejten meyre. Difekti i kesaj idejeje eshte fakti se dy çelsa mund ti korrespondojne te njejtit pozicionfenomen i quajtur perplasje. Fatmiresisht, ekzistojne teknika efikase per te zgjidhur kete konflikt te krijuar nga perlasjet

34 Fig. Perdorimi i nje funksioni hash h per te vendosur korrespondencen mes çelsave dhe pozicioneve ne tabelen hash. Çelsat k1 dhe k2 i korrespondojne te njejtit pozicion, keshtu perplasen. Zgjidhja ideale do te ishte evitimi i te gjitha perplasjeve. Ky objektiv mund te arrihet duke zgjedhur nje funksion hash rastesor qe sjell minimizimin e perplasjeve (gjithsesi funksioni duhet te jete i tille qe per nje k te dhene te prodhohet gjithmone i njeti pozicion h(k)). Duke qene se U > m, me siguri ekzistojne dy çelsa me te njejten vlere hash; evitimi i plote i perplasjeve eshte i pamundur. Per kete arsye, edhe pse nje funksion hash mund te jete i projekutar ne menyre qe te minimizoj perlasjet duhet te perdoret nje menyre per te zgjidhur ato perplasje qe nuk mund te evitohen. Zgjidhja e perplasjeve n.pr metodes zinxhir Ne metoden zinxhir, te gjithe elementet qe perplasen ne te njetin pozicion vendosen ne nje liste zinxhir, si tregohet ne fig. Pozicioni j permban nje pointer ne koken e listes te te gjithe elementeve qe i korrespondojne pozicionitj; nese nuk ka asnje element pozicioni j permban NIL. Operacionet e fjalorit me nje table Hash jane te lehta per tu realizuar kur perdoret nje metode per zgjidhjen e perplasjeve. Fig. Zgjidhja e perlasjeve n.pr metodes zinxhir. Çdo pozicion T[j] ne tabelen hash perman nje liste zinxhir te te gjithe elementeve vlerat hash te çelsave te te cileve eshte j. Per shembull h(k1)=h(k4) dhe h(k3)=h(k2)=h(k7). X shtohet ne koken e listes Kerkohet nje element me çels k ne listen X fshihet nga lista Koha e ekzekutimit per shtimin eshte O(1) ne rastin me te keq. Per kerkimin koha e ekzekutimit ne rastin me te keq eshte proporcionale me gjatesine e listes. Fshirja e nje elementi x kerkon kohen O(1) nese lista eshte dydrejtimeshe

35 Ushtrim Te shtohen çelsat 5,28,19,15,20,33,12,17,10 ne nje tabele hash ne te cilen perplasjet zgjidhen n.pr metodes zinxhir. Tabela hash ka 9 pozicione dhe funksioni hash eshte h(k)= k mod 9. Analiza e organizimit hash me metoden zinxhir Analizojme kohen e nevojshme te organizimit hash me metoden zinxhir. Per nje tabele hash te dhene T me m pozicione qe memorizon n elemente, percaktohet faktori i ngarkeses α per T si n/m, qe do te thote numri mesatar i elementeve te memorizuar ne çdo liste zinxhir. Analiza do te shprehet ne termat e α, supozohet se α mbetet fikse edhe pse n dhe m tentojne drejt infinitit (α mund te jete me e vogel, me emadhe ose e barabarte me 1). Sjellja ne rastin me te keq nuk eshte premtuese: te gjithe n çelsat i korrespondojne te njejtit pozicion duke krijuar nje liste me gjatesi n. Keshtu koha e kerkimt ne rastin me te keq eshte Θ(n) plus kohen e perllogaritjes se funksionit hash-kohe qe nuk eshte me e mire se ajo qe do te nevojitej po te perdorej nje liste zinxhir per te gjithe elementet. Eshte e qarte qe tabelat hash nuk perdoren per performancen e tyre ne rastin me te keq. Ne rastin mesatar performanca varet nga fakti se sa mire funksioni hash realizon shperndarjen e çelsave te memorizuar ne m pozicionet. Kjo hipoteze quhet dhe uniformitet i thjeshte i funksionit hash. Supozohet se vlera hash h(k) mund te llogaritet ne kohen O(1), keshtu koha e duhur per kerkimin e nje elementi me çels k varet ne menyre lineare nga gjatesia e listes T[h(k)]. Konsiderojme dy raste: ne rastin e pare kerkimi eshte i pasuksesshem nuk gjendet asnje element me çels k, ne rastin e dyte kerkimi eshte i suksesshem. Teoreme 1. Ne nje tabele hash ku perplasjet zgjidhen n.p.r metodes zinxhir, me hipotezen e nje uniformiteti te thjeshte te funksionit hash, nje kerkese e pasuksesshme kerkon kohen mesatare Θ(1 + α ) Vertetim Me hipotezen e uniformitetit te thjeshte te funksionit hash, probabiliteti qe çdo njeri nga çelsat k ti korrespondoje njerit prej m pozicioneve eshte i njejte. Koha mesatare e kerkimit te pasuksesshem te nje çelsi k eshte keshtu koha e kerkuar per analizimin deri ne fund nje nga m listat. Gjatesia mesatare e nje liste te tille eshte faktori i ngarkeses α=n/m, si rrjedhim nukmri mesatar i elementeve te ekzaminuar ne nje kerkim te tille eshte α, dhe koha totale e kerkuar (perfshire dhe kohen per perllogaritjne e h(k)) eshte Θ (1+ α). Teoreme 2. Ne nje tabele hash ku perplasjet zgjidhen n.p.r metodes zinxhir, me hipotezen e nje uniformiteti te thjeshte te funksionit hash, nje kerkese e suksesshme kerkon kohen mesatare Θ(1 + α ) Vertetim Supozohet se probabiliteti qe çelsi qe po kerkohet te jete nje nga n çelsat e memorizuar eshte i njejte. Supozohet se procedura CHAINED-HASH-INSERT shton nje element te ri ne bishtin e listes dhe jo ne koken e saj. Numri mesatar i elementeve te

36 ekzaminuar gjate nje kerkimi te suksesshem eshte 1 plus numrin e elementeve te ekzaminuar kur elementi qe kerkohet eshte shtuar (pasi çdo element qe shtohet shkon ne fundin e listes). Gjatesia mesatare e nje liste te tille eshte (i -1 )/m, dhe keshtu numri mesatar i elementeve te ekzaminuar ne nje kerkim me sukses eshte: Per kete, koha lokale e kerkuar per nje kerkim me sukses eshte Θ ( 2 + α/2 1/2m)= Θ(1+α ). Cili eshte kuptimi i kesaj analize? Nese numri i pozicioneve ne tabelen hash eshte te pakten proporcional ma numrin e elementeve ne tabele, kemi n = O(n) dhe si rrjedhim α=n/m=o(m)/n=o(1). Pra, kerkimi mesatarisht kerkon nje kohe konstante. Duke qene se shtimi kerkon kohen O(1) ne rastin me te keq dhe fshirja kerkon kohen O(1) kur listat jane dydrejtimeshe, te gjitha operacionet e fjalorit ne rastin mesatar mund te ekzekutohen ne kohen O(1). Funksione hash Karakteristikat e nje funksioni te mire hash Nje funksion i mire hash ploteson hipotezen e uniformitetit te thjeshte: çdo çels i korrespondon njerit prej m pozicioneve me te njetin probalitet. Ne menyre me formale suopzohet çdo çels terhiset ne menyre te pavarur nga U sipas nje shperndarje probaliteti P; qe do te thote P(k) eshte probaliteti qe çelsi k te terhiqet. Atehere hipoteza e uniformitetit te thjeshte per funksionin hash eshte: P(k) = 1/m per j = 0,1, m-1 k:h(k)=j Fatkeqesisht ne pergjithesi nuk eshte e mundur te kontrollohet ky kusht, pasi P pergjithsisht nuk njihet. Nje llogjike e thjeshte konsiston ne derivimin e vleres se hash ne nje menyre qe te jete sa me e pavarur nga nje konfigurim i mundshem i te dhenave. Do te shohim tre skema per krijimin e funksioneve hash: n.p.r pjestimit, n.p.r shumezimit dhe asaj universale. Shume funksione hash supozojne se universi i çelsave eshte bashkesia N={0,1,2,...} e numra natyror.per kete nese numrat nuk jane matyror duhet te gjendet nje menyre per ti interpretuar si te tille. Per shembull pt mund te shprehet si cifit i numrave te plote ne prezantimin decimal(112,116), pasi p=112 dhe t=116 sipas kodit ASCII, e shprehur sipas kodit ma baze 128, pt behet (112*128)+116= Ne vazhdim do te marrim te mireqene se çelsat jane numra natyror. Metoda e Pjestimit Ne metoden e pjestimit, korrespondenca mes çelsit k dhe njerit prej m pozicioneve vendoset, duke marr mbetjen e pjestimit te k me m. Funksioni hash eshte: h(k)= k mod m

37 Per shembull nese dimansioni i tabeles hash eshte m=12 dhe çelsi k eshte k= 100, atehere h(k) = 4. Perderisa kerkohet nje operacion i vetem pjestimi funksioni eshte mjaft i shpejte. Kur perdoret metoda e pjestimit, pergjithsisht evitohen disa vlera te caktuara te m. Per shembull m nuk mund te jete fuqi e 2, pasi m=2 n, atehere h(k) jepet nga p bit-et me me pak kuptim te k. Eshte mire qe funksioni hash te zgjidhet ne menyrete tille qe te varet nga te gjithe bit-et e çelsit. Fuqite e 10 duhet te evitohen nese aplikacioni i trajton numrat decimal si çelsa pasi ne te kundert funksioni hash nuk do te varej nga te gjitha shifrat decimale te k. Vlera te mira te m jane vlerat primo [e para] jo shume afer fuqive te 2. Per shembull, supozojme se duam te llogarisim nje tabele hash, me zinxhir, per te lidhur n=2000 stringa karakteresh, ku nje karakter kerkon 8 bit. Mesatarisht do te ekzaminohen 3 elemente ne nje kerkim te pasukesesshem do te ishte e kenaqshme, keshtu do te alokohet nje tabele hash me dimension m =701. Ky numer eshte zgjedhur sepse eshte nje numer primo afer 2000/3 por jo afer asnje prej fuqive te 2. Po te trajtohej çdo çels si nje numer i plote, funksioni hash do te ishte h(k)=k mod 701. Metoda e shumezimit Metoda e shumezimit per percatimin e funksioneve hash operon ne dy hapa. Fillimisht shumezohet çelsi k me nje konstante A ne intervalin 0< A<1 dhe shkeputet pjesa fraksionale e ka. Me pas shumezohet kjo vlere me m dhe merret pjesa e plote e rezultatit. Shkurt funksioni hash eshte ku kamod 1 perfaqeson pjesen fraksionale te ka, qe do te thote ka - ka. Nje avantazh i metodes se shumezimit eshte qe vlera e m nuk eshte kritike. Ne rastin tipik zgjidhet nje fuqi e 2, qe do te thote m=2 p per ndonje numer te plote p, pasi keshtu mund funksioni mund te realizohet lehtesisht ne shume kompjutera ne menyren e meposhtme. Supozohet se dimensioni i fjales se makines eshte w bit dhe qe k futet ne nje fjale te vetme. Duke iu referuar dhe figures se meposhtm, fillimisht shumezohet k me numrin e plote w bit A*2 w. Rezultati eshte nje vlere me 2w bit te barabarte me ri2 w + r 0, ku ri eshte fjala me me shume kuptim e prodhimit dhe r 0 ajo me me pak kuptim. Vlera hash e deshiruar me p bit konsiston ne p bit-et me me shume kuptim te r 0. Edhe pse kjo metode funksionon per ndonje konstante A, me disa vlera punon me mire se per disa te tjera. Zgjedhja optimale e A eshte A=

38 Per shembull, nese kemi k= , m=10000 dhe A si me larte kemi: h(k) = * ( * mod 1) = * ( mod 1) = * ( ) = = 41. Funksioni hash universal Nese nje kundershtar keqadashes do te zgjidhte çelsat ne te cilet do te perllogaritej funksioni hash, atehere mund te zgjidhte n çelsat qe do ti korrespondonin te njejtit pozicion, duke provokuar nje kohe mesatare kerkimi Θ(n). Cfaredo lloj funksioni hash i nenshtrohet kesaj sjelljeje ne rastin me te keq; metoda e vetme efikase per te permiresuar situaten eshte zgjedhja e nje funksioni hash ne menyre rastesore ne menyre qe te jete i pavarur nga çelsat qe do te memorizohen efiktivisht. Kjo perqasje e njohur si universal hashing, ruan nje performance te mire ne rastin mesatar pavaresisht nga zgjedhja e çelsave nga kundershtari. Ideja baze e kesaj llogjike eshte perzgjedhja, ne menyre rastesore e funksionit hash nga nje klase funksionesh te projektuara me kujdes ne fillim te ekzekutimit. Ashtu si ne rastin e quicksort, rastesia garanton qe asnje hyrje nuk do te shkaktoj rastin me te keq. Si pasoje e rastesise, algoritmi mund te sillet ndryshe ne çdo ekzekutim, edhe per te njejtin input, duke garantuar performance te mire per çdo input ne rastin e pergjithshem. Le te jete H nje bashkesi e fundme e funksioneve hash qe adresojne nje univers te dhene U çelsash ne intervalin {0, 1,..., m-1}. Nje univers i tille quhet universal nese per çdo cift çelsash te ndryshem x,y U, numri i funksioneve hash h H per te cilet h(x)=h(y) eshte saktesisht H /m. Ne fjale te tjera, me nje funksion hash te zgjedhur ne menyre rastesore nga H, probabiliteti i nje perplasjeje mes x dhe y per x y eshte saktesisht 1/m, qe eshte probabiliteti i nje perplasjeje nese h(x) dhe h(y) zgjidhen rastesisht ne bashkesine {0,1,...,m-1}

39 Pemet binare te kerkimit Pemet e kerkimit jane struktura te dhenash qe mbeshtesin disa operacione qe kryhen ne bashkesite dinamike, duke perfshire SEARCH, MINIMUM, MAXIMUM, PREDECESOR, SUCCESOR, INSERT dhe DELETE. Keshtu nje peme mund te perdoret si nje fjalor dhe si nje rradhe me prioritet. Operacionet kryesore qe kryhen ne nje peme binare kerkimi kerkojne nje kohe ekzekutimi proporcionale me lartesine e pemes. Per nje peme binare te plote me n nyje, operacione te tilla ne rastin me te keq kerkojne kohen Θ(lgn). Nese pema eshte nje zinxhir linear me n nyje, te njejtat operacione per rastin me te keq do te kerkojne kohen Θ(n). Çfare jane pemet binare te kerkimit? Pemet binare te kerkimit, duke u bazuar edhe tek emri i zgjedhur jane te organizuara ne nje peme binare si tregohet ne fig e meposhtme. Nje peme e tille mund te perfaqesohet nga nje strukture te dhenash me lidhje ne te cilen çdo nyje eshte nje objekt. Perveç fushes çels dhe te dhenave satelit, çdo nyje permban fushat left, right dhe p qe shenjojne perkatesisht ne femijen e majte, femijen e djathte dhe babain e nyjes. Nese nje femije ose babai i nje femije mungon, fusha perkatese permban vleren NIL. Nyja rrenje eshte e vetmja nyje ne peme fusha prind e seciles eshte NIL. Fig. Pemet binare te kerkimit. Per çdo nyje x, çelsat ne nenpemen e majte te x jane te shumten key[x], dhe çelsat ne nenpemen e djathte te x jane te pakten key[x]. Peme te ndryshme kerkimi mund te perfaqesojne te njejten bashkesi vlerash.(a) Nje peme binare me 6 nyje dhe lartesi 2.(b) Nje peme binare me pak efikase me lartesi 4 qe permban te njejtet çelsa. Çelsat ne nje peme binare kekimi ruhen gjithmone ne menyre te tille qe te kenaqet vetia e pemeve binare te kerkimit: Le te jete x nje nyje ne nje peme binare kerkimi. Nese y eshte nje nyje ne nenpemen e majte te x, atehere key[y] key[x]. Nese y eshtenje nyje ne nenpemen e djathte te x, atehere key[x] key[y]. Per kete arsye ne fig e mesiperme, çelsi i rrenjes eshte 5 dhe çelsat 2,3 dhe 5 ne nenpemen e majte jane jo me te medhenj se 5, dhe celat 7 dhe 8 ne nenpemen e djathte jane jo me te vegjel se 5, e njejta veti zbatohet per çdo nyje te pemes

40 Vetia e pemeve-binare te kerkimit na mundeson te printojme çelsat e nje peme binare kerkimi ne nje menyre te renditur n.p.r nje algoritmi te thjeshte rekursiv, te quajtur inorder tree walk. Ky algoritem emertohet keshtu sepse çelsi i rrenjes se nje nenpeme printohet ndermjet vlerave te nenpemes se majte dhe te nenpemes se djathte te saj. (Ne menyre te ngjashme preorder tree walk printon rrenjen perpara vlerave ne secilen prej nenpemeve dhe postorder tree walk printon rrenjen pas vlerave ne secilen prej nenpemeve.) Per te perdorur proceduren e meposhtme per te printuar elementet e nje peme binare kerkimi T do te kryejme thirrjen INORDER-TREE-WALK(root[T]). Kjo procedure po te ekzekutohej ne pemen e dhene ne fig do te printonte vlerat 2,3,5,7,8. Koha e nevojshme per te bredhur n-nyjet e nje peme binare kerkimi eshte Θ(n), pasi pas thirrjes fillestare porcedura thirret ne menyre rekursive ekzaktesisht dy here per secilen nyje ne peme-nje here per femijen e majte dhe nje here per femijen e djathte. Teorema e meposhtme jep nje vertetim me te detajuar mbi faktin qe procedura ekzekutohet ne nje kohe me varesi lineare. Teoreme Nese x eshte rrenja e nje nenpeme me n nyje, atehere procedura INORDER- TREE-WALK(x) kerkon kohen e ekzekutimit Θ(n). Vertetim Le te jete T(n) koha qe i nevojitet INORDER-TREE-WALK kur ekzekutohet ne nje nenpeme me n-nyje. INORDER-TREE-WALK kerkon nje kohe fare te vogel konstante kur ekzekutohet ne nje nenpeme boshe dhe keshtut(0)=c. Per n>0, supozojme se INORDER-TREE-WALK thirret ne nje nyje x nenpema e majte e se ciles ka k nyje dhe nenpema e djathte e se ciles ka n-k-1 nyje. Koha e nevojitur per ekzekutimin e INORDER-TREE-WALK(x) eshte T(n)= T(k)+T(n-k-1) + d per ndonje konstante pozitive d qe reflekton kohen e ekzekutimit te INORDER-TREE-WALK(x). Perdorim metoden e induksionit per te treguar se T(n)=Θ(n) duke provuar se T(n)=(c+d)n+c. Per n=0,kemi (c+d)*0 +c=c=t(0). Per n >0, kemi qe i jep fund vertetimit. Ushtrim Per bashkesine e numrave {1,4,5,10,16,17,21}, ndertoni peme binare kerkimi me lartesi 2,3,4,5 dhe

41 Anketimi i nje peme binare kerkimi Nje operacion i zakonshem ne nje peme binare kerkimi eshte kerkimi i nje çelsi te ruajtur ne peme. Perveç operacionit te kerkimit SEARCH, pemet binare te kerkimit mbeshtesin anketime te tilla si MINIMUM, MAXIMUM, SUCCESOR dhe PREDECESSOR. Kerkimi Proceduren e meposhtme e perdorim per kerkimin e nje nyjeje me nje çels te dhene ne nje peme binare kerkimi. Pasi eshte dhene pointer-i ne rrenjen e pemes dhe nje çels i caktuar k, TREE-SEARCH kthen nje pointer ne nyjen me çels k nese kjo e fundit ekziston; ne te kundert kthehet NIL. Procedura e fillon kerkimin ne rrenjen e pemes dhe shenon nje rruge duke zbritur ne peme si tregohet ne fig. Per çdo nyje te takuar, krahasohet çelsi k me key[x]. Nese dy çelsat jane te barabarte, kerkimi mbaron. Nese k eshte me i vogel se key[x], kerkimi vazhdon ne nenpemen e majte te x, duke qene se vetia e pemeve-binare te kerkimit implikon qe k nuk mund te ruhet ne nenpemen e djathte. Nyjet e takuara gjate rekursionit formojne nje rruge nga rrenja e pemes deri tek nyja, keshtu koha e ekzekutimit te TREE- SEARCH eshte O(h) ku h eshte lartesia e pemes. Fig. Anketimi i nje peme binare kerkimi. Gjate kerkimit te çelsit 13, ndjekim rrugen duke u nisur nga rrenja. Çelsi minimal i pemes eshte 2, qe mund te gjendet duke ndjekur pointerat left te pemes qe nga rrenja. Çelsi maksimal eshte 20 dhe gjendet duke ndjekur pointerat right qe nga rrenja. Pasardhesi i nyjes me çelsin 15 eshte nyja me çels 17, duke qene se eshte çelsi minimal ne nenpemen e djathte te 15. E njejta procedure mund te shkruhet ne menyren me perseritje (iterative) duke perfshire rekursionin ne ciklin while. Ne shume kompjutera, ky version eshte me efikas

42 Minimumi dhe maksimumi Nje element ne nje peme binare kerkimi çelsi i te cilit eshte minimum mund te gjendet gjithmon duke ndjekur pointerat e femijeve te majte [left] duke u nisur nga rrenja derisa te takohet vlera NIL. Procedura e meposhtme kthen nje pointer ne elementin minimum te nenpemes me rrenje ne nje nyje te dhene x. Vetia e pemeve-binare te kerkimi garanton korrektesine e TREE-MINIMUM. Nese nje nyje x nuk ka nenpeme te majte, duke qene se çdo çels i nenpemes se djathte eshte te pakten me i madh se key[x], çelsi minimal do te jete i vendosur ne rrenjen x te nenpemes. Pseudokodi i procedures TREE-MAXIMUM eshte simetrik Te dyja keto procedura ekzekutohen ne kohen O(h) ku h eshte lartesi e pemes. Paraardhei dhe pasardhesi Per nje nyje te dhene ne nje peme binare kerkimi, ndonjehere eshte e rendesishme te jemi ne gjendje te gjejme pasardhesin e saj ne renditjen e percaktuar nga inorder tree walk. Nese te gjithe çelsat jane te ndryshem, pasardhesi i nje nyje x eshte nyja me çelsin me te vogel qe eshte me i madh se key[x]. Struktura e nje peme binare kerkimi na mundeson te percaktojme pasardhesin e nje nyje pa pasur nevoje te krahasojme çelsa. Procedura e meposhtme kthen pasardhesin e nje nyje x ne peme nese ekziston dhe NIL nese x ka çelsin me te madh ne peme. Kodi i procedures prishet ne dy raste. Nese nenpema e djathte e nje nyjeje x eshte joboshe, atehere pasardhesi i x eshte thjesht nyja qe ndodhet me ne te majte ne nenpemen e djathte, qe gjendet ne rreshtin e dyte duke thirrur TREE-MINIMUM(right[x]). Per shembull, pasardhesi i nyjes me çels 15 eshte nyja me çels

43 Ne anen tjeter, nese nenpema e djathte e nyjes x eshte boshe dhe x ka nje pasardhes y, atehere y eshte paraardhesi me i larget i x femija e majte e te cilit eshte gjithashtu paraardhes i x. Ne fig e mesiperme pasardhesi i nyjes me çels 13 eshte nyja me çels 15. per te gjetur y ne thjesht ngjitemi ne peme nga x derisa te takohemi me nje nyje qe eshte femij i majte; percaktuar nga rreshtat 3-7. Koha e ekzekutimit tetree-succesor ne nje peme me lartesi h eshte O(h), pasi edhe ne kete rat ose do te ndiqet nje rruge poshte pergjate pemes ose larte pergjate saj. Procedura TREE-PREDECESSOR, qe eshte simetrike me TREE-SUCESSOR gjithashtu ekzekutohet ne kohen O(h). Edhe kur çelsat nuk jane te ndryshem, ne percaktojme si pasardhes dhe paraardhes te çdo nyjeje x, nyjen e kthyer nga thirrjet TREE-SUCCESOR(x) dhe TREE-PREDECESSOR(x). Si perfundim eshte vertetuar teorema: Operacionet e bashkesise dinamike SEARCH, MINIMUM, MAXIMUM, SUCESSOR dhe PREDECESSOR ne nje peme binare kerkimi me lartesi h mund te ekzekutohen ne kohen O(h). Shtimi dhe Fshirja Operacionet e shtimit dhe fshirjes ne nje bashkesi dinamike te paraqitur n.p.r nje peme binare sjellin edhe ndryshimin e saj. Struktura e te dhenave duhet te modifikohet qe te pasqyroj kete ndryshim por duke respektuar vetine e pemeve binare te kerkimit. Shtimi Per te shtuar nje vlere b ne nje peme binare te kerkimi T, perdorim proceduren TREE- INSERT. Kjo procedure mer si argument nje nyje z te tille qe key[z]=v,left[z]=nil dhe right[z]=nil. Procedura modifikon T dhe fushat e nyjes z ne menyre te tille qe kjo e fundit te shtphet ne pozicionin e pershtatshem. Ne fig e meposhtme tregohet si realizohet shtimi n.p.r TREE-INSERT. Ashtu si TREE- SEARCH dhe ITERATIVE-TREE-SEARCH, TREE-INSERT fillon ne rrenjen e pames dhe shenon nje rruge pergjate saj. Pointeri x shenjon pergjate rruges qe ndiqet, pointeri y shenjon ne babain e x. Pas inicializimit, cikli while ne rreshtat 3-7 sjell zhvendosjen e dy pointerave pergjate pemes ne t emajte ose ne te djathte ne varesite rezultatit te krahasimit mes key[z] dhe key[x], derisa x vendoset ne NIL. Ne rreshtat 8-13 vendosen vlerat e pointerave ne menyre qe te realizohet shtimi i z

44 Fig. Shtimi i nje nyjeje me çels 13 ne nje peme binare kerkimi. Nyjet me ngjyre te hapur tregojne rrugen e ndjekur nga rrenja deri ne pozicionin ku do te shtohet nyja. Vija e pikesuar tregon lidhjet qe shtohen ne peme per te realizuar shtimin e myjes. Ashtu si edhe ne operacionet e tjera primitive te kryera ne peme, edhe kjo procedure kerkon nje kohe ekzekutimi O(h) ne nje peme me lartesi h. Fshirja Procedura e fshirjes se nje nyjeje te dhene z nga nje peme binare kerkimi mer si argument nje pointer ne nyjen z. Procedura mer ne konsiderate tre rastet qe ilustrohen ne fig e meposhtme. Nese z nuk ka femij do te modifikohet p[z] ne vleren NIL. Nese nyja ka nje femij te vetem, do te zhdukim z duke krijuar nje lidhje te re ndermjte femijes dhe prindit te saj. Se fundmi kur nyja ka dy femij, do te zhduket pasardhesi i z y, i cili nuk ka femij te majte dhe do te zevendesohet çelsi i z dhe te dhenat satelite me çelsat e y dhe te dhenat sateltite te saj

45 Fig. Fshirja e nje nyje z nga nje peme binare kerkimi. Secila do te jete nyja qe do te fhsihet do te varet nga numri i femijve qe ka z; kjo nyje ka ngjyre te hapur.(a) Nese z nuk ka femij, thjesht e fshijme ate.(b) Nese z ka nje femij te vetem, zdhuket z. (c) Nese z ka dy femij, zhduket pasardhesi i saj y i cili ka te shumten nje femij dhe zevendesojme çelsin e z me çelsin e y. Kodi i procedures TREE-DELETE i organizon tre rastet pak ndryshe nga llogjika qe ndoqen deri tani me. Ne rreshtat 1-3, algoritmi percakton nj nyje y qe do te zhduket. Nyja y mund te jetea nyja z (nese z ka nje femij) ose pasardhesi i saj (nese z ka dy femij). Me pas ne rreshtat 4-6, x vendoset ne femijet jo-nil te y. Nyja y zhduket me rreshtat 7-13 duke modifikua pointerat ne p[y] dhe x. Zhdukja e y eshte e komplikuar si pasoje e kufijve te vendosur qe hasen kur x=nil dhe kur y eshte rrenja. Se fundmi ne rreshtat 14-16, nese pasardhesi i z eshte pikerisht nyja qe zduket kryhet zhvendosja e vleres se çelsit dhe te dhenve satelit te y tek nyja z. nyja y kthehet ne rreshin 17 ne menyre te tile qe procedura te mund ta ricikloj ate n.p.r procedures free. Procedura ekzekutohet ne kohen O(h) ne nje peme me lartesi h. Ne permbledhje mund te themi se u vertetua teorema e meposhtme: Ne nje peme binare kerkimi me lartesi h operacionet e modifikimit te bashkesise dinamike INSERT dhe DELETE ekzekutohen ne kohen O(h). Balancimi Pame se operacionet ne nje PBK kane kompleksitet O(h) ku h eshte lartesia e pemes ku ekzekutohen. Dallojme peme binare plotecisht te balancuara ku h= log 2 n dhe peme binare krejtesisht te pabalancuara ku h=n. Si rrjedhim operacionet ne PBK kane nje kompleksitet qe varion nga O(log 2 n ) ne O(n)

46 Pemet Kuq e Zi (Red Black Tree ose pemet R-B) Ne kapitullin e kaluar pame se nje peme binare kerkimi me lartesi h mund te implementoj secilin prej operacioneve ne nje bashkesi dinamike ne kohen O(h). Keshtu operacionet jane me te shpejta nese lartesia e pemes eshte e vogel; por nese lartesia e pemes eshte e madhe performanca e tyre mund te krahasohet me ate te listave me lidhje. Pemet kuq e zi jane nje nga skemat e balancuara te pemeve te kerkimit qe garantojne se koha e ekzekutimit te operacioneve dinamike ne rastin me te keq eshte O(lgn). Karakteristikat e pemeve Kuq e Zi Nje peme kuq-e-zi eshte nje peme binare qe ruan nje bit ekstra per çdo nyje : ngjyren e saj, e cila mund te jete e Kuqe ose e Zeze. Duke percaktuar menyren e ngjyrosjes se nyjeve per çdo rruge te ndjekur nga rrenja tek nje gjethe, pemet kuq e zi sigurojne se nje rruge e tille nuk mund te jete sa dyfishi i gjatesise se nje rruge tjeter, keshtu pema eshte pothuajse e balancuar. Çdo nyje e pemes permban fushat color, key, lefr, right, dhe p. Nese nje femij ose nje prind i nyjes nuk ekziston, fusha korresponduese e pointerit mban vleren NIL. Ne do ti shohim keto fusha NIL si te ishim pointera ne nyje te jashme (gjethe) te pemes binare te kerkimit dhe ato normale si nyje te brendshme te pemes. Nje peme binare kerkimi eshte nje peme kuq ezi nese kenaq karakteristikat e meposhtme kuq-e-zi: 1. Çdo nyje eshte e kuqe ose e zeze 2. Rrenja eshte e zeze 3. Çdo gjethe (NIL) eshte e zeze 4. Nese nje nyje eshte e kuqe, atehere te dy femijet e saj jane te zinj 5. Per çdo nyje, te gjitha rruget nga nyja duke zbritur tek gjethet permbajne te njejtin numer nyjesh te zeza. Fig e meposhtme paraqet nje shembull te pemeve kuq e zi. Per te lehtesuar punen me kufijte e vendosur ne nje peme binare kerkimi kuq ezi ne kodin tone, do te perdorim nje zbulues per te paraqitur NIL. Per nje peme kuq-e-zi T, zbuluesi nil[t] eshte nje objekt me te njejtat fusha si çdo nyje tjeter ne peme. Fusha ngjyre e tij eshte e ZEZE (BLACK) dhe fushat e tjetra p, left, right dhe key mund te vendosen ne vlera arbitrare. Si tregohet ne fig ne rastin (b) te githe pointerat NIL jane zevendesuar nga pointera tek zbuluesit nil[t]. Perdorim zbuluesit ne menyre qe te trajtojme nje femij NIL te nje nyje x si nje nyje normale prindi i se ciles eshte x. Pergjithsisht jemi te interesuar vetem per nyjet e brendshme te pemes, pasi ato permbajne çelsa. Do ta quajme numrin e njyjeve te zeza nga nje nyje ne nje gjethe pa perfshire vete nyjen lartesi te zeze te nyjes dhe do ta shenojme bh(x). Sipas vetise 5, koncepti i lartesise se zeze eshte i mirepercaktuar, pasi te gjitha rruget ne zbritje nga nje nyje duhet te kene te njejtin numer te nyjeve te zeza. Percaktojme lartesine e zeze te nje peme kuq-e-zi si lartesine e zeze te rrenjes

47 Teoreme: Nje peme kuq-e-zi me n nyje te brendshme ka nje lartesi te shumten 2 lg(n+1). Fig. Nje peme kuq e zi me nyjet e zeza te paraqitura me ngjyre te erret dhe nyjet e kuqe te paraqitura me ngjyre me te hapur. Çdo nyje ne nje peme kuq e zi eshte ose e zeze ose e kuqe, femijet e nje nyjeje te kuqe jane te dy te zinj, dhe çdo rruge nga nje nyje ne nje gjethe permban te njejtin numer te nyjeve te zeza.çdo nyje jo-nil shoqerohet me lartesine e zeze; nyjet NIL kane lartesi te zeze 0. (b) E njejta peme kuq e zi por çdo nyje NIL eshte zevendesuar nga nil[t] te qujtur zbulues. (c)e njejta peme kuq-e-zi ku gjethet dhe prinderit nuk jane mar parasysh. Si pasoje direkte e teoremes se mesiperme mund te themi se operacionet baze te nje bashkesie dinamike SEARCH, MINIMUM, MAXIMUM, SUCCESSOR, dhe PREDECESSOR mund te implementohen ne pemet kuq-e-zi ne kohen O(h) ne nje peme me lartesi h, dhe çdo peme kuq-e-zi me n nyje eshte nje peme kerkimi me lartesi O(lgn)

48 Rrotullimet Operacionet e pemeve te kerkimit TREE-INSERT dhe TREE-DELETE, kur ekzekutohen ne nje peme kuq-e-zi me n çelsa kerkojne kohen O(lgn). Duke qene se modifikohet pema, rezultati mund te sjell shkelje te vetive te pemeve kuq-e-zi. Per te vene ne vend keto veti duhet te nderrojme ngjyrat e disa nga nyjeve te pemes dhe keshtu te nderrojme strukturen e pointerave. Ndryshojme strukturen e pointerave n.pr rrotullimeve, qe eshte nje operacion lokal ne nje peme kerkimi qe ruan vetine e pemeve-binare te kerkimit. Fig e meposhtme tregon dy llojet e rrotullimeve qe perdoren rrotullim te majte dhe rrotullim te djathte. Kur kryhet nje rrotullim i majte ne nje nyje x, supozohet se femija e djathte y nuk eshte nil[t]; x mund te jete nje nyje çfaredo femija e djathte e te cilit nuk eshte nil[t]. Rrotullimet e majta ku x leviz rreth y. Y behet rrenja e re e pemes me x si femij te mjate te y dhe femijen e majte te y si femij te djathte te x. Fig. Operacionet e rrotullimit ne nje peme binare kerkimi. Operacioni LEFT- ROTATE(T,x) transformon konfigurimin e dy nyjeve ne te majte ne konfigurimin ne te djathte duke ndryshuar nje numer konstant pointerash. Konfigurimi ne te djathte mund te transformohet ne konfigurimin ne te majte n.p.r operacionit te anasjellte RIGHT- ROTATE(T,y). Shkronjat α, β, dhe γ perfaqsojne nenpemet arbitrare. Nje operación rrotullimi respekton vetine e pemeve-binare-te-kerkimit; Pseudokodi per LEFT-ROTATE supozon se right[x] nil[t] dhe qe prindi i rrenjes eshte nil[t]. Vendos y Kthen nenpemen e majte te y ne nenpemen e djathte te x. Lidh babain e x me babain e y Vendoset x ne te majte te y Fig e meposhtme tregon sesi operon LEFT-ROTATE. Kodi i RIGHT-ROTATE eshte simetrik. Te dyja operacionet RIGHT-ROTATE dhe LEFT-ROTATE ekzekutohen ne

49 kohen O(1). Rrotullimet ndryshojne vetem pointerat; te gjitha fushat e tjera ne nyje qendrojne te njejta. Fig. Nje shembull i menyres sesi LEFT-ROTATE (T,x) modifikon nje peme binare kerkimi. Shtimi Shtimi i nje nyjeje ne nje peme kuq-e-zi me n nyje mund te realizohet ne kohen O(lgn). Perdorim nje version te modifikuar lehte te procedures TREE-INSERT per te shtuar nyjen z ne pemen T si te ishte nje peme kerkimi binare normale dhe me pas i japim nyjes z ngjyre te kuqe. Per te garantuar qe vetite kuq-e-zi mund te therrasim procedura ndihmese RB-INSERT-FIXUP per te ringjyruar nyjet dhe per te ekzekutuar rrotullime, Thirrja RB- INSERT(T,z) shton nyjen z, fusha çels e se ciles supozohet se eshte plotesuar. Ka kater ndryshime kryesore mes procedures TREE-INSERT dhe RB-INSERT. Se pari instancat e NIL ne TREE-INSERT zevendesohen me nil[t]. Se dyti vendosim left[z] dhe right[z] ne NIL ne rreshtat te RB-INSERT, ne menyre qe te ruhet struktura e duhur e pemes. Se treti ne rreshtin 16 z ngjyroset. Se katerti, duke qene se ngjyrosja e z me te

50 kuqe mund te sjell shkelje te vetive, therrasim RB-INSERT-FIXUP(T,z) ne rreshtin 17 per te rivendosur vetite kuq-e-zi. else (analoge me rastin e meparshem me right dhe left qe nderrojne vendet) Per te kuptuar sesi funksionon RB-INSERT-FIXUP, do ta ndajme ekzaminimin e kodit ne tre hapa kryesor. Se pari do te percaktojme cilat shkelje te vetive kuq-e-zi shfaqen ne pemen ku ekzekutohet RB-INSERT. Se dyti do te ekzaminojme qellimin e pergjithshem te ciklit while ne rreshtat Se fundmi shohim secilin prej tre rasteve ne te cilin ndahet laku while per te arritur qellimin. Fig e meposhtme tregon sesi RB-INSERT- FIXUP operon ne nje peme te thjeshte kuq-e-zi. Cila nga vetite kuq-e-zi shkelet pas thirrjes RB-INSERT-FIXUP? Vetia 1 sigurisht vazhdon te ruhet, po keshtu edhe vetia 3 pasi te dy femijet e nyjes se re te kuqe te saposhtuar jane zbulues nil[t]. Vetia 5, e cila thote se numri i nyjeve te zeza eshte e njejte ne çdo rruge te nisur nga nje nyje e dhene plotesohet gjithashtu. Keshtu, vetia e vetme qe mund te shkelet eshte vetia 2, qe kerkon qe nyja te jete e zeze dhe vetia 4, qe thote se nje nyje e kuqe nuk mund te kete nje femij te kuq. Te dyja shkeljet shkaktohen si pasoje e ngjyrosjes se z me ngjyre te kuqe. Vetia 2 shkelet nese z eshte rrenja dhe vetia 4 shkelet nese prindi i z eshte i kuq. Ne rastin (a) ne fig e meposhtme tregohet shkelja e vetise 4 pas shtimit te nyjes z. Laku while ne rreshtat 1-15 ruan tre-pjeset e meposhtme te pandryeshueshme: Ne fillim te çdo iterimi te lakut a. Nyja z eshte e kuqe b. Nese p[z] eshte rrenja, atehere p[z] eshte i zi c. Nese ekziston nje shkelje e vetive kuq-e-zi, do te kemi te shumten nje shkelje dhe kjo eshte nje shkelje e vetise 2 ose asaj 4. Nese kemi nje shkelje te vetise 2, kjo ndodh sepse z eshte rrenja dhe eshte e kuqe. Nese ndodh nje shkelje e vetise 4, ndodh pasi te dyja z dhe p[z] jane te kuqe

51 Pjesa (c), qe merret me shkeljet e vetive kuq-e-zi eshte me kryesore se pjeset (a) dhe (b) te cilat i perdorim per te kuptuar situaten ne kod, pasi tregon si RB-INSERT-FIXUP rivendos vetine kuq-e-zi. Duke qene se do te fokusohemi ne nyjen z dhe ne nyjet afer saj na vjen ne ndihme te dime nga pjesa (a) se nyja a eshte e kuqe. Do te perdorim pjesen (b) per te treguar se nyja p[p[z]] ekziston kur i referohemi ne rreshtat 2, 3, 7, 8, 13, dhe Fig. Operimi i RB-INSERT-FIXUP. (a) Nje nyje z pas shtimit. Duke qene se z dhe prindi i saj p[z] jane te dy te kuq, ndodh nje shkelje e vetise 4. Duke qene se y qe eshte xhaxhai i z eshte i kuq, ne kod mund te zbatohet rasti 1. Nyjet ringjyrosen dhe pointeri z zhvendoset siper ne peme, duke dhene pemen e paraqitur ne rastin (b). Edhe nje here, z dhe prindi i tij jane te dy te kuq por xhaxhai y eshte i zi. Duke qene se z eshte femij i djathte i p[z], mund te aplikohet rasti 2. Kryhet nje rrotullim i majte dhe rezultati jepet ne rastin (c). Tani z eshte femija e majte dhe mund te aplikohet rasti3. Nje transformim i djathte e transformon pemen ne rastin (d) prodhohet nje peme kuq-e-zi e sakte. Fillojme studimin me inicializimin dhe mbylljen e lakut dhe me pas do te shohim me ne detaje sesi operon trupi i lakut. Pergjate rruges, do te vertetohet qe perftohen dy rezultate te ndryshme ne çdo iterim te lakut; pointeri z zhvendoset siper ne peme, ose kryhen disa rrotullime dhe laku perfundon

52 Inicializimi: Perpara iterimit te pare te lakut, ne kemi nje peme kuq-e-zi pa shkelje, dhe shtojme nje nyje te kuqe z. Tregojme gjendjen e çdo pjese kur thirret RB-INSERT-FIXUP: a. Kur RB-ISERT-FIXUP thirret, z eshte nyja e kuqe qe eshte shtuar b. Nese p[z] eshte rrenja, atehere p[z] ishte e zeze dhe nuk ka ndryshuar parpara thirrjes se RB-ISERT-FIXUP. c. Pame se vetite 1, 3, dhe 5 plotesohen kur thirret RB-ISERT- FIXUP. Nese ka nje shkelje te vetise 2, atehere rrenja duhet te jete nyja e sapo shtuar z, qe eshte dhe e vetmja nyje e brendshme e pemes. Duke qene se prindi dhe te dy femijet e z jane zbulues, te cilet jane te zinj nuk ka nje shklje te vetise 4. Keshtu, kjo shkelje e vetrise 2 eshte e vetmja shkelje e vetive kuq-e-zi. Nese ka nje shkelje te vetise 4, duke qene se femijet e nyjes z jane zbulues te zinj dhe pema nuk kishte shkelje te tjera perpara shtimit te z, shkelja duhet te jete shkaktuar pasi te dyja z dhe p[z] jane te kuqe. Perfndimi: Kur laku perfundon, arsyeja eshte se p[z] ka ngjyre te zeze. (Nese z eshte rrenja, atehere p[z] eshte zbuluesi nil[t], qe eshte i zi.) Keshtu, nuk kemi shkelje te vetise 4 ne perfundim te lakut. Ruajta: Realisht jane 6 raste qe konsiderohen ne lakun while, por tre prej tyre jane simetrike me tre te tjerat ne varesi te faktit qe babai i z p[z] eshte femij i majte apo i djathte i gjyshit te z p[p[z]], çka percaktohet ne rreshtin2. 1 dallohet nga rastet 2 dhe 3 nga ngjyra e prindit te z ose xhaxhait. Rreshti 3 ben qe y te shenjoj ne xhaxhain e djathte te z right[p[p[z]] dhe nje test kryhet ne rreshtin 4. Nese y eshte i kuq atehere ekzekutohet rasti 1. Ne te kundert, kontrrolli kalon ne rastet 2 dhe 3. Ne te tre rastet, gjyshi i z p[p[z]] eshte i zi, duke qene se prindi i nyjes z p[z] eshte i kuq, dhe vetia 4 shkelet vetem ndermjet z dhe p[z]. 1: xhaxhai i z eshte i kuq Fig e meposhtme ilustron situaten ne rastin 1 (rreshtat 5-8). 1 ekzekutohet kur te dy p[z] dhe z jane te kuq. Duke qene se p[p[z]] eshte i zi, mund te ngjyrosim p[z] dhe y me ngjyre te zeze dhe te regullojme problemin e krijuar nga z dhe p[z] te kuq, dhe te ngjyrosim p[p[z]] te kuq, keshtu ruhet vetia 5. Perserisim lakun while me p[p[z]] ahtu si nyja e re z. Pointeri z zhvendoset dy nivele siper ne peme. Tani tregojme qe rasti 1 ruan lakun te pandryshueshem ne fillimin e iterimit tjeter. Perdorim z per te percaktar nyjen z ne iterimin aktual dhe z p[p[z]] per te percaktuar nyjen z ne testin e kryer ne rreshtin 1 pas iterimit tjeter. a. Duke qene se ky iterim ngjyros p[p[z]] me ngjyre te kuqe, nyja z eshte e kuqe

53 ne fillimin e iterimit tjeter. b. Nyja p[z ] eshte p[p[p[z]]] ne kete iterim, dhe ngjyra e kesaj nyjeje nuk ndryshon. Nese kjo nyje eshte rrenja, ajo ishte e zeze perpara ketij iterimi dhe mbetet e njejte ne fillimin e iterimit tjeter. c. Diskutuam me pare se rasti 1 ruan vetine 5, dhe ne myrete qarte nuk cenon shkelje te vetise 1 ose 3. Nese nyja z eshte rrenja ne fillim te iterimit tjeter, atehere rasti 1 korektoi shkeljen e vetme te vetise 4 ne kete iterim. Duke qene se z eshte i kuq dhe eshte rrenja, vetia 2 behet e vetmja qe eshte shkelur, dhe kjo shkelje shkaktohet nga z. Nese nyja z nuk eshte rrenja ne fillim te iterimit tjeter, atehere rasti 1 nuk krijon nje shkelje te vetise2. 1 korrektoi shkeljen e vetme te vetise 4 qe ekzistonte ne fillim te iterimit. Keshtu z behet i kuq. Nese p[z ] eshte i zi, nuk ka shkelje te vetise. Nese p[z ] eshte i kuq, ngjyrosja e z me njyre te kuqe krijon nje shkelje te vetise 4 mes z dhe p[z ]. z Fig. 1 i procedures RB-ISERT. Vetia 4 shkelet, duke qene se z dhe prindi i tij jane te dy te kuq. I njejti veprim kryhet kur (a) z eshte femij i djathte ose (b) z eshte femij i majte. Secila nga nenpemet α, β, γ, δ, dhe ε ka nje rrenje te zeze, dhe secila prej tyre ka te njejten lartesi te zeze. Kodi per rastin 1 ndrysho ngjyren e nyjeve, duke ruajtur vetine 5: te gjitha rruget zbritese nga nje nyje tek nje gjethe kane te njejtin numer nyjesh te zeza. Laku while vazhdon me gjyshin p[p[z] te z si te ishte z i ri. Çdo shkelje e vetise 4 mund te ndodh mes nyjeve te reja z, e cila eshte e kuqe dhe prinderve te tij, nese ai eshte gjithashtu i kuq. 2: xhaxhai i z eshte i zi dhe z eshte femij i djathte 3: xhaxhai i z eshte i zi dhe z eshte femij i majte Ne rastet 2 dhe 3, ngjyra e xhaxhait te z y eshte e zeze. Dy rastet dallohen nese z eshte femij i djathte apo i majte i p[z]. Rreshtat perbejne rastin 2, i cili tregohet ne figuren e meposhtme se bashku me rastin 3. Ne rastin 2, nyja z eshte femij i djathte. Perdorim menjehere nje rrotullim te majte per te transformuar situaten ne rastin 3 (rreshtat 12-14), ne te cilin nyja z eshte femij i majte. Duke qene se te dyja z dhe p[z] jane te kuqe, rrotullimet dhe lartesia e zeze e nyjeve nuk cenojn vetine 5. Edhe pse kalojme ne

54 rastin 3 direkt n.p.r rastit 2, xhaxhai i z eshte i zi, pasi ne te kundert do te ishte ekzekutuar rasti1. Gjithashtu, nyja p[p[z] ekziston, dhe pas zhvendosjes siper nje nivel ne rreshtat 10 dhe me pas nje nivel ne rrestin 11, identiteti i p[p[z]] mbetet i pandryshuar. Ne rastin 3, ne ekzekutojme disa nderrime ngjyrash dhe nje rrotullim te djathte, i cili ruan vetine 5 dhe me pas, pasi nuk kemi me dy nyje te kuqe ne nje rresht jami ne rregull. Trupi i lakut while nuk ekzelutohet asnje here tjeter, duke qene se p[z] tani eshte i zi. 2 3 Fig 2 dhe 3 i procedures RB-INSERT. Ashtu si ne rastin 1, vetia 4 shkelet si ne rastin 2 ashtu edhe ne rastin 3 sepse z dhe prindi i tij p[z] jane te dy te kuq. Secila nga nenpemet α, β, γ, dhe δ ka rrenje te zeze (α, β, dhe γ prej vetise 4, dhe δ sepse ne te kundert do te ishim ne rastin 1), dhe secila ka te njejten lartesi-te-zeze. 2 transformohet ne rastin 3 n.p.r nje rrotullimi t emajte, i cili ruan vetine 5: te gjitha rruget zbriteze nga nje nyje tek nje gjethe kane te njejtin numer nyjesh te zeza. 3 shkakton disa ndryshime ngjyrash dhe nje rrotullim te djathte, qe gjithashtu ruan vetine 5. Laku while perfundon, pasi vetia 4 kenaqet: nuk ka me dy nyje te kuqe ne nje rresht. Tani tregojme se rastet 2 dhe 3 mbajne lakun te pandryshueshem.( Ashtu sic sapo diskutuam, p[z] do te jete e zeze pas testimit pasardhes ne rreshtin 1, dhe trupi i lakut nuk do te ekzekutohet perseri.) a. 2 vendos z te shenjoj ne p[z], e cila eshte e kuqe. Ne rastin 2 dhe 3 nuk ndodh asnje ndryshim i metejshem i ngjyres. b. 3 ben p[z] me ngjyre te zeze, keshtu nese p[z] do te jete rrenje ne iterimin tjeter, ajo do te jete e zeze. c. Asht usi ne rastin 1, vetite 1, 3, dhe 5 ruhen ne rastet 2 dhe 3. Duke qene se z nuk eshte rrenja ne rastet 2 dhe 3, ne dime se nuk ka shkelje te vetise 2. Rastet 2 dhe 3 nuk sjellin shkelje te vetise 2, duke qene se nyja e vetme qe behet e kuqe behet nje femij i nje nyjeje te zeze permes rrotullimit ne rastin3. Keshtu treguam se procedura RB-ISEERT-FIXUP rivendosin ne menyre korekte vetite kuq-e-zi. Analize Cila eshte koha e ekzekutimit te RB-INSERT? Duke qene se lartesia e nje peme kue-e-zi me n nyje eshte O(lgn), rreshtat 1-16 te RB-INSERT kerkojne kohen O(lgn). Tek RB- INSERT-FIXUP, laku while perseritet vetem n.q.s ekzekutohet rasti1, dhe si rrjedhim pointeri z zhvendoset dy nivele siper ne peme. Numri total i hereve qe mund te ekzekutohet ky lak eshte O(lgn). Keshtu, RB-INSERT kerkon nje kohe totale O(lgn)

55 Fshirja Ashtu si operacionet e tjera baze ne nje peme kuq-e-zi me n nyje, fshirja e nje nyjeje kerkon kohen O(lgn). Fshirja e nje nyjeje nga nje peme kuq-e-zi eshte pak me komplekse se shtimi i nje nyjeje. Procedura RB-DELETE eshte nje modifikim i procedures TREE-DELETE. Pas zhdukjes nga pema te nje nyjeje, thirret procedura ndihmese RB-DELETE-FIXUP qe ndryshon ngjyrat dhe kryen disa rrotullime per te rivendosur vetite kuq-e-zi. te dhenat satelit te y kopjohem tek z Ekzistojne tre ndryshime kryesore mes procedures TREE-DELETE dhe RB-DELETE. Se pari, te gjitha referencat tek NIL ne TREE-DELETE zevendesohen me referenca tek zbuluesit nil[t] tek RB-DELETE. Se dyti, testimi nese x eshte NIL ne rreshtin 7 te TREE-DELETE eshte hequr dhe vleredhenia p[x] p[y] kryhet ne mnyre te pakushtezuar ne rreshtin 7 te RB-DELETE. Keshtu nese x eshte zbuluesi nil [T], pointeri i prindit te tij shenjon ne nyjen e zhdukur y. Se treti, kryhet nje thirrje tek RB-DELETE-FIXUP ne rreshtat nese y eshte i zi. Nese y eshte i kuq kur ky i fundit zhduket, vetite kuq-e-zi ruhen ende per arsyet e meposhtme: o Asnje lartesi e zeze ne peme nuk ka ndryshuar o Asnje nyje e kuqe nuk eshte shtuar o Duke qene se y nuka qene rrenje pasi ishte i kuq, rrenja mbetet e zeze. Nyja x qe i jepet si argument RB-DELETE-FIXUP eshte nje nga dy nyjet: ose nyja qe ishte femij i y perpara se y te zhdukej dhe qe nuk eshte zbulues, ose nese y nuk kishte

56 femij, x eshte zbuluesi nil[t]. Ne rastin e mevonshem, vleredhenia e pakushtezuar ne rreshtin 7 garanton qe prindi i x eshte nyja qe me pare ishte prind i y, si ne rastin kur x eshte nje nyje e brendshme qe mban çels ashtu edhe kur eshte nje zbulues nil[t]. Tani mund te ekzaminojme si procedura RB-DELETE-FIXUP RIVENDOS VETITE KUQ-E-ZI ne pemen ekerkimit. else (analoge me rastin e meparshem me right dhe left qe nderrojne vendet) Nese nyja y qe do te zhduket ne RB-DELETE eshte e zeze, tre probleme mund te lindin. Se pari, nese y ka qene rrenja, nje femij i kuq i y mund te behet rrenja dhe mund te shkelet vetia 2. Se dyti, nese te dy x dhe p[y] jane te kuq atehere mund te shkelet vetia 4. Se treti, zhdukja e y mund te shkaktoj zvogelimin e nyjeve te zeza me 1 me pak ne nje nga rruget. Keshtu mund te shkelet vetia 5. Kete problem mund ta zgjidhim duke supozuar se nyja x ka nje ekstra te zeze. Kjo do te thote, nese i shtojme 1 numrit te nyjeve te zeza ne çdo rruge qe permban x, sipas ketij interpretimi vetia 5 ruhet. Kur zhduket nyja e zeze y, e shtyjme ngjyren e zeze te saj ne femijen e saj. Problemi qendron ne faktin se nyja x tani nuk eshte as e kuqe as e zeze cka sjell shkelje te vetise 1. Nyja x tani eshte dyfish e zeze ose dyfish e kuqe, dhe kontribuon si 2 apo si 1 respektivisht ne numrin e nyjeve te zeza ne rrugen qe permban x. Atributi ngjyre i x do te jete i KUQ (nese x eshte kuq-dhe-zi) ose i ZI (nese x eshte dyfish i zi). Ne fjale te tjera, ngjyra ekstra e zeze e nje nyjeje reflektohet ne shenjimin e saj ne nje nyje sesa ne vete atributin ngjyre. Procedura RB-DELETE-FIXUP rivendos vetite 1, 2 dhe 4. Qellimi i lakut while ne rreshtat 1-22 eshte te zhvendos ngjyren e zeze ekstra siper ne peme derisa

57 1. x te shenjoj ne nje nyje kuq-e-zi, ne kete rast ngjyroset x (njefish) me ngjyre te zeze ne rreshtin x shenjon tek rrenja, ngjyra e zeze ekstra thjesht mund te hiqet 3. mund te perdoren ngjyrosje dhe zhvendosje te pershtatshme Brenda lekut while, x gjithmon shnjon ne nje nyje dyfish te zeze qe nuk eshte rrenje. Percaktojme ne rreshtin 2 nese x eshte femij e majte apo i djathte i prindit p[x]. (Kodi merr ne shqyrtim rastin kur x eshte femij i majte). Mbajme nje pointer w tek vellai i z: duke qene se nyja x eshte dyfish e zeze, nyja w nuk mund te jete nil[t]; ne te kundert, numri i nyjeve te zeza ne rrugen nga p[x] tek gjethja NIl w, do te ishte me ivogel se numri i nyjeve ne rrugen nga p[x] ne x. Te katerta rastet ne kod verfikohen ne fig. Ideja kyçe eshte qe ne çdo rast nr i nyjeve te zeza nga rrenja e nenpemes se treguar ne çdo njeren prej nenpemeve α, β,..., ξ ruhet nga transforimimi. Psh ne fig (a) qe ilustron rastin e pare, nr i nyjeve te zeza nga rrenja ne nenpemen α, ose ne nenpemen β eshte 3, si para ashtu edhe pas trensformimit. Ne te njejten menyre nr i nyjeve te zeza nga rrenja ne çdonjeren orej nenpemeve γ, δ, ε, dhe ξ eshte 2 si para ashtu edhe pas transformimit. Ne fig (b), llogaritja duhet te perfshije ngjyren c, qe mund te jete e zeze ose e kuqe. N.q.s percaktohet count(red)=0 dhe count(black)=1 atehere numri i nyjeve te zeza anga rrenja ne α eshte 2 + count(c), qofte para ashtu dhe pas transformimit

58 Fig. Rastet e lakut while ne proceduren RB-DELETE- FIXUP 1 ( rreshtat 5-8 fig (a) ) verifikohet kur nyja w vellai i nyjes x eshte i kuq. Duke qene se w duhet te kete femij te zinj, mund te shkembehen ngjyrat dhe w dhe p[x] dhe keshtu ekzekutohet nje rrotullim i majte ne p[x] pa shkelur asnje nga vetite. Vellai i ri i x tashme eshte i zi. Rastet 2, 3 dhe 4 verifikohen kur nyja w eshte e zeze; ato dallohen ne varesi te ngjyres se femijve te w. Ne rastin 2 (rreshtat fig(b)) te dy fenijet e w jane te zinj.mund te nderrohen ngjyrat mes w dhe femijes te majte left[w] dhe me pas te ekzekutohet nje rrotullim i djathte ne w pa shkelur asnje nga vetite e pemeve kuq-e-zi. Pemet Kuq e Zi (Red Black Tree ose pemet R-B) Ne kapitullin e kaluar pame se nje peme binare kerkimi me lartesi h mund te implementoj secilin prej operacioneve ne nje bashkesi dinamike ne kohen O(h). Keshtu operacionet jane me te shpejta nese lartesia e pemes eshte e vogel; por nese lartesia e pemes eshte e madhe performanca e tyre mund te krahasohet me ate te listave me lidhje. Pemet kuq e zi jane nje nga skemat e balancuara te pemeve te kerkimit qe garantojne se koha e ekzekutimit te operacioneve dinamike ne rastin me te keq eshte O(lgn). Karakteristikat e pemeve Kuq e Zi

59 Nje peme kuq-e-zi eshte nje peme binare qe ruan nje bit ekstra per çdo nyje : ngjyren e saj, e cila mund te jete e Kuqe ose e Zeze. Duke percaktuar menyren e ngjyrosjes se nyjeve per çdo rruge te ndjekur nga rrenja tek nje gjethe, pemet kuq e zi sigurojne se nje rruge e tille nuk mund te jete sa dyfishi i gjatesise se nje rruge tjeter, keshtu pema eshte pothuajse e balancuar. Çdo nyje e pemes permban fushat color, key, lefr, right, dhe p. Nese nje femij ose nje prind i nyjes nuk ekziston, fusha korresponduese e pointerit mban vleren NIL. Ne do ti shohim keto fusha NIL si te ishim pointera ne nyje te jashme (gjethe) te pemes binare te kerkimit dhe ato normale si nyje te brendshme te pemes. Nje peme binare kerkimi eshte nje peme kuq ezi nese kenaq karakteristikat e meposhtme kuq-e-zi: 1. Çdo nyje eshte e kuqe ose e zeze 2. Rrenja eshte e zeze 3. Çdo gjethe (NIL) eshte e zeze 4. Nese nje nyje eshte e kuqe, atehere te dy femijet e saj jane te zinj 5. Per çdo nyje, te gjitha rruget nga nyja duke zbritur tek gjethet permbajne te njejtin numer nyjesh te zeza. Fig e meposhtme paraqet nje shembull te pemeve kuq e zi. Per te lehtesuar punen me kufijte e vendosur ne nje peme binare kerkimi kuq ezi ne kodin tone, do te perdorim nje zbulues per te paraqitur NIL. Per nje peme kuq-e-zi T, zbuluesi nil[t] eshte nje objekt me te njejtat fusha si çdo nyje tjeter ne peme. Fusha ngjyre e tij eshte e ZEZE (BLACK) dhe fushat e tjetra p, left, right dhe key mund te vendosen ne vlera arbitrare. Si tregohet ne fig ne rastin (b) te githe pointerat NIL jane zevendesuar nga pointera tek zbuluesit nil[t]. Perdorim zbuluesit ne menyre qe te trajtojme nje femij NIL te nje nyje x si nje nyje normale prindi i se ciles eshte x. Pergjithsisht jemi te interesuar vetem per nyjet e brendshme te pemes, pasi ato permbajne çelsa. Do ta quajme numrin e njyjeve te zeza nga nje nyje ne nje gjethe pa perfshire vete nyjen lartesi te zeze te nyjes dhe do ta shenojme bh(x). Sipas vetise 5, koncepti i lartesise se zeze eshte i mirepercaktuar, pasi te gjitha rruget ne zbritje nga nje nyje duhet te kene te njejtin numer te nyjeve te zeza. Percaktojme lartesine e zeze te nje peme kuq-e-zi si lartesine e zeze te rrenjes. Teoreme: Nje peme kuq-e-zi me n nyje te brendshme ka nje lartesi te shumten 2 lg(n+1)

60 Fig. Nje peme kuq e zi me nyjet e zeza te paraqitura me ngjyre te erret dhe nyjet e kuqe te paraqitura me ngjyre me te hapur. Çdo nyje ne nje peme kuq e zi eshte ose e zeze ose e kuqe, femijet e nje nyjeje te kuqe jane te dy te zinj, dhe çdo rruge nga nje nyje ne nje gjethe permban te njejtin numer te nyjeve te zeza.çdo nyje jo-nil shoqerohet me lartesine e zeze; nyjet NIL kane lartesi te zeze 0. (b) E njejta peme kuq e zi por çdo nyje NIL eshte zevendesuar nga nil[t] te qujtur zbulues. (c)e njejta peme kuq-e-zi ku gjethet dhe prinderit nuk jane mar parasysh. Si pasoje direkte e teoremes se mesiperme mund te themi se operacionet baze te nje bashkesie dinamike SEARCH, MINIMUM, MAXIMUM, SUCCESSOR, dhe PREDECESSOR mund te implementohen ne pemet kuq-e-zi ne kohen O(h) ne nje peme me lartesi h, dhe çdo peme kuq-e-zi me n nyje eshte nje peme kerkimi me lartesi O(lgn). Rrotullimet

61 Operacionet e pemeve te kerkimit TREE-INSERT dhe TREE-DELETE, kur ekzekutohen ne nje peme kuq-e-zi me n çelsa kerkojne kohen O(lgn). Duke qene se modifikohet pema, rezultati mund te sjell shkelje te vetive te pemeve kuq-e-zi. Per te vene ne vend keto veti duhet te nderrojme ngjyrat e disa nga nyjeve te pemes dhe keshtu te nderrojme strukturen e pointerave. Ndryshojme strukturen e pointerave n.pr rrotullimeve, qe eshte nje operacion lokal ne nje peme kerkimi qe ruan vetine e pemeve-binare te kerkimit. Fig e meposhtme tregon dy llojet e rrotullimeve qe perdoren rrotullim te majte dhe rrotullim te djathte. Kur kryhet nje rrotullim i majte ne nje nyje x, supozohet se femija e djathte y nuk eshte nil[t]; x mund te jete nje nyje çfaredo femija e djathte e te cilit nuk eshte nil[t]. Rrotullimet e majta ku x leviz rreth y. Y behet rrenja e re e pemes me x si femij te mjate te y dhe femijen e majte te y si femij te djathte te x. Fig. Operacionet e rrotullimit ne nje peme binare kerkimi. Operacioni LEFT- ROTATE(T,x) transformon konfigurimin e dy nyjeve ne te majte ne konfigurimin ne te djathte duke ndryshuar nje numer konstant pointerash. Konfigurimi ne te djathte mund te transformohet ne konfigurimin ne te majte n.p.r operacionit te anasjellte RIGHT- ROTATE(T,y). Shkronjat α, β, dhe γ perfaqsojne nenpemet arbitrare. Nje operación rrotullimi respekton vetine e pemeve-binare-te-kerkimit; Pseudokodi per LEFT-ROTATE supozon se right[x] nil[t] dhe qe prindi i rrenjes eshte nil[t]. Vendos y Kthen nenpemen e majte te y ne nenpemen e djathte te x. Lidh babain e x me babain e y Vendoset x ne te majte te y Fig e meposhtme tregon sesi operon LEFT-ROTATE. Kodi i RIGHT-ROTATE eshte simetrik. Te dyja operacionet RIGHT-ROTATE dhe LEFT-ROTATE ekzekutohen ne

62 kohen O(1). Rrotullimet ndryshojne vetem pointerat; te gjitha fushat e tjera ne nyje qendrojne te njejta. Fig. Nje shembull i menyres sesi LEFT-ROTATE (T,x) modifikon nje peme binare kerkimi. Shtimi Shtimi i nje nyjeje ne nje peme kuq-e-zi me n nyje mund te realizohet ne kohen O(lgn). Perdorim nje version te modifikuar lehte te procedures TREE-INSERT per te shtuar nyjen z ne pemen T si te ishte nje peme kerkimi binare normale dhe me pas i japim nyjes z ngjyre te kuqe. Per te garantuar qe vetite kuq-e-zi mund te therrasim procedura ndihmese RB-INSERT-FIXUP per te ringjyruar nyjet dhe per te ekzekutuar rrotullime, Thirrja RB- INSERT(T,z) shton nyjen z, fusha çels e se ciles supozohet se eshte plotesuar. Ka kater ndryshime kryesore mes procedures TREE-INSERT dhe RB-INSERT. Se pari instancat e NIL ne TREE-INSERT zevendesohen me nil[t]. Se dyti vendosim left[z] dhe right[z] ne NIL ne rreshtat te RB-INSERT, ne menyre qe te ruhet struktura e duhur e pemes. Se treti ne rreshtin 16 z ngjyroset. Se katerti, duke qene se ngjyrosja e z me te

63 kuqe mund te sjell shkelje te vetive, therrasim RB-INSERT-FIXUP(T,z) ne rreshtin 17 per te rivendosur vetite kuq-e-zi. else (analoge me rastin e meparshem me right dhe left qe nderrojne vendet) Per te kuptuar sesi funksionon RB-INSERT-FIXUP, do ta ndajme ekzaminimin e kodit ne tre hapa kryesor. Se pari do te percaktojme cilat shkelje te vetive kuq-e-zi shfaqen ne pemen ku ekzekutohet RB-INSERT. Se dyti do te ekzaminojme qellimin e pergjithshem te ciklit while ne rreshtat Se fundmi shohim secilin prej tre rasteve ne te cilin ndahet laku while per te arritur qellimin. Fig e meposhtme tregon sesi RB-INSERT- FIXUP operon ne nje peme te thjeshte kuq-e-zi. Cila nga vetite kuq-e-zi shkelet pas thirrjes RB-INSERT-FIXUP? Vetia 1 sigurisht vazhdon te ruhet, po keshtu edhe vetia 3 pasi te dy femijet e nyjes se re te kuqe te saposhtuar jane zbulues nil[t]. Vetia 5, e cila thote se numri i nyjeve te zeza eshte e njejte ne çdo rruge te nisur nga nje nyje e dhene plotesohet gjithashtu. Keshtu, vetia e vetme qe mund te shkelet eshte vetia 2, qe kerkon qe nyja te jete e zeze dhe vetia 4, qe thote se nje nyje e kuqe nuk mund te kete nje femij te kuq. Te dyja shkeljet shkaktohen si pasoje e ngjyrosjes se z me ngjyre te kuqe. Vetia 2 shkelet nese z eshte rrenja dhe vetia 4 shkelet nese prindi i z eshte i kuq. Ne rastin (a) ne fig e meposhtme tregohet shkelja e vetise 4 pas shtimit te nyjes z. Laku while ne rreshtat 1-15 ruan tre-pjeset e meposhtme te pandryeshueshme: Ne fillim te çdo iterimi te lakut d. Nyja z eshte e kuqe e. Nese p[z] eshte rrenja, atehere p[z] eshte i zi f. Nese ekziston nje shkelje e vetive kuq-e-zi, do te kemi te shumten nje shkelje dhe kjo eshte nje shkelje e vetise 2 ose asaj 4. Nese kemi nje shkelje te vetise 2, kjo ndodh sepse z eshte rrenja dhe eshte e kuqe. Nese ndodh nje shkelje e vetise 4, ndodh pasi te dyja z dhe p[z] jane te kuqe

64 Pjesa (c), qe merret me shkeljet e vetive kuq-e-zi eshte me kryesore se pjeset (a) dhe (b) te cilat i perdorim per te kuptuar situaten ne kod, pasi tregon si RB-INSERT-FIXUP rivendos vetine kuq-e-zi. Duke qene se do te fokusohemi ne nyjen z dhe ne nyjet afer saj na vjen ne ndihme te dime nga pjesa (a) se nyja a eshte e kuqe. Do te perdorim pjesen (b) per te treguar se nyja p[p[z]] ekziston kur i referohemi ne rreshtat 2, 3, 7, 8, 13, dhe Fig. Operimi i RB-INSERT-FIXUP. (a) Nje nyje z pas shtimit. Duke qene se z dhe prindi i saj p[z] jane te dy te kuq, ndodh nje shkelje e vetise 4. Duke qene se y qe eshte xhaxhai i z eshte i kuq, ne kod mund te zbatohet rasti 1. Nyjet ringjyrosen dhe pointeri z zhvendoset siper ne peme, duke dhene pemen e paraqitur ne rastin (b). Edhe nje here, z dhe prindi i tij jane te dy te kuq por xhaxhai y eshte i zi. Duke qene se z eshte femij i djathte i p[z], mund te aplikohet rasti 2. Kryhet nje rrotullim i majte dhe rezultati jepet ne rastin (c). Tani z eshte femija e majte dhe mund te aplikohet rasti3. Nje transformim i djathte e transformon pemen ne rastin (d) prodhohet nje peme kuq-e-zi e sakte. Fillojme studimin me inicializimin dhe mbylljen e lakut dhe me pas do te shohim me ne detaje sesi operon trupi i lakut. Pergjate rruges, do te vertetohet qe perftohen dy rezultate te ndryshme ne çdo iterim te lakut; pointeri z zhvendoset siper ne peme, ose kryhen disa rrotullime dhe laku perfundon

65 Inicializimi: Perpara iterimit te pare te lakut, ne kemi nje peme kuq-e-zi pa shkelje, dhe shtojme nje nyje te kuqe z. Tregojme gjendjen e çdo pjese kur thirret RB-INSERT-FIXUP: d. Kur RB-ISERT-FIXUP thirret, z eshte nyja e kuqe qe eshte shtuar e. Nese p[z] eshte rrenja, atehere p[z] ishte e zeze dhe nuk ka ndryshuar parpara thirrjes se RB-ISERT-FIXUP. f. Pame se vetite 1, 3, dhe 5 plotesohen kur thirret RB-ISERT- FIXUP. Nese ka nje shkelje te vetise 2, atehere rrenja duhet te jete nyja e sapo shtuar z, qe eshte dhe e vetmja nyje e brendshme e pemes. Duke qene se prindi dhe te dy femijet e z jane zbulues, te cilet jane te zinj nuk ka nje shklje te vetise 4. Keshtu, kjo shkelje e vetrise 2 eshte e vetmja shkelje e vetive kuq-e-zi. Nese ka nje shkelje te vetise 4, duke qene se femijet e nyjes z jane zbulues te zinj dhe pema nuk kishte shkelje te tjera perpara shtimit te z, shkelja duhet te jete shkaktuar pasi te dyja z dhe p[z] jane te kuqe. Perfndimi: Kur laku perfundon, arsyeja eshte se p[z] ka ngjyre te zeze. (Nese z eshte rrenja, atehere p[z] eshte zbuluesi nil[t], qe eshte i zi.) Keshtu, nuk kemi shkelje te vetise 4 ne perfundim te lakut. Ruajta: Realisht jane 6 raste qe konsiderohen ne lakun while, por tre prej tyre jane simetrike me tre te tjerat ne varesi te faktit qe babai i z p[z] eshte femij i majte apo i djathte i gjyshit te z p[p[z]], çka percaktohet ne rreshtin2. 1 dallohet nga rastet 2 dhe 3 nga ngjyra e prindit te z ose xhaxhait. Rreshti 3 ben qe y te shenjoj ne xhaxhain e djathte te z right[p[p[z]] dhe nje test kryhet ne rreshtin 4. Nese y eshte i kuq atehere ekzekutohet rasti 1. Ne te kundert, kontrrolli kalon ne rastet 2 dhe 3. Ne te tre rastet, gjyshi i z p[p[z]] eshte i zi, duke qene se prindi i nyjes z p[z] eshte i kuq, dhe vetia 4 shkelet vetem ndermjet z dhe p[z]. 1: xhaxhai i z eshte i kuq Fig e meposhtme ilustron situaten ne rastin 1 (rreshtat 5-8). 1 ekzekutohet kur te dy p[z] dhe z jane te kuq. Duke qene se p[p[z]] eshte i zi, mund te ngjyrosim p[z] dhe y me ngjyre te zeze dhe te regullojme problemin e krijuar nga z dhe p[z] te kuq, dhe te ngjyrosim p[p[z]] te kuq, keshtu ruhet vetia 5. Perserisim lakun while me p[p[z]] ahtu si nyja e re z. Pointeri z zhvendoset dy nivele siper ne peme. Tani tregojme qe rasti 1 ruan lakun te pandryshueshem ne fillimin e iterimit tjeter. Perdorim z per te percaktar nyjen z ne iterimin aktual dhe z p[p[z]] per te percaktuar nyjen z ne testin e kryer ne rreshtin 1 pas iterimit tjeter. d. Duke qene se ky iterim ngjyros p[p[z]] me ngjyre te kuqe, nyja z eshte e kuqe

66 ne fillimin e iterimit tjeter. e. Nyja p[z ] eshte p[p[p[z]]] ne kete iterim, dhe ngjyra e kesaj nyjeje nuk ndryshon. Nese kjo nyje eshte rrenja, ajo ishte e zeze perpara ketij iterimi dhe mbetet e njejte ne fillimin e iterimit tjeter. f. Diskutuam me pare se rasti 1 ruan vetine 5, dhe ne myrete qarte nuk cenon shkelje te vetise 1 ose 3. Nese nyja z eshte rrenja ne fillim te iterimit tjeter, atehere rasti 1 korektoi shkeljen e vetme te vetise 4 ne kete iterim. Duke qene se z eshte i kuq dhe eshte rrenja, vetia 2 behet e vetmja qe eshte shkelur, dhe kjo shkelje shkaktohet nga z. Nese nyja z nuk eshte rrenja ne fillim te iterimit tjeter, atehere rasti 1 nuk krijon nje shkelje te vetise2. 1 korrektoi shkeljen e vetme te vetise 4 qe ekzistonte ne fillim te iterimit. Keshtu z behet i kuq. Nese p[z ] eshte i zi, nuk ka shkelje te vetise. Nese p[z ] eshte i kuq, ngjyrosja e z me njyre te kuqe krijon nje shkelje te vetise 4 mes z dhe p[z ]. z Fig. 1 i procedures RB-ISERT. Vetia 4 shkelet, duke qene se z dhe prindi i tij jane te dy te kuq. I njejti veprim kryhet kur (a) z eshte femij i djathte ose (b) z eshte femij i majte. Secila nga nenpemet α, β, γ, δ, dhe ε ka nje rrenje te zeze, dhe secila prej tyre ka te njejten lartesi te zeze. Kodi per rastin 1 ndrysho ngjyren e nyjeve, duke ruajtur vetine 5: te gjitha rruget zbritese nga nje nyje tek nje gjethe kane te njejtin numer nyjesh te zeza. Laku while vazhdon me gjyshin p[p[z] te z si te ishte z i ri. Çdo shkelje e vetise 4 mund te ndodh mes nyjeve te reja z, e cila eshte e kuqe dhe prinderve te tij, nese ai eshte gjithashtu i kuq. 2: xhaxhai i z eshte i zi dhe z eshte femij i djathte 3: xhaxhai i z eshte i zi dhe z eshte femij i majte Ne rastet 2 dhe 3, ngjyra e xhaxhait te z y eshte e zeze. Dy rastet dallohen nese z eshte femij i djathte apo i majte i p[z]. Rreshtat perbejne rastin 2, i cili tregohet ne figuren e meposhtme se bashku me rastin 3. Ne rastin 2, nyja z eshte femij i djathte. Perdorim menjehere nje rrotullim te majte per te transformuar situaten ne rastin 3 (rreshtat 12-14), ne te cilin nyja z eshte femij i majte. Duke qene se te dyja z dhe p[z] jane te kuqe, rrotullimet dhe lartesia e zeze e nyjeve nuk cenojn vetine 5. Edhe pse kalojme ne

67 rastin 3 direkt n.p.r rastit 2, xhaxhai i z eshte i zi, pasi ne te kundert do te ishte ekzekutuar rasti1. Gjithashtu, nyja p[p[z] ekziston, dhe pas zhvendosjes siper nje nivel ne rreshtat 10 dhe me pas nje nivel ne rrestin 11, identiteti i p[p[z]] mbetet i pandryshuar. Ne rastin 3, ne ekzekutojme disa nderrime ngjyrash dhe nje rrotullim te djathte, i cili ruan vetine 5 dhe me pas, pasi nuk kemi me dy nyje te kuqe ne nje rresht jami ne rregull. Trupi i lakut while nuk ekzelutohet asnje here tjeter, duke qene se p[z] tani eshte i zi. 2 3 Fig 2 dhe 3 i procedures RB-INSERT. Ashtu si ne rastin 1, vetia 4 shkelet si ne rastin 2 ashtu edhe ne rastin 3 sepse z dhe prindi i tij p[z] jane te dy te kuq. Secila nga nenpemet α, β, γ, dhe δ ka rrenje te zeze (α, β, dhe γ prej vetise 4, dhe δ sepse ne te kundert do te ishim ne rastin 1), dhe secila ka te njejten lartesi-te-zeze. 2 transformohet ne rastin 3 n.p.r nje rrotullimi t emajte, i cili ruan vetine 5: te gjitha rruget zbriteze nga nje nyje tek nje gjethe kane te njejtin numer nyjesh te zeza. 3 shkakton disa ndryshime ngjyrash dhe nje rrotullim te djathte, qe gjithashtu ruan vetine 5. Laku while perfundon, pasi vetia 4 kenaqet: nuk ka me dy nyje te kuqe ne nje rresht. Tani tregojme se rastet 2 dhe 3 mbajne lakun te pandryshueshem.( Ashtu sic sapo diskutuam, p[z] do te jete e zeze pas testimit pasardhes ne rreshtin 1, dhe trupi i lakut nuk do te ekzekutohet perseri.) d. 2 vendos z te shenjoj ne p[z], e cila eshte e kuqe. Ne rastin 2 dhe 3 nuk ndodh asnje ndryshim i metejshem i ngjyres. e. 3 ben p[z] me ngjyre te zeze, keshtu nese p[z] do te jete rrenje ne iterimin tjeter, ajo do te jete e zeze. f. Asht usi ne rastin 1, vetite 1, 3, dhe 5 ruhen ne rastet 2 dhe 3. Duke qene se z nuk eshte rrenja ne rastet 2 dhe 3, ne dime se nuk ka shkelje te vetise 2. Rastet 2 dhe 3 nuk sjellin shkelje te vetise 2, duke qene se nyja e vetme qe behet e kuqe behet nje femij i nje nyjeje te zeze permes rrotullimit ne rastin3. Keshtu treguam se procedura RB-ISEERT-FIXUP rivendosin ne menyre korekte vetite kuq-e-zi. Analize Cila eshte koha e ekzekutimit te RB-INSERT? Duke qene se lartesia e nje peme kue-e-zi me n nyje eshte O(lgn), rreshtat 1-16 te RB-INSERT kerkojne kohen O(lgn). Tek RB- INSERT-FIXUP, laku while perseritet vetem n.q.s ekzekutohet rasti1, dhe si rrjedhim pointeri z zhvendoset dy nivele siper ne peme. Numri total i hereve qe mund te ekzekutohet ky lak eshte O(lgn). Keshtu, RB-INSERT kerkon nje kohe totale O(lgn)

68 Fshirja Ashtu si operacionet e tjera baze ne nje peme kuq-e-zi me n nyje, fshirja e nje nyjeje kerkon kohen O(lgn). Fshirja e nje nyjeje nga nje peme kuq-e-zi eshte pak me komplekse se shtimi i nje nyjeje. Procedura RB-DELETE eshte nje modifikim i procedures TREE-DELETE. Pas zhdukjes nga pema te nje nyjeje, thirret procedura ndihmese RB-DELETE-FIXUP qe ndryshon ngjyrat dhe kryen disa rrotullime per te rivendosur vetite kuq-e-zi. te dhenat satelit te y kopjohem tek z Ekzistojne tre ndryshime kryesore mes procedures TREE-DELETE dhe RB-DELETE. Se pari, te gjitha referencat tek NIL ne TREE-DELETE zevendesohen me referenca tek zbuluesit nil[t] tek RB-DELETE. Se dyti, testimi nese x eshte NIL ne rreshtin 7 te TREE-DELETE eshte hequr dhe vleredhenia p[x] p[y] kryhet ne mnyre te pakushtezuar ne rreshtin 7 te RB-DELETE. Keshtu nese x eshte zbuluesi nil [T], pointeri i prindit te tij shenjon ne nyjen e zhdukur y. Se treti, kryhet nje thirrje tek RB-DELETE-FIXUP ne rreshtat nese y eshte i zi. Nese y eshte i kuq kur ky i fundit zhduket, vetite kuq-e-zi ruhen ende per arsyet e meposhtme: o Asnje lartesi e zeze ne peme nuk ka ndryshuar o Asnje nyje e kuqe nuk eshte shtuar o Duke qene se y nuka qene rrenje pasi ishte i kuq, rrenja mbetet e zeze. Nyja x qe i jepet si argument RB-DELETE-FIXUP eshte nje nga dy nyjet: ose nyja qe ishte femij i y perpara se y te zhdukej dhe qe nuk eshte zbulues, ose nese y nuk kishte

69 femij, x eshte zbuluesi nil[t]. Ne rastin e mevonshem, vleredhenia e pakushtezuar ne rreshtin 7 garanton qe prindi i x eshte nyja qe me pare ishte prind i y, si ne rastin kur x eshte nje nyje e brendshme qe mban çels ashtu edhe kur eshte nje zbulues nil[t]. Tani mund te ekzaminojme si procedura RB-DELETE-FIXUP RIVENDOS VETITE KUQ-E-ZI ne pemen ekerkimit. else (analoge me rastin e meparshem me right dhe left qe nderrojne vendet) Nese nyja y qe do te zhduket ne RB-DELETE eshte e zeze, tre probleme mund te lindin. Se pari, nese y ka qene rrenja, nje femij i kuq i y mund te behet rrenja dhe mund te shkelet vetia 2. Se dyti, nese te dy x dhe p[y] jane te kuq atehere mund te shkelet vetia 4. Se treti, zhdukja e y mund te shkaktoj zvogelimin e nyjeve te zeza me 1 me pak ne nje nga rruget. Keshtu mund te shkelet vetia 5. Kete problem mund ta zgjidhim duke supozuar se nyja x ka nje ekstra te zeze. Kjo do te thote, nese i shtojme 1 numrit te nyjeve te zeza ne çdo rruge qe permban x, sipas ketij interpretimi vetia 5 ruhet. Kur zhduket nyja e zeze y, e shtyjme ngjyren e zeze te saj ne femijen e saj. Problemi qendron ne faktin se nyja x tani nuk eshte as e kuqe as e zeze cka sjell shkelje te vetise 1. Nyja x tani eshte dyfish e zeze ose dyfish e kuqe, dhe kontribuon si 2 apo si 1 respektivisht ne numrin e nyjeve te zeza ne rrugen qe permban x. Atributi ngjyre i x do te jete i KUQ (nese x eshte kuq-dhe-zi) ose i ZI (nese x eshte dyfish i zi). Ne fjale te tjera, ngjyra ekstra e zeze e nje nyjeje reflektohet ne shenjimin e saj ne nje nyje sesa ne vete atributin ngjyre. Procedura RB-DELETE-FIXUP rivendos vetite 1, 2 dhe 4. Qellimi i lakut while ne rreshtat 1-22 eshte te zhvendos ngjyren e zeze ekstra siper ne peme derisa

70 4. x te shenjoj ne nje nyje kuq-e-zi, ne kete rast ngjyroset x (njefish) me ngjyre te zeze ne rreshtin x shenjon tek rrenja, ngjyra e zeze ekstra thjesht mund te hiqet 6. mund te perdoren ngjyrosje dhe zhvendosje te pershtatshme Brenda lekut while, x gjithmon shnjon ne nje nyje dyfish te zeze qe nuk eshte rrenje. Percaktojme ne rreshtin 2 nese x eshte femij e majte apo i djathte i prindit p[x]. (Kodi merr ne shqyrtim rastin kur x eshte femij i majte). Mbajme nje pointer w tek vellai i z: duke qene se nyja x eshte dyfish e zeze, nyja w nuk mund te jete nil[t]; ne te kundert, numri i nyjeve te zeza ne rrugen nga p[x] tek gjethja NIl w, do te ishte me ivogel se numri i nyjeve ne rrugen nga p[x] ne x. Te katerta rastet ne kod verfikohen ne fig. Ideja kyçe eshte qe ne çdo rast nr i nyjeve te zeza nga rrenja e nenpemes se treguar ne çdo njeren prej nenpemeve α, β,..., ξ ruhet nga transforimimi. Psh ne fig (a) qe ilustron rastin e pare, nr i nyjeve te zeza nga rrenja ne nenpemen α, ose ne nenpemen β eshte 3, si para ashtu edhe pas trensformimit. Ne te njejten menyre nr i nyjeve te zeza nga rrenja ne çdonjeren orej nenpemeve γ, δ, ε, dhe ξ eshte 2 si para ashtu edhe pas transformimit. Ne fig (b), llogaritja duhet te perfshije ngjyren c, qe mund te jete e zeze ose e kuqe. N.q.s percaktohet count(red)=0 dhe count(black)=1 atehere numri i nyjeve te zeza anga rrenja ne α eshte 2 + count(c), qofte para ashtu dhe pas transformimit

71 Fig. Rastet e lakut while ne proceduren RB-DELETE- FIXUP 1 ( rreshtat 5-8 fig (a) ) verifikohet kur nyja w vellai i nyjes x eshte i kuq. Duke qene se w duhet te kete femij te zinj, mund te shkembehen ngjyrat dhe w dhe p[x] dhe keshtu ekzekutohet nje rrotullim i majte ne p[x] pa shkelur asnje nga vetite. Vellai i ri i x tashme eshte i zi. Rastet 2, 3 dhe 4 verifikohen kur nyja w eshte e zeze; ato dallohen ne varesi te ngjyres se femijve te w. Ne rastin 2 (rreshtat fig(b)) te dy fenijet e w jane te zinj.mund te nderrohen ngjyrat mes w dhe femijes te majte left[w] dhe me pas te ekzekutohet nje rrotullim i djathte ne w pa shkelur asnje nga vetite e pemeve kuq-e-zi. Zgjerimi i strukturave te te dhenave Disa situata inxhinierike gjate trajtimit te problemeve mjaftohen me perdorimin e nje strukture te dhenash te tille si nje liste me lidhje,nje tabele hash, apo nje peme binare kerkimi - por shume probleme te tjera kerkojne me shume se perdorimin e ketyre strukturave te ashtuquajtura klasike do te duhet te perdoret me shume krijmtari. Vetem ne raste te vecanta eshte e nevojshme te krijohet nje strukture teresisht e re, shume me shpesh ndodh qe na duhet te zgjerojme nje nga strukturat qe kemi pare duke ruajtur informacion shtese ne te. Si rrjedhim mund te programohen operacione te reja per strukturen ne myre qe kjo e fundit te perdoret ne aplikacionin tone

72 Do te shohim dy struktura te dhenash qe ndertohen duke zgjeruar pemet kuq-e-zi; nje strukture te dhenash qe mbeshtet operacione rendtije dhe statistikore ne nje bashkesi dinamike dhe procesin e zgjerimit te struktures baze duke dhene nje teorem per thjeshtimin e procesit. Renditja statistikore dinamike Rendi statistikor i i-te i nje bashkesie dinamike me n element, ku i Є{1,2,,n}, eshte thjesht elementi i bashkesise me çelsin e i-te me te vogel. Ne nje bashkesi te parenditur çdo rendtije statistikore mund te realizohet ne kohen O(n), do te shohim se si mund te modifikohen pemet kuq-e-zi ne menyre te tille qe çdo renditje statistikore te mund te realizohet ne kohen O(lgn). Do te shohim se si rendi i nje elementi - pozicioni i tij ne rendin linear te bashkesise mund te percaktohet ne kohen O(lgn). Nje peme me rend-staistikor T eshte thjesht nje peme kuq-e-zi me informacion shtese te ruajtur ne çdo nyje, si tregohet ne fig. Pervec fushave te zakonshme ne nje nyje z te nje peme kuq-e-zi, kemi nje fushe shtese te quajtur size[x]. Kjo fushe ruan numrin e nyjeve te brendshme ne nenpemen me rrenje ne x (duke perfshire edhe x) cka perben edhe madhesine e nenpemes. Nese percaktojme se madhesia apo size i nje zbuluesi eshte 0 qe do te thote se size[nil[t]] eshte 0 perftojme identitetin e meposhtem: Fig. Nje peme me renditje-statistikore, qe eshte nje peme kuq-e-zi e zgjeruar.pervc fushave standarte çdo nyje ka nje fushe plus siza[x], q eruan numrin e nyjeve te brendshme ne nenpemen me rrenje ne x. Ne nje peme me renditje statistikore nuk kerkohet qe çelsat te jene te ndryshem. Percaktojme si rend te elementi pozicionin ne te cilen ky printohet ne nje vizite ne nje vizite te renditur ne peme(inorder tree walk). Psh ne fig e mesiperme çelsi 14 iruajtur ne nje nyje te zeze ka rendin 5 dhe çelsi 14 i ruajtur ne nje nyje te kuqe ka rendin 6. Perftimi i nje elementi me nje rend te caktuar Perpara se te shohim si te ruajme informacionin e ruajtur ne fushen size gjate operacioneve te shtimit dhe fshirjes, shohim dy anketime me renditje-statiskore qe perdorin kete informacion. Fillojme me nje opercion perftimi te nje elementi me nje rend te caktuar. Procedura OS-SELECT( x,i) kthen nje pointer ne nyjen qe ruan elementin e i

73 te me te vodel ne nenpemen me rrenje ne x. Per te gjetur çelsin e i-te me te vogel ne nje peme me renditje-statistikore T, therrasim OS-SELECT(root[T],i). Vlera e size[left[x]] eshte numri i nyjeve te vendosura perpara x ne nje vizite renditese ne nenpemen me rrenje ne x. Keshtu, size[left[x]]+1 eshte rendi i x ne nenpemen me rrenje x. Ne rreshtin e pare ruajme rendin e x tek i, nese i = r kthejme x ne rreshtin 3; nese i < r atehere elementi i i-te me i vogel ndodhet ne nenpemen e majte te x, keshtu ne rreshtin 5 kryejme thirrje rekursive te procedures duke u spostuar ne te majte. Nese i > r atehere elementi i i-te me i vogel ndodhet ne nenpemen e djathte te x. Duke qene se ekzistojne r elemente ne nenpemen me rrenje ne x, rrjedh qe perpara nenpemes se djathte te x ne viziten renditese ne peme, elementi i i-te me i vogel eshte elementi i (i-r)-te me i vogel ne nenpemen me rrenje ne right[x]. Ky element percaktohet ne mnyre rekursive ne rreshtin6. Per te kuptuar si operon OS-SELECT, konsiderojme kerkimin e elementit te 17 ne viziten renditese ne pemen e dhene ne fig e mesiperme. Fillojme duke vendosur x tek rrenja, çelsi i seciles eshte 26 dhe i=17. Duke qene se size i nenpemes se majte te 26 eshte 12, rendi i saj eshte 13. Keshtu dime se nyja me rend 17, eshte elementi i = 4 et ne nepemen e djathte te 26. Pas thirrjes rekursive, x eshte nyja me çelsin 41, dhe i = 4. Duke qene se size i nenepmes es majte te 45 eshte 5,rendi i saj ne nenpeme eshte 6. Keshtu dime se nyja me rend 4 eshte elementi i 4-et me i vogel ne nenpemen e majte te 41-it. Pas thirrjes rekursive, x eshte nyja me çelsin 30 dhe rendi ne nepemen e saj eshte 2. Keshtu thirret rekursioni edhe njehere per te gjetur elementin e 4-2 = 2-te me te ovgel ne nenpemen me rrenje ne nyjen me çels 38. Percaktojme se nenpema e majte ka size 1, qe do te thote se eshte elementi i dyte me i vogel. Keshtu procedura do te kthej nje pointer ne nyjen me çels 38. Per shkak te faktit se çdo thirrje rekursive shkon nje nivel me poshte ne peme, kohe totale e ekzekutimit per OS-SELECT eshte proporcionale me lartesine e pemes. Duke qene se pema eshte kuq-e-zi, lartesia e saj eshte O(lgn), ku n eshte numri i nyjeve. Si perfundim koha e ekzekutimit per OS-SELECT per nje bashkesi dinamike me n element eshte O(lgn). Percaktimi i rendit te nje elementi Per nje pointer te dhene x ne nje peme me renditj-statistikore T, procedura OS-RANK kthen pozicionin e x ne rendin linear te percaktuar nga vizita renditese ne T

74 Rendi i x mund te shihet si numri i nyjeve qe ndodhen perpara x ne nje vizite rendites plus 1, qe eshte vet x. OS-RANK ruan lakun e meposhtem te pandryshueshem: Ne fillim te çdo iterimi te lakut while ne rreshta 3-6, r eshte rendi i key[x] ne nenpemen me rrenje ne nyjen y Si nje shembull, kur ekzekutohet OS-RANK ne pemen e fig se mesiperme per te gjetur rendin e nyjes me çels 38, marrim sekuencen e meposhtme te vlerave key[y] dhe r ne krye te lakut while: iterimi key[y] r Kthehet rendi 17. Duke qene se çdo iterim ne lakun while kerkon kohen O(1), dhe y shkon nje nivel me siper ne peme per çdo iterim, koha e ekzekutimit te OS-RANK ne rastin me te keq eshte proporcionale me lartesine e pemes:o(lgn) ne nje peme me renditje-statiskore me n nyje. Ruajtja e madhesise size se nepemeve Duke dhene fushen size per çdo nyje, OS-SELECT dhe OS-RANK mund te perllogarisin shpejt informacion renditjeje-statistikor. Por nese keto fusha nuk ruhen ne myre efikase perllogaritjet do te ishin pa vlere. Gjate shtimit ne nje peme kuq-e-zi vume re dy faza, gjate fazes se pare shkojme poshte duke nisur nga rrenja derisa shtojme nyjen e re si femij te nje nyje ekzistuese, gjate fazes se dyte ekzekutohen nderrime ngjyrash dhe rrotullima me qellim ruajtjen e vetive kuq-ezi. Per te ruajtur size e nenpemeve gjate fazes se pare, thjesht rrisim size[x] e çdo nyje x ne rrugen e pershkruar nga rrenja deri poshte tek gjethet. Size per nyjen e re te shtuar vendoset ne 1. Duke qene se jane O(lgn) nyje ne rrugen e pershkruar, kostoja shtese e ruajtes se fushave size eshte O(lgn)

75 Ne fazen e dyte, ndryshimet e vetme ne strukturen e pemeve kuq-e-zi shkaktohen nga rrotullimet, prej te cilave kemi vetem dy. Nje rrotullim eshte nje operacion lokal ku: vetem fushat size e dy nyjeve jane te pakontrrolluara. Duke iu referuar LEFT- ROTATE(T,x) qe pame ne sesionin e kaluar shtojme rreshtat e meposhtem: Fig e meposhtme ilustron menyren sesi modifkohen fushat e nyjeve. Fig. Modifikimi i fushes size te nenpemes gjate rrotullimeve. Lidhja rreth te cilit kryhet rrotullimishnjon ne dy nyjet fushat size te te cilave duhen modifikuar. Modifkimet jane lokale, kerkojne vetem informacionin size qe ruhet ne nyjet x,y dhe ne rrenjen e nepemeve te paraqitura ne forme trikendore. Duke qene se te gjate shtimit ne nje peme kuq-e-zi ekzekutohen te shumten dy rrotullime, koha shtese e kerkuar ne fazen e dyte eshte O(1). Keshtu kohe totale per shtimin ne nje peme me renditje statistikore ne nje peme me n nyje eshte O(lgn) qe eshte e njejte me pemet e thjeshta kuq-e-zi. Fshirja ne peme kuq-e-zi gjithashtu konsiston ne dy faza: e para operon ne pemen e vendosur ne shtresen e brendshme (pemen kuq-e-zi) dhe e dyta sjell te shumten tre rrotullime. Gjate fazes se pare zhduket nyja y, per te modifikuar size e nepemes, thjesht kalojme ne rrugen nga nyja y lart drejt rrenjes, duke zvogeluar me nje vlere e fushes size per çdo nyje. Duke qene se ko rruge ka gjatesi O(lgn), koha shtese e harxhuzr pe rte modifikuar fushat size eshte O(lgn). O(1) rrotullimet gjate fazes se dyte mund te menaxhohen ne te njejten menyre si gjate shtimit. Si perfundim si shtimi edhe fshirja, duke perfshire ruajtjen e fushave size, kerkon kohen O(lgn) per nje peme me rendstatistikor me n nyje. Si mund te zgjerohet nje strukture te dhenash?

76 Gjate projektimi te nje algoritmi ndeshet shpesh problemi i zgjerimit te nje strukture te dhenash ne menyre qe te mbeshtesi funksionalitete shtese. Ne kete seksion do te shohim hapat qe kryhen ne nje zgjerim te tille. Zgjerimi i nje strukture te dhenash mund te ndahet ne kater hapa: 1. Zgjedhja e nje strukture mbeshtetese qe do te sherbje si shtresa baze 2. percaktimi i iformacioit shtese qe dote ruhet ne strukturen e te dhenave te shtreses se poshtme 3. verifikimi se informacioni pus i ruajtur mund te ruhet nga operacionet baze ne strukturen e te dhenave te shtreses se poshtme 4. zhvilimi ioperacioneve te reja. Keto hapa ne i zbauam ne seksionin e kaluar gjate projektimit te pemeve me renditjestatistikore. Per hapin e pare zgjodhem pemet kuq-e-zi si strukture te dhenash te shtreses baze, per shkak te mbeshtjetjes se operacioneve baze te renditjes ne nje bashkesi dinamike si MINIMUM.MAXIMUM, PREDECESSOR dhe SECCESSOR. Per hapin 2, percaktuam fushen size, ne çdo nyje si nje fushe qe ruan madhesin e nenpemeve ne rrenje ne x. Pergjithsisht, informacioni shtese i ben operacionet ekzistuese me efiakse. Psh, mund te implemntonim OS-SELECT dhe OS-RANK duke perdorur vetem çelsat e ruajtur ne peme, por nuk do te kishim nje kohe ekzekutimi O(lgn) Per hapin 3, ne provuam se shtimi dhe fshirja mund te ruanin fushat size ne kohen e ekzekutimit O(lgn). Idealisht, vetem disa element te struktures se te dhenave duhet te modidikohenne menyre qe te ruhet informacioni shtese. Per hapin 4, zhvilluam operacionet OS-SELECT dhe OS-RANK. Nevoja per operacione te reja eshte edhe arsyeja qe na coi ne zgjerushmerine e struktures. Zgjerimi i Pemeve Kuq-eZi Kur si struktura baze gjate zgjerimit te strukturave te dhenave perdoren pemet kuq-e-zi mund te tregojem se informacioni shtese i ruajtur ne fushat e nyjeve mund te ruhet i pandryshuar nga shtimi dhe fshirja, duke e bere hapin 3 me te lehte. Teoreme Le te jete f nje fushe qe zgjeron nje peme kuq-e-zi me n nyje dhe supozojme se permbajta e f per nje nyje x mund te llogaritet duke perdorur informacionin e ruajtur ne nyjet x,left[x],right[x] duke perfshire f[left[x]] dhe f[right[x]]. Keshtu mund te ruajme vlerat e f ne te gjitha nyjet e T gjate shtimitdhe fshirjes pa ndikuar asimptotikisht ne performancen O(lgn) te ketyre operacioneve

77 Grafet Grafet ndahen ne grafe te orientuar dhe grafe te paorientuar. Nje graf I orientuar G eshte nje cift bashkesish (V,E), ku V eshte nje bashkesi e fundme dhe E eshte nje relacion binar ne V. Bashkesia V emertohet si bashkesia e laqeve te G, ndersa elementet e saj quhen laqe. Bashkesia E emertohet bashkesia e harqeve te G, ndersa elementet e saj quhen harqe. Ne fig e meposhtme jepet nje paraqitje e nje grafi te orientuar me bashkesi laqesh {1,2,3,4,5,6}. Laqet paraqiten n.p.r rratheve, kurse harqet n.p.r shigjetave. Vini re se harqet-ne-te-njejtin-lak jane te lejueshem. Fig. Grafet e orientuar dhe te paorientuar. (a) Nje graf i orientuar G=(V,E), ku V={1,2,3,4,5,6} dhe E={(1,2),(2,2),(2,4),(2,5),(4,1),(4,5),(5,4),(6,3)}. Harku (2,2) eshte

78 nje lak-ne-vetvete.(b) Nje graf i paorientuar G=(V,E), ku V={1,2,3,4,5,6} dhe E={(1,2),(1,5),(2,5)(3,6)}. Laku 4 eshte I izoluar.(c) Nengraf i grafit te dhene ne (a) i perbere nga bashkesia e laqeve {1,2,3,6}. Ne nje graf te paorientuar G=(V,E), bashkesia E konsiston ne cifte te paorientuar laqesh. Per te paraqitur nje harke do te perdorim konvecionin (u,v), dhe jo bashkesine {u,v} gjithashtu (u,v) dhe (v,u) konsiderohen si I njejti hark. Ne nje graf te paorientuar. Laqet-ne-vetvete jane te ndaluar, keshtu cdo hark konsiston ne dy laqe te ndryshem. Ne fig (b) jepet nje paraqitje klasike e nje grafi te paorientuar. Shume percaktime per karakteristikat e grafeve te orientuar dhe te paorientuar jane pothuaj te njejte, gjithsesi disa prej tyre kane ndryshime te lehta. Nese (u,v) eshte nje hark ne nje graf te orientuar G=(V,E), themi se (u,v) jane laqe fqinj ose del nga laku u qe eshte fqinj me lakun v, ose hyn ne lakun v. Psh harqe qe dalin nga laku 2 ne fig(a) jane (2,2),(2,4) dhe (2,5). Harqet qe hyjne ne lakun 2 jane (1,2) dhe (2,2). Nese (u,v) eshte nje hark ne nje graf te paorientuar G=(V,E), themi se (u,v) eshte fqinj me laqet u dhe v. Ne fig(b), harqet fqinj ma lakun 2 jane (1,2) dhe (2,5). Nese (u,v) eshte nje hark ne nje graf G=(V,E), themi se laku v eshte fqinj (renditet pas) me lakun u. kur grafi eshte I paorientuar, marredhenia e fqinjesise eshte simetrike. Kur grafi eshte I orientuar, marredhenia e fqinjesise nuk eshte detyrimisht simetrike. Nese v eshte fqinj me u ne nje graf te orientuar, ndonjehere mund te shkruhet si u v. Ne fig (a) dhe (b) me siper, laku 2 eshte fqinj me lakun1, duke qene se harku (1,2) I perket te dy grafeve. Laku 1 nuk eshte fqinj me lakun 2 ne fig(b) duke qene se (2,1) nuk I perket grafit. Rendi ose Grada e nje laku ne nje graf te paorientuar eshte numri I harqeve fqinj me te. Psh, laku 2 ne fig(b) ka rend 2. Nje lak me rend 0 eshte nje lak I izoluar sic eshte laku 4. Ne nje graf te orientuar, rendi-out I nje laku eshte numri I harqeve qe dalin nga laku dhe rendi-in I nje laku eshte numri I harqeve qe hyjne ne lak. Rendi I nje laku ne nje graf te orientuar jepet nga shuma e rendit-out dhe rendit-in. Rendi I lakut 2 ne fig(a) eshte 5, rendi-out 3 dhe rendi-in 2. Nje rruge (path) me gjatesi k nga nje lak u ne nje lak u ne nje graf G=(V,E) eshte nje sekuence laqesh (v0,v1,v2,,vk) e tille qe u=v0, u =vk dhe (vi-1,vi) E per i=1,2, k. Gjatesia e rruges eshte e barabarte me numrin e harqeve ne te. Rruga permban laqet v0,v1,.,vk dhe harqet (v0,v1),(v1,v2),,(vk-1,vk). (Rruga nga u tek u eshte 0). Nese ekziston nje rruge p nga u tek u, themi se u eshte I arritshem nga u permes p. Nje rruge eshte e thjeshte nese te gjithe laqet ne rruge jane te ndryshem. Ne fig (1,2,5,4) eshte nje rruge e thjeshte me gjatesi 3. Rruga (2,5,4,5) nuk eshte e thjeshte. Nje nenrruge ne rrugen p = (v0,v1,,vk) eshte nje nensekuence e laqeve te saj. Qe dote thote per cdo 0 i j k, nensekuenca e laqeve (v0,v1,,vk) eshte nje nenrruge e p. Ne nje graf te orientuar, nje rruge (v0,v1,...,vk) formon nje cikel nese v0=vk dhe rruga ne te permban te pakten nje hark. Cikli eshte i thjeshte nese, gjithashtu v1,v2,...,vk jane te ndryshem. Nje lak ne vetevete eshte nje cikel me gjatesi 1. Dy rruge (v0,v1,...,vk-1,v0) dhe (v0,v1,...,vk) formojne te njejtin cikel nese ekziston nje integer j i tille qe v i = v (i +j) mod k per i = 0,1,...,k-1. Ne fig (a), rruga (1,2,4,1)formon te njejtin cikel sikurse rruga

79 (2,4,1,2) dhe (4,1,2,4). Ky cikel eshte i thjeshte, por cikli (1,2,4,5,5) nuk eshte. Cikli (2,2) i formuar prej harkut(2,2) eshte nje lak ne vetvete. Nje graf i orientuar pa laqe ne vetvete eshte i thjeshte. Ne nje graf te paorientuar, rruga (v0,v1,..,vk) formon nje cikel (te thjeshte) nese k 3, v0 = vk dhe v1,v2,..., vk jane te nryshme. Psh, ne fig(b), rruga (1,2,5,1) eshte nje cikel. Nje graf pa cikle quhet aciklik. Nje graf i paorientuar quhet i lidhur nese cdo cift laqesh eshte i lidhur nga nje rruge. Komponentet e lidhur ne nje graf jane klasa ekuivalente te laqeve nen marredhenien eshte e arritshme nga. Grafi ne fig(b) ka tre komponente te lidhue: {1,2,5}, {3,6} dhe {4}. Cdo lak ne {1,2,5} eshte i arritshem nga cdo lak tjeter ne {1,2,5}. Nje graf i paorientuar eshte i lidhur nese ka ekzaktesisht nje komponent te lidhur, qe do te thote qe cdo lak te jete i arritshem nga cdo lak tjeter. Fig(a) Nje cift grafesh izomorf (b) Dy grafe joizomorf pasi grafi i siperm kanje graf me rend 4 nese ai poshte jo. Nje graf eshte fortesisht i lidhur nese cdo dy laqe jane te arritshem nga njeri-tjetri. Komponentet fortesisht te lidhur te nje grafi te paorientuar jane klasat ekuivalente te laqeve nen marredhenien jane te arritshem reciprokisht. Nje graf i orientuar eshte fortesisht i lidhur nese ka nje komponent fortesisht te lidhue. Grafi ne fig(a) ka tre komponente fortesisht te lidhur: {1,2,4,5},{3}, dhe {6}. Te gjitha ciftet ne {1,2,4,5} jane reciprokisht te arritshem. Laqet {3,6} nuk formojne nje komponent fortesisht te lidhur pasi laku 6 nuk mund te arrihet nga laku 3. Dy grafe G = (V,E) dhe G = (V,E) jane izomorfe nese ekziston nje funksion dydrejtimesh f: V V i tille qe (u,v)є E n.q.s dhe vete n.q.s (f(u),f(v)) Є E. Me fjale te tjera mund te rietiketohen laqet e G ne menyre qe te jene laqe te G,duke ruajtur harqet korrespondues ne G dhe G. Ne fig(a) te dhene me poshte tregohen nje cift grafesh izomorfe G dhe G me bashkesite perkatese te laqevev={1,2,3,4,5,6} dhe V ={u,v,w,x,y,z}. Korrespondenca nga V tek V e dhene nga f(1)=u, f(2)=v, f(3)=w, f(4)=x, f(5)=y, f(6)=z eshte funksioni dydrejtimesh i kerkuar. Grafet ne fig(b) nuk jane izomorf: faktikisht, edhe pse te dy grafet kane 5 laqe dhe 7 harqe, grafi i pare ka nje lak me grade 4 ndersa i dyti jo. Themi se nje graf G =(V,E ) eshte nje nengraf i G = (V,E) nese V ЄV dhe E ЄE. Per nje bashkesi te dhene V ЄV, nengrafi i G i nxitur nga V eshte grafi G =(V,E ) ku E ={(u,v) ЄE: u,vєv }

80 Nengrafi qe nxitet (qe rrjedh) nga bashkesia {1,2,3,6} ne fig(a) te dhene ne fillim paraqitet ne fig(c) dhe ka bashkesi harqesh{(1,2),(2,2),(6,3)}. Per nje graf te dhene te paorientuar G=(V,E), versioni i orientuar i G eshte grafi i orientuar G =(V,E ), ku (u,v) ЄE n.q.s dhe vetem n.q.s (u,v) ЄE. Qe do te thote, cdo hark (u,c) ne G zevendesohet ne versionin e orientuar nga dy harqet e orientuar(u,v) dhe (v,u). Per nje graf te dhene te orientuar G=(V,E), versioni i paorientuar i G eshte G =(V,E ), ku (u,v) Є E n.q.s dhe vetem n.q.s u v dhe (u,v)єe. Keshtu versioni i paorientuar permban harqet e G me shigjeta te hequra dhe pa laqe ne vet vete.( Duke qene se (u,v) dhe (v,u) jane te njejtet harqe ne nje graf te paorientuar, versioni i paorientuar i nje grafi te paorientuar e permban ate vetem nje here, edhe nese grafi i orientuar i permban te dy (u,v) dhe (v,u). Ne nje graf te orientuar G=(V,E), nje fqinj i nje laku u eshte cdo lak qe eshte fqinj me u ne versionin e paorientuar te G. Qe do te thote, v eshte fqinj me u nese (u,v) ЄR ose (v,u) ЄE. Ne nje graf te paorientuar u dhe v jane fqinj nese vijne pas njeritjetrit. Nje graf quhet komplet nese per nje cift cfaredo te dhene laqesh, kemi qe keta te fundit jane fqinj.ne figtregohet shmbullli i nje grafi komplet. Fig Shembull i nje grafi komplet Nje graf i paorientuar aciklik quhet edhe pyll, ndersa nje graf i paorientuar aciklik i dhur quhet peme. Ne fig e meposhtme tregohen shmbuj te nje peme dhe te nje pylli. Fig (a) Grafi eshte nje peme (b) Grafi eshte nje pyll Algoritma mbi grafet Ne kete kapitull do te shohim metoda per paraqitjen dhe kerkimin e nje grafi. Te kerkosh nje graf do te thote te ndjekesh ne menyre sistematike harqet e grafit ne menyre qe te vizitohen laqet e grafit. Nje alogritem per kerkimin e grafit mund te zbuloj shume mbi

81 strukturen e tij. Teknikat per kerkimin e grafeve qendrojne ne zemren e fushes se algoritmave te grafeve. Perfaqesimi (prezantimi) i grafeve Ekzistojne dy metoda standarte per te prezantuar nje graf G=(V,E): si nje koleksion te listash fqinjesie ose si nje matrice fqinjesie. Te dyja metodat mund te perdoren si per grafet e orientuar edhe per ato te paorientuar. Prezantimi n.p.r listave te fqinjesise eshte me ipreferuar, sepse ofron nje menyre kompakte per te prezantuar grafet e shperndare grafe per te cilet E eshte shume me e vogel se V 2. Prezantimi n.p.r matrices se fqinjesise mund te preferohet, ku grafi eshte i dendur E eshte pothuaj sa V 2 ose kur na duhet te pohojme me shpejtesi nese ekziston nje hark qe lidh dy laqe te dhene. Prezantimi n.p.r listave-te-fqinjesise per nje graf G=(V,E) konsiston ne nje vektor Adj prej V listash per cdo lak ne V. Per cdo uє V, lista e fqinjesise Adj[u] permban te gjithe laqet v te tille qe ekziston nje hark (u,v) Є E. Qe do te thote, Adj[u] konsiston ne te gjithe laqet fqinj te une G.Laqet ne secilen prej listave ruhen ne menyre arbitrare. Ne fig e meposhtme paraqitet lista e fqinjesise per nje graf te paorientuar ne myre te njejte realizohet paraqitja per nje graf te orientuar. Fig. Dy prezantime te nje grafi te paorientuar.(a) Nje graf i paorinetuar G qe ka gjashte e laqe dhe tete harqe.(b) Prezantimi I G n.pr. listes se fqinjesise (c) Prezantimi I G n.p.r matrices se fqinjesise. Fig. Dy prezantime te nje grafi te orientuar.(a) Nje graf i orinetuar G qe ka gjashte e laqe dhe tete harqe.(b) Prezantimi I G n.pr. listes se fqinjesise (c) Prezantimi I G n.p.r matrices se fqinjesise. Nese G eshte nje graf I orientuar, shuma e gjatesive te te gjitha listave te fqinjesise eshte E, duke qene se nje hark I formes (u,v) prezantohet duke shfaqur v ne Adj[u]. Nese G eshte nje graf I paorientuar, shuma e gjatesive te te gjitha listave te fqinjesise eshte 2 E, duke qene se (u,v) eshte nje hark I paorientuar u shfaqet ne listen e fqinjesise se v dhe

82 anasjelltas. Si per grafet e orientuara ashtu edhe per ato te orientuara, lista e fqinjesise ka vetine e mire qe madhesia e memories se kerkuar eshte Θ(V+E). Listat e fqinjesise mund te pershtaten per te prezantuar grafet me peshe, qe jane grafe ku cdo harku i vendoset ne korrespondence nje peshe, qe pergjithsisht jepet nga nje funksion w: E R. Per shembull, le te jete G=(V,E) nje graf me peshe me nje funksion peshe w. Pesha w(u,v) e harkut (u,v) E ruhet se bashku me lakun v ne listen e fqinjesise se u. Prezantimi sipas listes se fqinjesise mund te modifikohet qe te mbeshtese edhe lloje te tjera grafesh. Nje e mete potenciale e listave te fqinjesise eshte fakti qe nuk ka nje menyre te shpejte per te percaktuar nese nje harke i dhene (u,v) eshte prezent ne graf dhe me pas te kerkohet per v ne listen e fqinjesise Adj[u]. Ky disavantazh mund te ndreqet duke perdorur matricen e fqinjesise, me koston e perdorimit te me shume memorieje. Kerkimi ne gjeresi Kerkimi ne gjeresi eshte nje nga algoritmat me te thjeshte per kerkimin e grafeve dhe arkitekture baze per shume algoritmave te tjere te rendesishem mbi grafet. Per nje graf te dhene G = (V,E) dhe nje lak burim te dhene s, kerkimi ne gjeresi eksploron ne menyre sistematike harqet e G per te zbuluar te gjithe laqet qe jane te arritshem nga s. Ai gjithashtu perllogarit distancen e s tek cdo lak te arritshem. Algoritmi prodhon gjithashtu nje peme kerkimi ne gjeresi me rrenje s qe permban te gjithe laqet e arritshem. Per cdo lak v te arritshem nga s, rruga ne pemen e kerkimit ne gjeresi nga s tek v i korrespondon rruges me te shkurter nga s tek v ne grafin G, qe eshte nje rruge qe permban numrin me te vogel te harqeve. Algoritmi perdoret per grafet e orientuar dhe te paorientuar. Kerkimi ne gjeresi quhet keshtu sepse zgjeron kufirin mes laqeve te zbuluar dhe te pazbuluar ne menyre uniforme permes gjeresise se kufirit. Qe do te thote, algoritmi zbulon te gjithe laqet ne distance k nga s perpara se te zbulohet cdo lak ne distancen k+1. Per te ruajtur gjurme te progresit, kerkimi ne gjeresi ngjyros cdo lak te bardhe,gri ose te zi. Te gjithe laqet fillimisht kane ngjyre te bardhe, me vone mund te marrin ngjyre gri dhe me pas te zeze. Nje lak quhet i zbuluar heren e pare qe ai haset gjate kerkimit, ne kete kohe ai behet me ngjyre jo te bardhe. Keshtu laqet me ngjyre gri dhe te zeze jane zbuluar me pare, por kerkimi ne gjeresi ben dallimin mes tyre per te siguruar qe kerkimi te kryhet ne gjeresi. Nese (u,v) Є E dhe laku u eshte i zi, laku v mund te jete gri ose i zi; qe do te hote te gjithe laqet fqinj te laqeve me ngjyre te zeze jane zbuluar me pare. Laqet me ngjyre gri mund te kene ndonje fqinj me ngjyre te bardhe; ketoperbejne kufirin me laqeve te zbuluar dhe te pazbuluar ende. Pema e ndertuar fillimisht permban vetem rrenjen, qe eshte laku burim s. Gjate procesit te skanimit te listes se fqinjesise te nje laku te zbuluar u, kurdo qe te zbulohet nje lak i bardhe v do te shtohet ne peme se bashku me harkun (u,v). Themi se u eshte paraardhesi ose prind i v ne kerkimin ne gjeresi. Duke qene se nje lak zbulohet te shumten nje here, ai ka te shumten nje prind. Pasardhesit ne pemen e kerkimit ne gjresi percaktohen ne menyre relative kundrejt rrenjes s si zakonisht: nese u eshte ne nje rruge te pemes nga

83 rrenja s ne lakun v, do te kishim qe u eshte nje paraardhes i v dhe v eshte nje pasardhes i u. Procedura e kerkimit ne gjeresi e dhene me poshte supozon se grafi i dhene ne hyrje G = (V,E) prezantohet n.p.r listes se fqinjesise. Ruhen disa struktura te dhenash shtese per cdo lak ne graf. Ngjyra e cdo laku u Є V ruhet ne variablin e ngjyres color[u], dhe paraardhesi i u ruhet ne variablin π[u]. Nese u nuk ka paraardhes ( per shembull, nese u=s ose u nuk eshte zbuluar ende) atehere π[u]=nil. Distanca nga burimi u tek laku u e perllogaritur nga algoritmi ruhet ne d[u]. Algoritmi perdor gjithashtu nje rradhe Q first-in, first-out per te menazhuar bashkesine e laqeve gri. lak u Є V Є Fig e meposhtme ilustron progresin e procedures ne nje graf te thejshte

84 Fig. Ekzekutimi i BFS ne nje graf te paorientuar.harqet e pemes praqiten me ngjyre gri hap pas hapi gjate prodhimit nga BFS. Vlera d[u] tregohet ne brendesi te cdo laku u. Radha Q tregohet ne fillim te cdo hapi rekursiv te ciklit while ne rreshta Distancat e laqeve tregohen poshte laqeve ne rradhe. Procedura BFS funksionon si me poshte. Reshtat 1-4 ngjyrosin cdo lak me ngjyre te bardhe, vendosind[u] ne infinit per cdo lak u, dhe vendosin prindin e cdo laku ne NIL. Rreshti 5 ngjyros lakun burim me gri, pasi konsiderohet si laku i pare i zbuluar kur fillon provedura. Rreshti 6 inicializon d[s] ne 0, dhe rreshti 7 vendos paraardhesin e burimit ne NIL. Rreshtat 8-9 inicializojne Q si rradhen qe permban vetem lakun s. Cikli while ne rreshtat ekzekutohet aq here se mbeten laqe me ngjyre gri, qe jane laqet e zbuluar lista e fqinjesise se te cileve nuk eshte ekzaminuar ende plotesisht. Ne testin qe kryhet ne rreshtin 10, rradha Q konsiston ne bashkesin e laqeve gri. Perpara hapit te pare, laku i vetem gri dhe laku ivetem ne rradhe eshte rrenja s. Rreshti 11 percakton lakun gri u ne koken e rradhes Q dhe e heq ate nga Q. Laku for ne rreshtat merr ne shqyrtim cdo lak v ne listen e fqinjesise se u. Nese v eshte e bardhe, do te thote qe nuk eshte zbuluar ende, algoritmi e zbulon duke ekzekutuar rreshtat Fillimisht laku merr ngjyre gri dhe me pas d[u] vendoset ne d[u] +1. Me pas, u regjistrohet si prind i tij. Ne fund laku vendoset ne bishtin e rradhe Q. Kur tegjithe laqet ne listene fqinjesise se u te jene zbuluar, u ngjyroset me te zeze ne rreshtat Laku vazhdon te ekzekutohet pasi kushti i testimit nuk ndryshon, sa here nje lak ngjyroset me gri (rreshti 14) ai fshihet gjithashtunga rradha, dhe sa here qe nje lak shtohet ne rradhe (rreshti 11) ai ngjyroset me te zeze (rreshti 18)

85 Rezultati i kerkimit ne gjeresi mund te varet nga rendi ne te cilin jane vendosur fqinjet e nje laku te dhene tevizituar ne rreshtin 12; pema e kerkimit ne gjresi mund te varioj por distancat d te perllogaritura nga algoritmi jo. Koha e ekzekutimit ne nje peme BFS eshte O(V+E) Rruget Minimale Ne fillim te ketij paragrafi pohuam se kerkimi ne gjeresi perllogarit distancen e cdo lakute nje grafi G=(V,E) te arritshem nga nje lak burim te dhene s Є V. Percaktohet si distanca e rruges minimale δ(s,v) nga s ne v numri minimal i harqeve ne nje rruge nga laku s ne lakun v, ose infinit nese nuk ekziston asnje rruge nga s per ne v. Nje rruge ne gjatesi δ(s,v) nga s ne v do ta quajme nje rruge minimale nga s ne v. Nje veti e rendesishme persa i perket gjatesive te rrugeve eshte vetia e meposhtme: Per nje G=(V,E) te orientuar ose jo, le te jete s Є V nje lak arbitrar. Per cdo hark (u,v) Є E δ(s,v) δ(u,v) + 1 Pemet BFS Procedura BFS nderton nje peme kerkimi ne gjeresi te ilustruar ne fig e meparshme. Pema paraqitet n.p.r fushes π ne cdo lak. Me formalisht, per nje graf G=(V,E) me burim s, percaktojme si nengrafin paraardhes te G si Gπ=(Vπ,Eπ) ku Vπ={v V: π[v] NIL }{ s} dhe Eπ={(π[v],v):v Vπ-{s}. Nengrafi paraardhes Gπ eshte nje peme kerkimi ne gjeresi nesevπ konsiston ne te gjithe laqet e arritshem nga s dhe, per te gjitha v Vπ ekziston nje rruge e veteme nga s ne v ne Gπ qe eshte gjithashtu edhe rruga me e shkurter nga s ne v ne G. Procedura e meposhtme printon te gjithe laqet e rruges me te shkurter nga s ne v, duke supozuar se BFS eshte ekzekutuar me pare per te llogaritur rrugen me te shkurter ne peme. Kerkimi ne thellesi Strategjia e ndjekur nga kerkimi ne thellesi e shprehur edhe nga emri eshte kerkimi ne thellesi ne graf sa here qe eshte e mundur. Ne kerkimin ne thellesi, harqet zbulohen duke filluar nga laku i fundit v i zbuluar qe ka ende harqe te pazbuluar. Kur te gjithe harqet e v zbulohen, kerkimi kthehet prapa ne ekslporimte harqeve qe dalin nga laku nga i cili u zbulua v. Ky proces do te vazhdoje derisa te zbulohen te gjithe laqet e arritshem nga laku burim. Nese mbetet ndonje lak i pazbuluar, atehere njeri prej tyre zgjidhet si burim i ri

86 dhe kerkimi perseritet duke filluar nga ky burim. I gjithe ky proces perseritet derisa te zbulohen te gjithe laqet. Ashtu si ne kerkimin ne gjeresi, gjate skanimit te listes se fqinjesise se nje laku te zbuluar u, kurdo qe te zbulohet nje lak v regjistrohet si ngjarje duke vendosur fushen e paraardhesit te v π[v] ne u. Ne ndryshin nga kerkimi ne gjeresi ku nengrafi i paraardhesve formon nje peme, nengrafi i paraardhesve te prodhuar nga kerkimi ne thellesi mund te perbehet nga disa peme, pasi kerkimi mund te perseritet per burime shumfishe. Nengrafi i paraardhesve ne kerkimin ne thellesi percaktohet krejt ndryshe nga ai i kerkimit ne gjeresi: le te jete Gπ = ( V,Eπ), ku Є V dhe Nengrafi i paraardhesve ne nje kerkim ne thellesi formon nje pyll DFS (depth-first search) te perbere nga disa peme DFS. Harqet ne Eπ quhen harqe te pemes. Ashtu si ne kerkimin ne thellesi, laqet ngjyrosen gjate kerkimit per te treguar gjendjen e tyre. Cdo lak fillimisht eshte i bardhe, gri kur zbulohet gjate kerkimit, dhe i zi ne perfundim, qe eshte momenti kur lista e fqinjesise eshte ekzaminuar teresisht. Kjo teknike garanton se cdo lak perfundon ekzaktesisht ne nje peme DFS dhe se keto peme jane te shkeputura nga njera-tjetra. Pervec krjimit te pyllit DFS, kerkimi ne thellesi shenjon cdo lak me informacione mbi kohen. Cdo lak do te permbaj dy etiketa; etiketa e pare d[v] regjistron kohen kur v eshte zbuluar fillimisht dhe eshte ngjyrosur me ngjyre gri, etiketa e dyte f[v] ruan kohen kur kerkimi perfundon ekzaminimin e listes se fqinjesise se v ( dhe ngjyros v me te zeze). Keto etikata perdoren nga shume algoritma dhe perdoren per te arsyetuar mbi sjellljen e kerkimit ne thellesi. Procedura DFS e dhene me poshte regjistron ne variablin d[u] kohen kur zbulohet laku u dhe ne variablin f[u] kohen kur perfundon kerkimi. Keto etiketa jane nr te plote ndermjet 1 dhe 2 V, pasi ekziston nje ngjarje zbulimi dhe nje ngjarje perfundimi per cdo njerin nga V laqet. Per cdo lak u, Laku u eshte i BARDHE perpara kohes d[u], GRI ndermjet d[u] dhe f[u] dhe i ZI me pas. Pseudokodi i meposhtem eshte baza e algoritmit. Grafi ne hyrje mund te jete i orientuar ose jo. Variabli time eshte nje variabel global qe e perdorim per etiketat

87 cdo lak Є cdo lak Є Laku i bardhe u sapo u zbulua cdo lak v Є Eksplorohet harku (u,v) U ngjyroset me ngjyre te zeze: kerkimi perfundoi Fig e meposhtme tregon efektin e ekzekutimit te procedures DFS ne grafin e paorientuar te treguar me pare. Procedura DFS funksionon si me poshte. Rreshtat 1-3 ngjyrosin me ngjyre te bardhe te gjithe laqet dhe inicializojne fushat π te tyre ne NIL. Rreshti 4 rivendos numeratorin globa lte kohes. Ne rreshtat 5-7 kontrrollohet cdo lak ne V dhe kur gjendet nje lak i bardhe vizitohet n.p.rprocedures DFS-Visit. Sa here qe DFS Visit(u) thirret ne rreshtin 6, laku u behet rrenja e pemes se re ne pyllin DFS. Kur DFS perfundon cdo laku u i eshte caktuar nje kohe zbulimi d[u] dhe nje kohe per perfundimin e vizites f[u]. Ne cdo thirrje DFS-Visit(u), laku u eshte fillimisht i bardhe. Rreshti1 ngjyros u ne gri, rreshti 2 rrit me nje veriablin global time, de rreshti3 regjistron vleren e re te time si kohen e zbulimit d[u]. Rreshtat 4-7 ekzaminojne cdo lak v fqinj me u dhe ne menyre rekursive vizitojne v nese ky i fundit eshte i bardhe. Duke qene se cdo lak v Є Adj[u] konsiderohet ne rreshtin 4, themi se harku (u,v) eshte eksploruar nga kerkimi ne thellesi

88 Fig. Efekti i algoritmit te kerkimit ne thellesi DFS ne nje graf te paorientuar. Harqet qe zbulohen jepen me ngjyre gri te hijezuar. Harqet qe nuk bejne pjese ne peme shenohen me B, C ose F ne varesi te faktit nese jami para ne mes apo pas harqeve. Laqet etiketohen n.p.r kohes se zbulimit dhe te perfundimit. Se fundmi pasi eshte eksploruar cdo hark qe del nga u, rreshtat 7-8 ngjyrosin u me ngjyre te zeze dhe regjistrojne kohen e perfundimit te vizites ne f[u]. Koha e ekzekutimit te DFS eshte Θ(V+E). Veti te kerkimit ne thellesi Kerkimi ne thellesi furnizon shume informacione mbi strukturen e nje grafi. Ndoshta vetia me e rendesishme e vizites ne thellesi eshte qe nengrafi i paraardhesve Gπ formon nje pyll me peme, pasi struktura e pemeve DFS pasqyron ne menyre besnike strukturen e thirrjes rekursive DFS-Visit. Qe do te thote, u = π[v] n.q.s dhe vetem n.q.s DFS-Visit(v) thirret gjate kerkimit te listes se fqinjesise se u. Nje veti tjeter e rendesishme eshte qe kohet e zbulimit dhe te perfundimit ne kerkimin ne thellesi kane nje strukture paranteze. Nese paraqesim zbulimin e nje laku u permes nje kllape te majte ( dhe kohen e perfundimit permes nje kllape te djathte ), historiz e zbulimeve dhe perfundimeve formon nje shprehje te mire-formuar pasi kllapat jane te fshehura mire. Psh kerkimi ne thellesi i dhene ne fig(a) te paraqitur me poshte i korrespondon parantezes te treguar ne fig(b). Nje menyre tjeter per te shprehur kete gjendje jepet n.p.r teoremes

89 Ne cdo vizite ne thellesi ne nje graf G=(V,E) (te orientuar ose jo), per cdo cift laqesh u dhe v nje dhe vetem nje nga kushtet e meposhtme mund te kenaqet: Intervalet [d[u], f[u]] dhe [d[v],f[v]] jane teresisht te shkeputur, dhe as u e as v nuk jene pasardhes te njeri-tjetrit ne pyllin DFS, Intervali[d[u],f[u]] permbahet teresisht ne intervalin [d[v],f[v]], dhe u eshte nje pasardhes i v ne pyllin DFS ose Intervali [d[v],f[v]] permbahet plotesisht ne intervalin[d[u],f[u]], dhe v eshte nje pasardhes i u ne pyllin DFS. Fig.(a) Rezultati i kerkimit ne thellesi ne nje graf te orientuar. Laqet shnohen me etiketa te kohes dhe harqet tregohen si ne fig e meparshme.(b)intervalet per kohet e zbulimit dhe perfndimit ne cdo lak qe i korrespondon parantezes se treguar. Cdo drejtkendesh i korrespondon intervalit mes kohes se zbulimit dhe asaj te perfundimit te kerkimit. Harqet e pemes tregohen ne menyre eksplicite. Nese dy intervale kane nje mbivendosje, atehere vendosen siper njeri-tjetrit dhe laku qe i korrespondon intervalit me te vogel eshte nje pasardhes i lakut qe i korrespondon intervali me i madh.(c) Grafi i shfaqur ne fig (a) i ridizenjuar me te gjithe harqet e pemes dhe te gjithe harqet perpara qe shkojne drejt fundit te pemes DFS, dhe te gjithe harqet prapa qe shkojne siper nga nje pasardhesne nje paraardhes

90 Klasifikimi i harqeve Nje veti tjeter interesante e vizites ne thellesi eshte perdorimi i saj per klasifikimin e harqeve te grafit input G = ( V, E ): ky klasifikim mund te perdoret per te perftuar informacione te rendesishme mbi grafin. Psh do te shohim se nje graf i orientuar eshte aciklik nese nje vizite ne thellesi nuk prodhon harqe prapa. Mund te percaktohen kater tipe harqesh ne termat e pyllit Gπ te prodhuar nga nje vizite ne thellesi ne grafin G. 1. Harqet e pemes - jane harqet e pyllit DFS Gπ: nje hark (u,v) eshte nje hark i pemes nese v eshte zbuluar duke eksploruar harkun (u,v). 2. Harqet prapa - jane harqet (u,v) qe permbajne nje hark u ne nje paraardhes v ne nje peme DFS. Laqet ne vetevete konsiderohen si harqe prapa. 3. Harqet perpara -te cilet jane harqet (u,v) qe nuk jane harqe te pemes dhe qe lidhin nje lak u me nje pasardhes v ne nje peme DFS. 4. Harqet nderlidhes - jane te gjithe harqet e mbetur: keto harqe mund te sherbejne per te lidhur laqe ne te njejten peme DFS, me kushtin qe nje lak te mos jete paraardhes i lakut tjeter ose mund te lidhin laqe qe bejne pjese ne pame DFS te ndryshme. Ne dy figurat e dhena me siper harqet jane etiketuar me shkronja (B-prapa, C-kryqezuar dhe F-perpara) per te treguar tipat e tyre. Ne fig (c) te dhene me siper eshte treguar sesi mund te ridizenjohet grafi i dhene ne fig(a) ne menyre te tille qe te gjithe harqet e pemes dhe harqet perpara te shkojne drejt fundit ne nje peme DFS, ndersa te gjithe harqet prapa te shkojne drejt majes: cdo graf mund te ridizenjohet ne kete menyre. Algoritmi DFS mund te modifikohet ne menyre te tille qe te klasifikohen harqet e zbuluar. Ideja baze eshte qe nje hark (u,v) mund te klasifikohet mbi bazen e ngjyres te lakut v qe arrihet kur harku eksplorohet. 1. WHITE tregon qe harku i eksploruar eshte nje hark i pemes 2. GRAY tregon qe eshte nje hark prapa 3. BLACK tregon qe behet fjale per nje hark perpara ose per nje hark nderlidhes. i pare eshte rrjedh nga specifikemet e algoritmit. Per rastin e dyte, vini re se laqet gri formojne gjithmone nje zinxhir linear pasardhesish qe i korrespondojne stives se thirrjeve aktive te DFS-Visit; numri i laqeve gri eshte nje me shume se thellesia ne pyllin DFS te lakut te zbuluar ne fund. Eksplorimi procedon gjithmone duke u nisur nga laku gri me i thelle, si rrjedhim nje hark qe arrin nje lak tjeter gri arrin nje paraardhes. i trete perben munesine e fundit: mund te tregohet qe nje hark i tille (u,v) eshte nje hark perpara nese d[u]<d[v] dhe nje hark nderlidhes nes d[u]>d[v]. Ne nje graf te paorientuar mund te kete ndonje medyshje per klasifikimin e harqeve pasi (u,v) dhe (v,u) jane i njeti hark. Nese te njejtit hark mund ti atribuohen dy tipe te ndryshem, vetia do ti caktohet harkut qe ndeshet i pari. Teoreme Ne nje vizite ne thellesi ne nje graf te paorientuar G, cdo hark i G eshte nje hark i pemes ose nje hark prapa. Vertetim Le te jete (u,v) nje hark cfaredo ne G, dhe supozojme pa humbur pergjithsimin se d[u]<d[v]. Atehere v duhet te zbulohet dhe vizita e tij duhet te perfundoj perpara se te perfundoj vizita e u, pasi v gjendet ne listen e fqinjesise se u. Nese harku (u,v)

91 eksplorohet fillimisht ne drejtimin nga u ne v, atehere (u,v) behet nje hark i pemes; nese (u,v) eksplorohet fillimisht ne drejtimin nga v ne u, atehere (u,v) eshte nje hark prapa sepse u eshte ende gri ne momentin kur harku eksplorohet heren e pare. Pemet me mbulim minimal Gjate projetkimit te qarqeve elektronik shpesh eshte e nevojshme qe pin-et e komponenteve te ndryshem te jene ekuivalnt duke i lidhur mes tyre. Per te lidhur nje bashkesi n pin-esh mund t eperdoret nje sistem me n-1 fije elektrike, ku secila prej tyre lidh dy pin-e: nga te githe keto siteme, sistemi i preferuar eshte ai qe perdor sasine minimale te fijeve elektrike. Ky problem mund te modelohet permes nje grafi te paorientuar te lidhur G=(V,E), ku V eshte bashkesia e pineve, E eshte bashkesia e lidhjeve te mundshme mes cifteve te pineve dhe per cdo hark (u,v)є E kemi nje peshe w(u,v) qe specifikon koston( sasine e fijes elektrike te nevojshme) per te lidhur u dhe v. Duhet te gjendet nje nenbashkesi aciklike T qe perfshihet ne E qe lidh te gjithe laqet ne menyre te tille qe te minimizohet pesha totale Duke qene se T eshte aciklike dhe lidh te gjithe laqet, duhet te formoj nje peme qe quhet peme mbulimi, pasi mbulon grafin G. Problemi i percaktimit te pemes T quhet edhe problemi i pemes me mbulim minimal. Ne fig e meposhtme tregohet nje shembull i nje grafi te lidhur dhe pemes se mbulimit minimal. Fig. Nje peme mbulimi minimal per nje graf te lidhur. Tregohen peshat e harqeve, harqet me ngjyre gri perbejne pemen e kerkimit minimal. Pesha totale e pemes se treguar ne fig eshte 37. Kjo peme nuk eshte unike: duke hequr harkun (b,c) dhe duke zevendesuar ate me harkun(a,h) perftohet nje peme e re e kerkimit minimal me peshe 37. Do te shohim dy algoritma per zgjidhjen e ketij problemi algoritmin Kruskal dhe ate Prim. Ndertimi i nje peme mbulimi minimal Supozojme se eshte dhene nje graf i paorientuar i lidhur G=(V,E) me nje funksion peshe w: E R, dhe qe duam te gjejme nje peme kerkimi minimal per G. Strategjia e perdorur eshte ajo greedy, qe rrit pemen e mbulimit me nje hark per cdo hap. Algoritmi menaxhon nje bashkesi A qe eshte gjithmone nje nenbashkesi e nje peme mbulimi minimale cfaredo. Ne cdo hap percaktohet nje hark qe mund ti shtohet A pa shkelur kete veti te pandryshueshme. Nje harke i tille quhet nje hark i sigurte per A, pasi mund ti shtohet A pa shkelur vetine. * peme mbulimi minimale- minimum spanning tree MST

Algoritmet dhe struktura e të dhënave

Algoritmet dhe struktura e të dhënave Universiteti i Prishtinës Fakulteti i Inxhinierisë Elektrike dhe Kompjuterike Algoritmet dhe struktura e të dhënave Vehbi Neziri FIEK, Prishtinë 2015/2016 Java 5 vehbineziri.com 2 Algoritmet Hyrje Klasifikimi

Διαβάστε περισσότερα

PASQYRIMET (FUNKSIONET)

PASQYRIMET (FUNKSIONET) PASQYRIMET (FUNKSIONET) 1. Përkufizimi i pasqyrimit (funksionit) Përkufizimi 1.1. Le të jenë S, T bashkësi të dhëna. Funksion ose pasqyrim nga S në T quhet rregulla sipas së cilës çdo elementi s S i shoqëronhet

Διαβάστε περισσότερα

paraqesin relacion binar të bashkësisë A në bashkësinë B? Prandaj, meqë X A B dhe Y A B,

paraqesin relacion binar të bashkësisë A në bashkësinë B? Prandaj, meqë X A B dhe Y A B, Përkufizimi. Le të jenë A, B dy bashkësi të çfarëdoshme. Çdo nënbashkësi e bashkësisë A B është relacion binar i bashkësisë A në bashkësinë B. Simbolikisht relacionin do ta shënojmë me. Shembulli. Le të

Διαβάστε περισσότερα

Ligji I Ohmit Gjatë rrjedhës së rrymës nëpër përcjellës paraqitet. rezistenca. Georg Simon Ohm ka konstatuar

Ligji I Ohmit Gjatë rrjedhës së rrymës nëpër përcjellës paraqitet. rezistenca. Georg Simon Ohm ka konstatuar Rezistenca elektrike Ligji I Ohmit Gjatë rrjedhës së rrymës nëpër përcjellës paraqitet rezistenca. Georg Simon Ohm ka konstatuar varësinë e ndryshimit të potencialit U në skajët e përcjellësit metalik

Διαβάστε περισσότερα

Analiza e regresionit të thjeshtë linear

Analiza e regresionit të thjeshtë linear Analiza e regresionit të thjeshtë linear 11-1 Kapitulli 11 Analiza e regresionit të thjeshtë linear 11- Regresioni i thjeshtë linear 11-3 11.1 Modeli i regresionit të thjeshtë linear 11. Vlerësimet pikësore

Διαβάστε περισσότερα

Nyjet, Deget, Konturet

Nyjet, Deget, Konturet Nyjet, Deget, Konturet Meqenese elementet ne nje qark elektrik mund te nderlidhen ne menyra te ndryshme, nevojitet te kuptojme disa koncepte baze te topologjise se rrjetit. Per te diferencuar nje qark

Διαβάστε περισσότερα

Kapitulli. Programimi linear i plote

Kapitulli. Programimi linear i plote Kapitulli Programimi linear i plote 1-Hyrje Për të gjetur një zgjidhje optimale brenda një bashkesie zgjidhjesh të mundshme, një algoritëm duhet të përmbajë një strategji kërkimi të zgjidhjeve dhe një

Διαβάστε περισσότερα

Metodat e Analizes se Qarqeve

Metodat e Analizes se Qarqeve Metodat e Analizes se Qarqeve Der tani kemi shqyrtuar metoda për analizën e qarqeve të thjeshta, të cilat mund të përshkruhen tërësisht me anën e një ekuacioni të vetëm. Analiza e qarqeve më të përgjithshëm

Διαβάστε περισσότερα

Tregu i tët. mirave dhe kurba IS. Kurba ose grafiku IS paraqet kombinimet e normave tët interesit dhe nivelet e produktit tët.

Tregu i tët. mirave dhe kurba IS. Kurba ose grafiku IS paraqet kombinimet e normave tët interesit dhe nivelet e produktit tët. Modeli IS LM Të ardhurat Kështu që, modeli IS LM paraqet raportin në mes pjesës reale dhe monetare të ekonomisë. Tregjet e aktiveve Tregu i mallrave Tregu monetar Tregu i obligacioneve Kërkesa agregate

Διαβάστε περισσότερα

KSF 2018 Student, Klasa 11 12

KSF 2018 Student, Klasa 11 12 Problema me 3 pikë # 1. Figura e e mëposhtme paraqet kalendarin e një muaji të vitit. Për fat të keq, mbi të ka rënë bojë dhe shumica e datave të tij nuk mund të shihen. Cila ditë e javës është data 27

Διαβάστε περισσότερα

Shtrohet pyetja. A ekziston formula e përgjithshme për të caktuar numrin e n-të të thjeshtë?

Shtrohet pyetja. A ekziston formula e përgjithshme për të caktuar numrin e n-të të thjeshtë? KAPITULLI II. NUMRAT E THJESHTË Më parë pamë se p.sh. numri 7 plotpjesëtohet me 3 dhe me 9 (uptohet se çdo numër plotpjesëtohet me dhe me vetvetën). Shtrohet pyetja: me cilët numra plotpjesëtohet numri

Διαβάστε περισσότερα

Q k. E = 4 πε a. Q s = C. = 4 πε a. j s. E + Qk + + k 4 πε a KAPACITETI ELEKTRIK. Kapaciteti i trupit të vetmuar j =

Q k. E = 4 πε a. Q s = C. = 4 πε a. j s. E + Qk + + k 4 πε a KAPACITETI ELEKTRIK. Kapaciteti i trupit të vetmuar j = UNIVERSIEI I PRISHINËS KAPACIEI ELEKRIK Kapaciteti i trupit të vetmuar Kapaciteti i sferës së vetmuar + + + + Q k s 2 E = 4 πε a v 0 fusha në sipërfaqe të sferës E + Qk + + + + j = Q + s + 0 + k 4 πε a

Διαβάστε περισσότερα

Fluksi i vektorit të intenzitetit të fushës elektrike v. intenzitetin të barabartë me sipërfaqen të cilën e mberthejnë faktorët

Fluksi i vektorit të intenzitetit të fushës elektrike v. intenzitetin të barabartë me sipërfaqen të cilën e mberthejnë faktorët Ligji I Gauss-it Fluksi i ektorit të intenzitetit të fushës elektrike Prodhimi ektorial është një ektor i cili e ka: drejtimin normal mbi dy faktorët e prodhimit, dhe intenzitetin të barabartë me sipërfaqen

Διαβάστε περισσότερα

Testimi i hipotezave/kontrollimi i hipotezave Mostra e madhe

Testimi i hipotezave/kontrollimi i hipotezave Mostra e madhe Testimi i hipotezave/kontrollimi i hipotezave Mostra e madhe Ligjërata e tetë 1 Testimi i hipotezave/mostra e madhe Qëllimet Pas orës së mësimit ju duhet ë jeni në gjendje që të: Definoni termet: hipotezë

Διαβάστε περισσότερα

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA QENDRORE E VLERËSIMIT TË ARRITJEVE TË NXËNËSVE PROVIMI I MATURËS SHTETËRORE 2008

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA QENDRORE E VLERËSIMIT TË ARRITJEVE TË NXËNËSVE PROVIMI I MATURËS SHTETËRORE 2008 KUJDES! MOS DËMTO BARKODIN Matematikë Sesioni I BARKODI REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA QENDRORE E VLERËSIMIT TË ARRITJEVE TË NXËNËSVE PROVIMI I MATURËS SHTETËRORE 008

Διαβάστε περισσότερα

AISHE HAJREDINI (KARAJ), KRISTAQ LULA. Kimia Inorganike. TESTE TË ZGJIDHURA Të maturës shtetërore

AISHE HAJREDINI (KARAJ), KRISTAQ LULA. Kimia Inorganike. TESTE TË ZGJIDHURA Të maturës shtetërore AISHE HAJREDINI (KARAJ), KRISTAQ LULA Kimia Inorganike TESTE TË ZGJIDHURA Të maturës shtetërore AISHE HAJREDINI (KARAJ), KRISTAQ LULA TESTE TË MATURËS SHTETËRORE Kimia inorganike S H T Ë P I A B O T U

Διαβάστε περισσότερα

NDËRTIMI DHE PËRMBAJTJA E PUNIMIT

NDËRTIMI DHE PËRMBAJTJA E PUNIMIT NDËRTIMI DHE PËRMBAJTJA E PUNIMIT Punimi monografik Vështrim morfo sintaksor i parafjalëve të gjuhës së re greke në krahasim me parafjalët e gjuhës shqipe është konceptuar në shtatë kapituj, të paraprirë

Διαβάστε περισσότερα

Universiteti i Prishtinës Fakulteti i Inxhinierisë Elektrike dhe Kompjuterike. Agni H. Dika

Universiteti i Prishtinës Fakulteti i Inxhinierisë Elektrike dhe Kompjuterike. Agni H. Dika Universiteti i Prishtinës Fakulteti i Inxhinierisë Elektrike dhe Kompjuterike Agni H. Dika Prishtinë 007 Libri të cilin e keni në dorë së pari u dedikohet studentëve të Fakultetit të Inxhinierisë Elektrike

Διαβάστε περισσότερα

DELEGATET DHE ZBATIMI I TYRE NE KOMPONETE

DELEGATET DHE ZBATIMI I TYRE NE KOMPONETE DELEGATET DHE ZBATIMI I TYRE NE KOMPONETE KAPITULLI 5 Prof. Ass. Dr. Isak Shabani 1 Delegatët Delegati është tip me referencë i cili përdorë metoda si të dhëna. Përdorimi i zakonshëm i delegatëve është

Διαβάστε περισσότερα

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2011

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2011 KUJDES! MOS DËMTO BARKODIN BARKODI REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2011 S E S I O N I II LËNDA: KIMI VARIANTI

Διαβάστε περισσότερα

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2011

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2011 KUJDES! MOS DËMTO BARKODIN BARKODI REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2011 S E S I O N I II LËNDA: KIMI VARIANTI

Διαβάστε περισσότερα

KSF 2018 Cadet, Klasa 7 8 (A) 18 (B) 19 (C) 20 (D) 34 (E) 36

KSF 2018 Cadet, Klasa 7 8 (A) 18 (B) 19 (C) 20 (D) 34 (E) 36 Problema me 3 pië # 1. Sa është vlera e shprehjes (20 + 18) : (20 18)? (A) 18 (B) 19 (C) 20 (D) 34 (E) 36 # 2. Në qoftë se shkronjat e fjalës MAMA i shkruajmë verikalisht njëra mbi tjetrën fjala ka një

Διαβάστε περισσότερα

BAZAT E INFRASTRUKTURES NË KOMUNIKACION

BAZAT E INFRASTRUKTURES NË KOMUNIKACION MANUALI NË LËNDEN: BAZAT E INFRASTRUKTURES NË KOMUNIKACION Prishtinë,0 DETYRA : Shtrirja e trasesë së rrugës. Llogaritja e shkallës, tangjentës, dhe sekondit: 6 0 0 0.67 6 6. 0 0 0. 067 60 600 60 600 60

Διαβάστε περισσότερα

ALGJEBËR II Q. R. GASHI

ALGJEBËR II Q. R. GASHI ALGJEBËR II Q. R. GASHI Shënim: Këto ligjërata janë të paredaktuara, të palekturuara dhe vetëm një verzion fillestar i (ndoshta) një teksti të mëvonshëm. Ato nuk e reflektojnë detyrimisht materien që e

Διαβάστε περισσότερα

Α ί τ η σ η Δ ή λ ω σ η σ υ μ μ ε τ ο χ ή ς

Α ί τ η σ η Δ ή λ ω σ η σ υ μ μ ε τ ο χ ή ς ΟΡΘΟΔΟΞΟΣ ΑΥΤΟΚΕΦΑΛΟΣ ΕΚΚΛΗΣΙΑ ΑΛΒΑΝΙΑΣ ΙΕΡΑ ΜΗΤΡΟΠΟΛΙΣ ΑΡΓΥΡΟΚΑΣΤΡΟΥ ΚΑΤΑΣΚΗΝΩΣΗ «Μ Ε Τ Α Μ Ο Ρ Φ Ω Σ Η» Γ Λ Υ Κ Ο Μ Ι Λ Ι Δ Ρ Ο Π Ο Λ Η Σ Α ί τ η σ η Δ ή λ ω σ η σ υ μ μ ε τ ο χ ή ς Πόλη ή Χωριό Σας

Διαβάστε περισσότερα

Definimi i funksionit . Thirrja e funksionit

Definimi i funksionit . Thirrja e funksionit Definimi i funksionit Funksioni ngërthen ne vete një grup te urdhrave te cilat i ekzekuton me rastin e thirrjes se tij nga një pjese e caktuar e programit. Forma e përgjithshme e funksionit është: tipi

Διαβάστε περισσότερα

PËRMBLEDHJE DETYRASH PËR PËRGATITJE PËR OLIMPIADA TË MATEMATIKËS

PËRMBLEDHJE DETYRASH PËR PËRGATITJE PËR OLIMPIADA TË MATEMATIKËS SHOQATA E MATEMATIKANËVE TË KOSOVËS PËRMBLEDHJE DETYRASH PËR PËRGATITJE PËR OLIMPIADA TË MATEMATIKËS Kls 9 Armend Sh Shbni Prishtinë, 009 Bshkësitë numerike Të vërtetohet se numri 004 005 006 007 + është

Διαβάστε περισσότερα

Teori Grafesh. E zëmë se na është dhënë një bashkësi segmentesh mbi drejtëzën reale që po e shënojmë:

Teori Grafesh. E zëmë se na është dhënë një bashkësi segmentesh mbi drejtëzën reale që po e shënojmë: Teori Grafesh Teori grafesh bitbit.uni.cc 1.1 Koncepti i grafit dhe disa nocione shoqeruese Shpeshherë për të lehtësuar veten ne shtrimin dhe analizën e mjaft problemeve që dalin në veprimtarinë tonë,

Διαβάστε περισσότερα

Analiza e qarqeve duke përdorur ligjet Kirchhoff ka avantazhin e madh se ne mund të analizojme një qark pa ngacmuar konfigurimin e tij origjinal.

Analiza e qarqeve duke përdorur ligjet Kirchhoff ka avantazhin e madh se ne mund të analizojme një qark pa ngacmuar konfigurimin e tij origjinal. Analiza e qarqeve duke përdorur ligjet Kirchhoff ka avantazhin e madh se ne mund të analizojme një qark pa ngacmuar konfigurimin e tij origjinal. Disavantazh i kësaj metode është se llogaritja është e

Διαβάστε περισσότερα

ELEKTROSTATIKA. Fusha elektrostatike eshte rast i vecante i fushes elektromagnetike.

ELEKTROSTATIKA. Fusha elektrostatike eshte rast i vecante i fushes elektromagnetike. ELEKTROSTATIKA Fusha elektrostatike eshte rast i vecante i fushes elektromagnetike. Ajo vihet ne dukje ne hapesiren rrethuese te nje trupi ose te nje sistemi trupash te ngarkuar elektrikisht, te palevizshem

Διαβάστε περισσότερα

Cilat nga bashkësitë = {(1, ), (1, ), (2, )},

Cilat nga bashkësitë = {(1, ), (1, ), (2, )}, RELACIONET. RELACIONI BINAR Përkufizimi. Le të jenë A, B dy bashkësi të çfarëdoshme. Çdo nënbashkësi e bashkësisë A B është relacion binar i bashkësisë A në bashkësinë B. Simbolikisht relacionin do ta

Διαβάστε περισσότερα

Rikardo dhe modeli standard i tregtisë ndërkombëtare. Fakulteti Ekonomik, Universiteti i Prishtinës

Rikardo dhe modeli standard i tregtisë ndërkombëtare. Fakulteti Ekonomik, Universiteti i Prishtinës Rikardo dhe modeli standard i tregtisë ndërkombëtare Fakulteti Ekonomik, Universiteti i Prishtinës Hyrje Teoritë e tregtisë ndërkombëtare; Modeli i Rikardos; Modeli standard i tregtisë ndërkombëtare. Teoritë

Διαβάστε περισσότερα

QARQET ME DIODA 3.1 DREJTUESI I GJYSMËVALËS. 64 Myzafere Limani, Qamil Kabashi ELEKTRONIKA

QARQET ME DIODA 3.1 DREJTUESI I GJYSMËVALËS. 64 Myzafere Limani, Qamil Kabashi ELEKTRONIKA 64 Myzafere Limani, Qamil Kabashi ELEKTRONKA QARQET ME DODA 3.1 DREJTUES GJYSMËVALËS Analiza e diodës tani do të zgjerohet me funksione të ndryshueshme kohore siç janë forma valore sinusoidale dhe vala

Διαβάστε περισσότερα

Lënda: Mikroekonomia I. Kostoja. Msc. Besart Hajrizi

Lënda: Mikroekonomia I. Kostoja. Msc. Besart Hajrizi Lënda: Mikroekonomia I Kostoja Msc. Besart Hajrizi 1 Nga funksioni i prodhimit në kurbat e kostove Shpenzimet monetare të cilat i bën firma për inputet fikse (makineritë, paisjet, ndërtesat, depot, toka

Διαβάστε περισσότερα

Detyra për ushtrime PJESA 4

Detyra për ushtrime PJESA 4 0 Detyr për ushtrime të pvrur g lëd ANALIZA MATEMATIKE I VARGJET NUMERIKE Detyr për ushtrime PJESA 4 3 Të jehsohet lim 4 3 ( ) Të tregohet se vrgu + + uk kovergjo 3 Le të jeë,,, k umr relë joegtivë Të

Διαβάστε περισσότερα

Njësitë e matjes së fushës magnetike T mund të rrjedhin për shembull nga shprehjen e forcës së Lorencit: m. C m

Njësitë e matjes së fushës magnetike T mund të rrjedhin për shembull nga shprehjen e forcës së Lorencit: m. C m PYETJE n.. - PËRGJIGJE B Duke qenë burimi isotrop, për ruajtjen e energjisë, energjia është e shpërndarë në mënyrë uniforme në një sipërfaqe sferike me qendër në burim. Intensiteti i dritës që arrin në

Διαβάστε περισσότερα

Olimpiada italiane kombëtare e fizikës, faza e pare Dhjetor 2017

Olimpiada italiane kombëtare e fizikës, faza e pare Dhjetor 2017 Olimpiada italiane kombëtare e fizikës, faza e pare Dhjetor 2017 UDHËZIME: 1. Ju prezantoheni me një pyetësor i përbërë nga 40 pyetje; për secilën pyetje Sugjerohen 5 përgjigje, të shënuara me shkronjat

Διαβάστε περισσότερα

Definimi dhe testimi i hipotezave

Definimi dhe testimi i hipotezave (Master) Ligjerata 2 Metodologjia hulumtuese Definimi dhe testimi i hipotezave Prof.asc. Avdullah Hoti 1 1 Përmbajtja dhe literatura Përmbajtja 1. Definimi i hipotezave 2. Testimi i hipotezave përmes shembujve

Διαβάστε περισσότερα

Treguesit e dispersionit/shpërndarjes/variacionit

Treguesit e dispersionit/shpërndarjes/variacionit Treguesit e dispersionit/shpërndarjes/variacionit Qëllimet: Në fund të orës së mësimit, ju duhet të jeni në gjendje që të : Dini rëndësinë e treguesve të dispersionit dhe pse përdoren ata. Llogaritni dhe

Διαβάστε περισσότερα

MATEMATIKË KONTROLLIMI EKSTERN I DIJES SË NXËNËSVE NË FUND TË CIKLIT TË TRETË TË SHKOLLËS FILLORE VITIT MËSIMOR 2012/2013 UDHËZIM

MATEMATIKË KONTROLLIMI EKSTERN I DIJES SË NXËNËSVE NË FUND TË CIKLIT TË TRETË TË SHKOLLËS FILLORE VITIT MËSIMOR 2012/2013 UDHËZIM MATEMATIKË KONTROLLIMI EKSTERN I DIJES SË NXËNËSVE NË FUND TË CIKLIT TË TRETË TË SHKOLLËS FILLORE VITIT MËSIMOR 2012/2013 UDHËZIM Mjetet e punës: lapsi grafit dhe goma, lapsi kimik, veglat gjeometrike.

Διαβάστε περισσότερα

Kapitulli 1 Hyrje në Analizën Matematike 1

Kapitulli 1 Hyrje në Analizën Matematike 1 Përmbajtja Parathënie iii Kapitulli 1 Hyrje në Analizën Matematike 1 1.1. Përsëritje të njohurive nga shkolla e mesme për bashkësitë, numrat reale dhe funksionet 1 1.1.1 Bashkësitë 1 1.1.2 Simbole të logjikës

Διαβάστε περισσότερα

Ngjeshmëria e dherave

Ngjeshmëria e dherave Ngjeshmëria e dherave Hyrje Në ndërtimin e objekteve inxhinierike me mbushje dheu, si për shembull diga, argjinatura rrugore etj, kriteret projektuese përcaktojnë një shkallë të caktuar ngjeshmërie të

Διαβάστε περισσότερα

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE SHKENCËS INSTITUTI I ZHVILLIMIT TË ARSIMIT

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE SHKENCËS INSTITUTI I ZHVILLIMIT TË ARSIMIT REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE SHKENCËS INSTITUTI I ZHVILLIMIT TË ARSIMIT PROGRAM ORIENTUES PËR PËRGATITJEN E PROVIMIT KOMBËTAR TË MATURËS SHTETËRORE LËNDA: GJUHA GREKE (gjuhë e huaj e

Διαβάστε περισσότερα

II. MEKANIKA. FIZIKA I Rrahim MUSLIU ing.dipl.mek. 1

II. MEKANIKA. FIZIKA I Rrahim MUSLIU ing.dipl.mek. 1 II.1. Lëvizja mekanike Mekanika është pjesë e fizikës e cila i studion format më të thjeshta të lëvizjes së materies, të cilat bazohen në zhvendosjen e thjeshtë ose kalimin e trupave fizikë prej një pozite

Διαβάστε περισσότερα

Qark Elektrik. Ne inxhinierine elektrike, shpesh jemi te interesuar te transferojme energji nga nje pike ne nje tjeter.

Qark Elektrik. Ne inxhinierine elektrike, shpesh jemi te interesuar te transferojme energji nga nje pike ne nje tjeter. Qark Elektrik Ne inxhinierine elektrike, shpesh jemi te interesuar te transferojme energji nga nje pike ne nje tjeter. Per te bere kete kerkohet nje bashkekomunikim ( nderlidhje) ndermjet pajisjeve elektrike.

Διαβάστε περισσότερα

2 Marim në konsiderate ciklet termodinamike të paraqitura në planin V p. Në cilin cikël është më e madhe nxehtësia që shkëmbehet me mjedisin?

2 Marim në konsiderate ciklet termodinamike të paraqitura në planin V p. Në cilin cikël është më e madhe nxehtësia që shkëmbehet me mjedisin? 1 Një automobile me një shpejtësi 58km/h përshpejtohet deri në shpejtësinë 72km/h për 1.9s. Sa do të jetë nxitimi mesatar i automobilit? A 0.11 m s 2 B 0.22 m s 2 C 2.0 m s 2 D 4.9 m s 2 E 9.8 m s 2 2

Διαβάστε περισσότερα

Analiza e Regresionit dhe Korrelacionit

Analiza e Regresionit dhe Korrelacionit 1-1 Analiza e Regresionit dhe Korrelacionit Qëllimet: Në fund të orës së mësimit, ju duhet të jeni në gjendje që të : Kuptoni rolin dhe rëndësinë e analizës së regresionit dhe korrelacionit si dhe dallimet

Διαβάστε περισσότερα

Bazat e Programimit në C++

Bazat e Programimit në C++ Universiteti i Europës Juglindore Fakulteti i Shkencave dhe i Teknologjive të Komunikimit Agni Dika Bazat e Programimit në C++ 2005 U lejua për botim nga Komisioni për Botime pranë Universitetit të Europës

Διαβάστε περισσότερα

UNIVERSITETI I GJAKOVËS FEHMI AGANI FAKULTETI I EDUKIMIT PROGRAMI PARASHKOLLOR PUNIM DIPLOME

UNIVERSITETI I GJAKOVËS FEHMI AGANI FAKULTETI I EDUKIMIT PROGRAMI PARASHKOLLOR PUNIM DIPLOME UNIVERSITETI I GJAKOVËS FEHMI AGANI FAKULTETI I EDUKIMIT PROGRAMI PARASHKOLLOR PUNIM DIPLOME ZHVILLIMI DHE FORMIMI I NJOHURIVE FILLESTARE TEK FËMIJËT E MOSHËS PARASHKOLLORE MBI BASHKËSITË Mentori: Prof.

Διαβάστε περισσότερα

Gërmimi i dataset-ave masivë. përmbledhje informative

Gërmimi i dataset-ave masivë. përmbledhje informative Gërmimi i dataset-ave masivë përmbledhje informative zgjodhi dhe përktheu Ridvan Bunjaku Mars 2017 Përmbajtja Parathënie... 3 1. Data mining... 4 2. MapReduce... 6 3. Gjetja e elementeve të ngjashme...

Διαβάστε περισσότερα

III. FUSHA MAGNETIKE. FIZIKA II Rrahim MUSLIU ing.dipl.mek. 1

III. FUSHA MAGNETIKE. FIZIKA II Rrahim MUSLIU ing.dipl.mek. 1 III.1. Fusha magnetike e magnetit të përhershëm Nëse në afërsi të magnetit vendosim një trup prej metali, çeliku, kobalti ose nikeli, magneti do ta tërheq trupin dhe ato do të ngjiten njëra me tjetrën.

Διαβάστε περισσότερα

Mbledhja: Rregullat e mbledhjes binare pёrmblidhen nё tabelёn 1:

Mbledhja: Rregullat e mbledhjes binare pёrmblidhen nё tabelёn 1: 1. Sistemet Numerike Sistem numerik ёshtё ai sistem ku informacioni paraqitet me anё tё njё madhёsie fizike qё mund tё marrё vetёm vlera diskrete. Secila nga kёto vlera mund tё konsiderohet si njё numёr

Διαβάστε περισσότερα

Kolegji - Universiteti për Biznes dhe Teknologji Fakultetit i Shkencave Kompjuterike dhe Inxhinierisë. Lënda: Bazat Teknike të informatikës - BTI

Kolegji - Universiteti për Biznes dhe Teknologji Fakultetit i Shkencave Kompjuterike dhe Inxhinierisë. Lënda: Bazat Teknike të informatikës - BTI Kolegji - Universiteti për Biznes dhe Teknologji Fakultetit i Shkencave Kompjuterike dhe Inxhinierisë Lënda: Bazat Teknike të informatikës - BTI Dispensë Ligjërues: Selman Haxhijaha Luan Gashi Viti Akademik

Διαβάστε περισσότερα

Përpjesa e kundërt e përpjesës a :b është: Mesi gjeometrik x i segmenteve m dhe n është: Për dy figura gjeometrike që kanë krejtësisht formë të njejtë, e madhësi të ndryshme ose të njëjta themi se janë

Διαβάστε περισσότερα

Propozim për strukturën e re tarifore

Propozim për strukturën e re tarifore Propozim për strukturën e re tarifore (Tarifat e energjisë elektrike me pakicë) DEKLARATË Ky dokument është përgatitur nga ZRRE me qëllim të informimit të palëve të interesuara. Propozimet në këtë raport

Διαβάστε περισσότερα

SI TË BËHENI NËNSHTETAS GREK? (Udhëzime të thjeshtuara rreth marrjes së nënshtetësisë greke)*

SI TË BËHENI NËNSHTETAS GREK? (Udhëzime të thjeshtuara rreth marrjes së nënshtetësisë greke)* SI TË BËHENI NËNSHTETAS GREK? (Udhëzime të thjeshtuara rreth marrjes së nënshtetësisë e)* KUSH NUK MUND TË Për shtetasit e vendeve jashtë BEsë Ata që nuk kanë leje qëndrimi ose kanë vetëm leje të përkohshme

Διαβάστε περισσότερα

Libër mësuesi Matematika

Libër mësuesi Matematika Libër mësuesi Nikolla Perdhiku Libër mësuesi Matematika 7 Për klasën e 7 -të të shkollës 9-vjeçare Botime shkollore Albas 1 Libër mësuesi për tekstin Matematika 7 Botues: Latif AJRULLAI Rita PETRO Redaktore

Διαβάστε περισσότερα

Teste EDLIRA ÇUPI SERVETE CENALLA

Teste EDLIRA ÇUPI SERVETE CENALLA Teste EDLIRA ÇUPI SERVETE CENALLA Matematika gjithmonë me ju 1 Botimet shkollore Albas 1 Test përmbledhës për kapitullin I 1. Lidh me vijë fi gurën me ngjyrën. Ngjyros. (6 pikë) E VERDHË E KUQE E KALTËR

Διαβάστε περισσότερα

Studim i Sistemeve të Thjeshta me Fërkim në Kuadrin e Mekanikës Kuantike

Studim i Sistemeve të Thjeshta me Fërkim në Kuadrin e Mekanikës Kuantike Studim i Sistemeve të Thjeshta me Fërkim në Kuadrin e Mekanikës Kuantike Puna e Diplomës paraqitur në Departamentin e Fizikës Teorike Universiteti i Tiranës nga Dorian Kçira udhëheqës Prof. H. D. Dahmen

Διαβάστε περισσότερα

Indukcioni elektromagnetik

Indukcioni elektromagnetik Shufra pingul mbi ijat e fushës magnetike Indukcioni elektromagnetik Indukcioni elektromagnetik në shufrën përçuese e cila lëizë në fushën magnetike ijat e fushës magnetike homogjene Bazat e elektroteknikës

Διαβάστε περισσότερα

Ministria e Arsimit, Shkencës dhe Teknologjisë Ministarstvo Obrazovanja, Nauke i Tehnologije Ministry of Education, Science and Technology

Ministria e Arsimit, Shkencës dhe Teknologjisë Ministarstvo Obrazovanja, Nauke i Tehnologije Ministry of Education, Science and Technology Ministria e Arsimit, Shkencës dhe Teknologjisë Ministarstvo Obrazovanja, Nauke i Tehnologije Ministry of Education, Science and Technology Autor: Dr.sc. Qamil Haxhibeqiri, Mr.sc. Melinda Mula, Mr.sc. Ramadan

Διαβάστε περισσότερα

Teste matematike 6. Teste matematike. Botimet shkollore Albas

Teste matematike 6. Teste matematike. Botimet shkollore Albas Teste matematike 6 Botimet shkollore Albas 1 2 Teste matematike 6 Hyrje Në materiali e paraqitur janë dhënë dy lloj testesh për lëndën e Matematikës për klasën VI: 1. teste me alternativa, 2. teste të

Διαβάστε περισσότερα

VENDIM Nr.803, date PER MIRATIMIN E NORMAVE TE CILESISE SE AJRIT

VENDIM Nr.803, date PER MIRATIMIN E NORMAVE TE CILESISE SE AJRIT VENDIM Nr.803, date 4.12.2003 PER MIRATIMIN E NORMAVE TE CILESISE SE AJRIT Ne mbështetje te nenit 100 te Kushtetutës dhe te nenit 5 te ligjit nr.8897, date 16.5.2002 "Për mbrojtjen e ajrit nga ndotja",

Διαβάστε περισσότερα

Eλληνικά για σας A0 ανάγνωση - γραφή - προφορά - τονισμός. Gjuha greke për ju A0 lëxim - shkrim - shqiptim - theksim

Eλληνικά για σας A0 ανάγνωση - γραφή - προφορά - τονισμός. Gjuha greke për ju A0 lëxim - shkrim - shqiptim - theksim intro_alb_final 5/18/12 7:56 PM Page 3 Eλληνικά για σας A0 ανάγνωση - γραφή - προφορά - τονισμός Gjuha greke për ju A0 lëxim - shkrim - shqiptim - theksim ΒΙΒΛΙΟ Α0 τελείως αρχάριοι Δίγλωσση έκδοση ελληνικά

Διαβάστε περισσότερα

Skripta e Kursit: Algjebra Elementare, Kalkulusi dhe Matematika Financiare, dhe Statistika Përshkruese Vëll. 1: Algjebra Elementare Edicioni i 3 të

Skripta e Kursit: Algjebra Elementare, Kalkulusi dhe Matematika Financiare, dhe Statistika Përshkruese Vëll. 1: Algjebra Elementare Edicioni i 3 të Skripta e Kursit: Algjebra Elementare, Kalkulusi dhe Matematika Financiare, dhe Statistika Përshkruese Vëll. : Algjebra Elementare Edicioni i të nga Prof. Dr. Dietrich Ohse përkthyer nga. Mas. sc. Armend

Διαβάστε περισσότερα

Distanca gjer te yjet, dritësia dhe madhësia absolute e tyre

Distanca gjer te yjet, dritësia dhe madhësia absolute e tyre Distanca gjer te yjet, dritësia dhe madhësia absolute e tyre Mr. Sahudin M. Hysenaj 24 shkurt 2009 Përmbledhje Madhësia e dukshme e yjeve (m) karakterizon ndriçimin që vjen nga yjet mbi sipërfaqen e Tokës.

Διαβάστε περισσότερα

Qëllimet: Në fund të orës së mësimit ju duhet të jeni në gjendje që të:

Qëllimet: Në fund të orës së mësimit ju duhet të jeni në gjendje që të: Analiza statistikore Metodat e zgjedhjes së mostrës 1 Metodat e zgjedhjes së mostrës Qëllimet: Në fund të orës së mësimit ju duhet të jeni në gjendje që të: Kuptoni pse në shumicën e rasteve vrojtimi me

Διαβάστε περισσότερα

SOFTWARE-T APLIKATIVE LËNDË ZGJEDHORE: FAKULTETI I INXHINIERISË MEKANIKE VITI I PARË, SEMESTRI I PARË

SOFTWARE-T APLIKATIVE LËNDË ZGJEDHORE: FAKULTETI I INXHINIERISË MEKANIKE VITI I PARË, SEMESTRI I PARË Dr. sc. Ahmet SHALA SOFTWARE-T APLIKATIVE LËNDË ZGJEDHORE: FAKULTETI I INXHINIERISË MEKANIKE VITI I PARË, SEMESTRI I PARË PRISHTINË, 2004-2010 Dr. sc. Ahmet SHALA PARATHËNIE Programe që mund të i shfrytëzojmë

Διαβάστε περισσότερα

Teste matematike. Teste matematike. Miranda Mete. Botime shkollore Albas

Teste matematike. Teste matematike. Miranda Mete. Botime shkollore Albas Teste matematike Miranda Mete 9 Botime shkollore Albas Test përmbledhës Kapitulli I - Kuptimi i numrit Mësimet: - 8 Grupi A. Shkruaj si thyesa numrat dhjetorë të mëposhtëm. ( + + pikë) a) 0,5 = ---------

Διαβάστε περισσότερα

Klasa 2 dhe 3 KENGUR 2014

Klasa 2 dhe 3 KENGUR 2014 Gara ndërkombëtare Kengur viti 014 Klasa dhe 3 KENGUR 014 Çdo detyrë me numër rendor nga 1 deri në 10 vlerësohet me 10 pikë Koha në disponim për zgjidhje është 1h e 15 min Për përgjigje të gabuar të një

Διαβάστε περισσότερα

REPUBLIKA E KOSOVËS REPUBLIKA KOSOVO REPUBLIC OF KOSOVA QEVERIA E KOSOVËS - VLADA KOSOVA - GOVERNMENT OF KOSOVA

REPUBLIKA E KOSOVËS REPUBLIKA KOSOVO REPUBLIC OF KOSOVA QEVERIA E KOSOVËS - VLADA KOSOVA - GOVERNMENT OF KOSOVA REPUBLIK E KOSOVËS REPUBLIK KOSOVO REPUBLIC OF KOSOV QEVERI E KOSOVËS - VLD KOSOV - GOVERNMENT OF KOSOV MINISTRI E RSIMIT E MINISTRSTVO OBRZOVNJ MINISTRY OF EDUCTION SHKENCËS DHE E TEKNOLOGJISË NUKE I

Διαβάστε περισσότερα

Llogaritja e normës së interesit (NI ose vetem i)

Llogaritja e normës së interesit (NI ose vetem i) Norma e interesit Rëndësia e normës së interesit për individin, biznesin dhe për shoqërine në përgjithësi Cka me të vërtetë nënkupton norma e interesit-me normë të interesit nënkuptojmë konceptin në ekonominë

Διαβάστε περισσότερα

2.1 Kontrolli i vazhdueshëm (Kv)

2.1 Kontrolli i vazhdueshëm (Kv) Aneks Nr 2 e rregullores 1 Vlerësimi i cilësisë së dijeve te studentët dhe standardet përkatëse 1 Sistemi i diferencuar i vlerësimit të cilësisë së dijeve të studentëve 1.1. Për kontrollin dhe vlerësimin

Διαβάστε περισσότερα

PROVIMI ME ZGJEDHJE REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA QENDRORE E VLERËSIMIT TË ARRITJEVE TË NXËNËSVE

PROVIMI ME ZGJEDHJE REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA QENDRORE E VLERËSIMIT TË ARRITJEVE TË NXËNËSVE KUJDES! Lënda: MOS Kimi DËMTO BARKODIN BARKODI REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA QENDRORE E VLERËSIMIT TË ARRITJEVE TË NXËNËSVE I MATURËS SHTETËRORE 2009 LËNDA: KIMI VARIANTI

Διαβάστε περισσότερα

Matematika. Libër për mësuesin. Tony Cotton. Caroline Clissold Linda Glithro Cherri Moseley Janet Rees. Konsulentë gjuhësorë: John McMahon Liz McMahon

Matematika. Libër për mësuesin. Tony Cotton. Caroline Clissold Linda Glithro Cherri Moseley Janet Rees. Konsulentë gjuhësorë: John McMahon Liz McMahon Matematika Libër për mësuesin Tony Cotton Caroline Clissold Linda Glithro Cherri Moseley Janet Rees Konsulentë gjuhësorë: John McMahon Liz McMahon Përmbajtje iv vii Dhjetëshe dhe njëshe A Numërojmë me

Διαβάστε περισσότερα

KALKULIMI TERMIK I MOTORIT DIESEL. 1. Sasia teorike e nevojshme për djegien e 1 kg lëndës djegëse: kmol ajër / kg LD.

KALKULIMI TERMIK I MOTORIT DIESEL. 1. Sasia teorike e nevojshme për djegien e 1 kg lëndës djegëse: kmol ajër / kg LD. A KALKULII TERIK I OTORIT DIESEL. Sasa terke e nevjshme ër djegen e kg lëndës djegëse: 8 L C 8H O 0.3 3 C H O 0. 4 3 kml ajër / kg LD kg ajër / kg LD. Sasja e vërtetë e ajrt ër djegen e kg lëndë djegëse:

Διαβάστε περισσότερα

9 KARAKTERISTIKAT E MOTORIT ME DJEGIE TË BRENDSHME DEFINICIONET THEMELORE Për përdorim të rregullt të motorit me djegie të brendshme duhet të dihen

9 KARAKTERISTIKAT E MOTORIT ME DJEGIE TË BRENDSHME DEFINICIONET THEMELORE Për përdorim të rregullt të motorit me djegie të brendshme duhet të dihen 9 KARAKTERISTIKAT E MOTORIT ME DJEGIE TË BRENDSHME DEFINICIONET THEMELORE Për përdorim të rregullt të motorit me djegie të brendshme duhet të dihen ndryshimet e treguesve të tij themelor - fuqisë efektive

Διαβάστε περισσότερα

Γιατί η νέα γενιά Αλβανών μεταναστών στην Ελλάδα χάνει στη γλώσσα της; Νίκος Γογωνάς

Γιατί η νέα γενιά Αλβανών μεταναστών στην Ελλάδα χάνει στη γλώσσα της; Νίκος Γογωνάς Γιατί η νέα γενιά Αλβανών μεταναστών στην Ελλάδα χάνει στη γλώσσα της; Νίκος Γογωνάς Από τις αρχές της δεκαετίας του 90 και μετά, ένας μεγάλος αριθμός Αλβανών μεταναστών ήρθε στην Ελλάδα κυρίως εξαιτίας

Διαβάστε περισσότερα

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2013

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2013 KUJDES! MOS DËMTO BARKODIN BARKODI REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2013 LËNDA: FIZIKË BËRTHAMË VARIANTI

Διαβάστε περισσότερα

MATERIAL MËSIMOR ELEKTROTEKNIK NR. 1

MATERIAL MËSIMOR ELEKTROTEKNIK NR. 1 Agjencia Kombëtare e Arsimit, Formimit Profesional dhe Kualifikimeve MATERIAL MËSIMOR Në mbështetje të mësuesve të drejtimit/profilit mësimor ELEKTROTEKNIK Niveli I NR. 1 Ky material mësimor i referohet:

Διαβάστε περισσότερα

FIZIKË. 4. Në figurë paraqitet grafiku i varësisë së shpejtësisë nga koha për një trup. Sa është zhvendosja e trupit pas 5 sekondash?

FIZIKË. 4. Në figurë paraqitet grafiku i varësisë së shpejtësisë nga koha për një trup. Sa është zhvendosja e trupit pas 5 sekondash? IZIKË. Një sferë hidhet vertikalisht lart. Rezistenca e ajrit nuk meret parasysh. Si kah pozitiv të lëvizjes meret kahu i drejtuar vertikalisht lart. Cili nga grafikët e mëposhtëm paraqet shpejtësinë e

Διαβάστε περισσότερα

Leksion nr 6. Grafikët dy dhe tre dimensional

Leksion nr 6. Grafikët dy dhe tre dimensional Leksion nr 6 Grafikët dy dhe tre dimensional 1 Komanda line line(x, y, 'property name', property value) Keto vlera jane opsionale, mund të përdoren për të specifikuar stilin e vijës, ngjyrën dhe gjerësinë

Διαβάστε περισσότερα

Qarqet/ rrjetet elektrike

Qarqet/ rrjetet elektrike Qarqet/ rrjetet elektrike Qarku elektrik I thjeshtë lementet themelore të qarkut elektrik Lidhjet e linjave Linja lidhëse Pika lidhëse Kryqëzimi I linjave lidhëse pa lidhje eletrike galvanike 1 1 lementet

Διαβάστε περισσότερα

I}$E SF$RTIT MATURA SHTETIIRORE, MIN{ISTRIA E ARSIIITIT. liinua.: GJUHE GREKE (Niveli 82) PROGRAMET ORIEI{TUESE IKOLLA MIRATO

I}$E SF$RTIT MATURA SHTETIIRORE, MIN{ISTRIA E ARSIIITIT. liinua.: GJUHE GREKE (Niveli 82) PROGRAMET ORIEI{TUESE IKOLLA MIRATO HT PUELIK"*. E S}IQIPENI SE MIN{ISTRIA E ARSIIITIT I}$E SF$RTIT MIRATO IKOLLA MATURA SHTETIIRORE, PROGRAMET ORIEI{TUESE (Provim me zgiedhje) liinua.: GJUHE GREKE (Niveli 82) Koordinator: LUDMILLA STEFANI,

Διαβάστε περισσότερα

Metodologji praktike për Deep Learning. kapitull i plotë

Metodologji praktike për Deep Learning. kapitull i plotë kapitull i plotë zgjodhi dhe përktheu Ridvan Bunjaku maj 2017 Përmbajtja Për publikimin... 3 Bibliografia... 3 Falënderim... 3 Licencimi... 3 Online... 3 Metodologjia praktike... 4 11.1 Metrikat e performansës...

Διαβάστε περισσότερα

LEKSIONE PER SISTEMET E SHPERNDARA DHE PARALELE. Pjesa e Pare Sistemet Paralele DEGA INFORMATIKE. Neki Frasheri

LEKSIONE PER SISTEMET E SHPERNDARA DHE PARALELE. Pjesa e Pare Sistemet Paralele DEGA INFORMATIKE. Neki Frasheri LEKSIONE PER SISTEMET E SHPERNDARA DHE PARALELE Pjesa e Pare Sistemet Paralele DEGA INFORMATIKE Neki Frasheri Tirane, 2012 1 Table of Contents HYRJE3 Sistemet sekuenciale dhe paralele3 Nevoja per perpunime

Διαβάστε περισσότερα

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2011 LËNDA: FIZIKË

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2011 LËNDA: FIZIKË KUJDES! MOS DËMTO BARKODIN BARKODI REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE E SHKENCËS AGJENCIA KOMBËTARE E PROVIMEVE PROVIMI ME ZGJEDHJE I MATURËS SHTETËRORE 2011 LËNDA: FIZIKË VARIANTI A E enjte,

Διαβάστε περισσότερα

Teoria e kërkesës për punë

Teoria e kërkesës për punë L07 (Master) Teoria e kërkesës për punë Prof.as. Avdullah Hoti 1 Literatura: Literatura 1. George Borjas (2002): Labor Economics, 2nd Ed., McGraw-Hill, 2002, Chapter 4 2. Stefan Qirici (2005): Ekonomiksi

Διαβάστε περισσότερα

INDUTIVITETI DHE MESINDUKTIVITETI. shtjellur linearisht 1. m I 2 Për dredhën e mbyllur të njëfisht

INDUTIVITETI DHE MESINDUKTIVITETI. shtjellur linearisht 1. m I 2 Për dredhën e mbyllur të njëfisht INDUTIVITETI DHE MESINDUKTIVITETI Autoinduksioni + E Ndryshimi I fluksit të mbërthyer indukon tensionin - el = - d Ψ Fluksi I mbërthyer autoinduksionit F është N herë më i madhë për shkak të eksitimit

Διαβάστε περισσότερα

( ) 4πε. ku ρ eshte ngarkesa specifike (ngarkesa per njesine e vellimit ρ ) dhe j eshte densiteti i rrymes

( ) 4πε. ku ρ eshte ngarkesa specifike (ngarkesa per njesine e vellimit ρ ) dhe j eshte densiteti i rrymes EKUACIONET E MAKSUELLIT Ne kete pjese do te studiojme elektrodinamiken klasike. Fjala klasike perdoret ne fizike, nuk ka rendesi e vjeter ose para shekullit te XX ose jo realiste (mendojne disa studente).

Διαβάστε περισσότερα

MATEMATIKË KONTROLLIMI EKSTERN I DIJES SË NXËNËSVE NË FUND TË CIKLIT TË TRETË TË SHKOLLËS FILLORE

MATEMATIKË KONTROLLIMI EKSTERN I DIJES SË NXËNËSVE NË FUND TË CIKLIT TË TRETË TË SHKOLLËS FILLORE MATEMATIKË KONTROLLIMI EKSTERN I DIJES SË NXËNËSVE NË FUND TË CIKLIT TË TRETË TË SHKOLLËS FILLORE QERSHOR, VITIT MËSIMOR 2015/2016 UDHËZIM KOHA PËR ZGJIDHJEN E TESTIT: 70 MINUTA Mjetet e punës: lapsi grafit

Διαβάστε περισσότερα

MENAXHIMI I OPERACIONEVE. Çfarë kuptohet me planifikimin e sistemimit? Çështjet kryesore SISTEMIMI I PROÇESIT LIGJËRATA 10

MENAXHIMI I OPERACIONEVE. Çfarë kuptohet me planifikimin e sistemimit? Çështjet kryesore SISTEMIMI I PROÇESIT LIGJËRATA 10 MENAXHIMI I OPERACIONEVE Çështjet kryesore SISTEMIMI I PROÇESIT LIGJËRATA 10 E 12 sek A B C D F H I 10 sek 50 sek 5 sek 25 sek 15 sek 18 sek 15 sek G 15 sek Çfarë kuptohet me planifikimin e sistemimit?

Διαβάστε περισσότερα

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE SHKENCËS INSTITUTI I ZHVILLIMIT TË ARSIMIT PROGRAM ORIENTUES PËR PËRGATITJEN E PROVIMIT KOMBËTAR

REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE SHKENCËS INSTITUTI I ZHVILLIMIT TË ARSIMIT PROGRAM ORIENTUES PËR PËRGATITJEN E PROVIMIT KOMBËTAR REPUBLIKA E SHQIPËRISË MINISTRIA E ARSIMIT DHE SHKENCËS INSTITUTI I ZHVILLIMIT TË ARSIMIT PROGRAM ORIENTUES PËR PËRGATITJEN E PROVIMIT KOMBËTAR TË MATURËS SHTETËRORE NË LËNDËN Gjuhë Greke (gjuhë e huaj

Διαβάστε περισσότερα

Teste matematike 7. Teste matematike. Botimet shkollore Albas

Teste matematike 7. Teste matematike. Botimet shkollore Albas Teste matematike 7 otimet shkollore Albas 1 Kreu I Kuptimi i numrit TEST 1 (pas orës së 8) Grupi A Rretho përgjigjen e saktë. 1. Te numri 3,435 shifra 4 tregon se: a) numri ka 4 të dhjeta; b) numri ka

Διαβάστε περισσότερα

dv M a M ( V- shpejtësia, t - koha) dt

dv M a M ( V- shpejtësia, t - koha) dt KREU III 3. MEKANIKA E LËIZJES Pas trajtimit të linjave hekurudhore, para se të kalojmë në mjetet lëvizëse, hekurudhore (tëeqëse dhe mbartëse), është më e arsyeshme dhe e nevojshme të hedhim dritë mbi

Διαβάστε περισσότερα

I. FUSHA ELEKTRIKE. FIZIKA II Rrahim MUSLIU ing.dipl.mek. 1

I. FUSHA ELEKTRIKE. FIZIKA II Rrahim MUSLIU ing.dipl.mek. 1 I.1. Ligji mbi ruajtjen e ngarkesës elektrike Më herët është përmendur se trupat e fërkuar tërheqin trupa tjerë, dhe mund të themi se me fërkimin e trupave ato elektrizohen. Ekzistojnë dy lloje të ngarkesave

Διαβάστε περισσότερα

LUCIANA TOTI ELEKTRONIKA 1. Shtëpia botuese GRAND PRIND

LUCIANA TOTI ELEKTRONIKA 1. Shtëpia botuese GRAND PRIND LUCIANA TOTI ELETRONIA 1 Shtëpia botuese GRAN PRIN 1 Autorja: Tel. 042374066, 0672530590 Redaktore shkencore: Garentina Bezhani Arti grafik dhe kopertina: Agetina onomi Botues: Shtëpia botuese GRAN PRIN

Διαβάστε περισσότερα

UNIVERSITETI AAB Fakulteti i Shkencave Kompjuterike. LËNDA: Bazat e elektroteknikës Astrit Hulaj

UNIVERSITETI AAB Fakulteti i Shkencave Kompjuterike. LËNDA: Bazat e elektroteknikës Astrit Hulaj UNIVERSITETI AAB Fakulteti i Shkencave Kompjuterike LËNDA: Bazat e elektroteknikës Prishtinë, Ligjëruesi: 2014 Astrit Hulaj 1 KAPITULLI I 1. Hyrje në Bazat e Elektroteknikës 1.1. Principet bazë të inxhinierisë

Διαβάστε περισσότερα

TEORIA E INFORMACIONIT

TEORIA E INFORMACIONIT TEORIA E INFORMACIONIT Literature 1. ESSENTIALS OF ERROR-CONTROL CODING, Jorge Castiñeira Moreira, Patrick Guy Farrell, 2006 John Wiley & Sons Ltd. 2. Telecommunications Demystified, Carl Nassar, by LLH

Διαβάστε περισσότερα

Udhëzues për mësuesin për tekstin shkollor. Matematika 12. Botime shkollore Albas

Udhëzues për mësuesin për tekstin shkollor. Matematika 12. Botime shkollore Albas Udhëzues për mësuesin për tekstin shkollor Matematika Botime shkollore Albas Shënim. K Udhëzues do të plotësohet me modele mësimi për çdo temë mësimore; për projekte dhe veprimtari praktike. Këtë material

Διαβάστε περισσότερα