Algoritmet dhe strukturat e të dhënave
Algoritmet dhe strukturat e të dhënave Ligjëruesi: Gazmend Bajrami e-mail :
[email protected]
ë dhënave
Qëllimi: karakteristikat themelore te tyre. Strukturat e te dhenave dhe dh e tipet e • Algoritmet dhe karakteristikat ndryshme te tyre.
• • • •
Literatura: R. Sedgewick: Algorithms in Java, Part 1-5. Robert LaFore, Data Structures and Algorithms in Java. Sams Publishing, Pub lishing, 2003 T. H. Cormen, C. E. Leiserson und R. I. Rivest: Introduction to Algorithms, MIT Press K. Mehlhorn, P. P. Sanders: Algorithms and Data Structures - The Basic Toolbox. Springer,May 2008
Algoritmet dhe strukturat e të dhënave Përmbajtja 1.Definimi i algoritmeve dhe strukturave të të dhënave. Problemet themelore të algoritmeve: korrektësia, eficienca,kompleksiteti dhe siguria.
Algoritmet d
ë dhënave 2. Matja e eficiencës se algoritmeve. Analizimi i hyrjeve të algoritmeve dhe notacioni O. 3. Notacioni O në shembuj konkret. Algoritmet e ndryshme të të njejtit problem dhe eficenca e tyre për hyrje të ndryshme. 4. Vargjet dhe Listat. Reprezentimi i sekuencave përmes vargjeve (array) dhe listave. Realizimi i strukturave të të dhënave Stack dhe Queue perms sekuencave. 5. Pemët. Pemët binare. Operacionet bazike ne to, kerkimi futja dhe fshirja e te dhenave. 6. Implementimi i struktures fjalor për Hashing-ut. Hashing with chaining dhe Hashing with linear probing. 7. Analiza dhe shtjellimi i operacioneve bazike në strukturën Heap 8. Rradhitja dhe kërkimi. Bubblesort, Selectionsort, Insertsort,Quicksort,Heap Insertsort,Quicksort,Heap Sort, Mergesort. Kërkimi skuencial dhe kërkimi binar.
Algoritmet dhe strukturat e të dhënave
Çka është një algoritem dhe strukturë e të dhënave? •
Algoritmi: metodë për zgjidhjen e një problem në mënyrë sistematike, hap pas hapi.
•
Struktura dhënat : metodë për të ruajtur informacionet.
Algoritmet dhe strukturat e të dhënave
• •
ë dhënave Strukturat e të dhënave: Arrays, Lists, Stacks, Queues Algoritmet: •
Sorting : Bubble sort , Insertion sort, quicksort, mergesort, heapsort.
•
Searching : Binary search tree, hash table etj.
Algoritmet dhe strukturat e të të dhënave
Pse t’i studiojmë Algoritmet? •
Algoritmet kan ndikim te gjere ne: • • • • •
Internet: Web search, packet routing Computers: file system, compilers Computer graphics: Movies, video games, virtual reality Security: Cell phones, e-commerce, voting machines, DES, RSA encryption Multimedia: MP3, JPG, DivX, HDTV, HDTV, face recognition
Algoritmet dhe strukturat e të dhënave
Pse t’i studiojmë Algoritmet? •
Për tu bërë një programer ekspert.
Algoritmet dhe strukturat e të dhënave
Pse t’i studiojmë Algoritmet? •
Për të zgjidhur probleme. Për shembull, për gjetur nëse ekziston rruge rruge lidhëse ndërmjet A dhe B.
Algoritmet dhe strukturat e të dhënave
Paraqitja e algoritmeve •
Algoritmet mund te paraqiten me: •
Flow Chart
•
Pseudo Code Struktogram
•
Algoritmet dhe strukturat e të dhënave
Algoritmet dhe strukturat e të dhënave
Algoritmet dhe strukturat e të dhënave
Algoritmet dhe strukturat e të dhënave
Algoritmet dhe strukturat e të dhënave Shembuj të algoritmeve për llogaritjen e shumës s humës dhe faktorielit :
Algoritmet dhe strukturat e të të dhënave Pseudo Code • Pseudo-Code është mënyrë e shkurtër e përshkrimit të një program
kompjuterik. • Në vend të përdorimit të sintaksë së një gjuhe kompjuterike, është
përdorur formulim më i përgjithshëm. • Duke përdorur pseudo-code është më e lehtë për një jo-programer
për të kuptuar qëllimin e përgjithshme të programit.
Algoritmet dhe strukturat e të dhënave Pseudo Code
Algoritmet dhe strukturat e të dhënave Pseudo Code and Flow Chart •
Mbledhja e dy numrave numrave te thjesht me posht eshte paraqitur permes Pseudo code dhe Flow Chart
Algoritmet dhe strukturat e të dhënave
Struktogrami
Kodi
Algoritmet dhe strukturat e të të dhënave
Detyrë Formulo një algoritëm i cili mbledh numrat prej 1 deri në n si a. Pseudo code b. Flowdiagram
A ka zgjedhje me të thjeshtë? Sum=n*(n+1)/2
Algoritmet dhe strukturat e të të dhënave
Detyrë Formulo një algoritëm i cili i mbledh 5 numrat e pare (tek) duke u nise prej numrit 40 te cilet plotepjestohen me 3 ose 5 mirepo jo me 3 dhe 5
a. Pseudo code b. Flowdiagram
Algoritmet dhe strukturat e të të dhënave
Analiza e algoritmeve Pasi një algoritm është ndërtuar për të zgjidhur një problem të caktuar, dy pyetje kryesore lindin: 1.
E para para është është nëse algorit algoritmi mi i zgjedhur zgjedhur gjith gjithmonë monë jep jep rezult rezultat at të sakta saktatë të të problem problemit it (Korrektësia)
2.
E dyta është se si ky algoritem i menaxhon resurset e kompjuter (memoria, koha) (Efikasiteti)
Përgjigja për pyetjen e parë është e thjeshtë, "po" ose "jo", edhe pse zakonisht zakonisht nuk është e lehtë për të vërtetuar vlefshmërinë e kësaj përgjigjen. Pyetjes se dytë mund ti pergjigjemi duke analizuar kompleksitetin në kohë dhe në nevojë për memorie
Algoritmet dhe strukturat e të të dhënave
Analiza e algoritmeve Atributet e algoritmeve janë •
•
Korrektësia •
Algoritmi duhet të jap jap rezultat të saktë për të gjitha rastet e mundshme mundshme
•
Mund të përcaktohet në mënyrë matematikore, shpesh nuk dihet
Efikasiteti •
Analiza kohore: kohore: Sa instruksione algoritmi mund të ekzekutoj?
•
Analiza e hapsires memoruese: Sa hapsire memoruese algorithm ka nevojë ?
Algoritmet dhe strukturat e të të dhënave
Analiza e algoritmeve •
Shembull: Rradhitja (Sorting)
Dalja
Hyrja Sekuence e numrave
Permutacioni i sekuences se numrave
a1, a2, a3,….,an
b1,b2,b3,….,bn
Sort 2
5
4
10
7
Korrektësia Për çfarë do hyrje në algoritem dalja do të jetë: • b1 < b2 < b3 < …. < bn • b1, b2, b3, …., bn është
2
4
5
7
10
Koha e ekzekutimi Varet në • •
numrin e elementve (n) si janë (pjesërisht) tër renditura?
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë Të marrim që funksionet e kohes se dy algoritmeve A dhe B janë gjetur! Për madhësi hyrëse N Koha e Algoritmi A Algoritmi A = TA TA (N) = 1.000 1.000 N Koha e Algoritmi B = TB (N) = N^2 kohëzgjatja = f(madhësia e të dhënave hyrëse) Cili është më i shpejtë?
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë •
Nëse njësia për matjen e kohës se algoritmeve a dhe b është μsec
Pra, cila algoritmi është më e shpejtë?
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë
Krahaso rritjen e tyre relative?
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë O notacioni (“Big (“Big-O -O” ” Notation)
• • •
Le te jete n madhesia hyrese e nje programi Le te jete T(n) funksion qe tregon kohen e ekzekutimit Le te jete f(n) nje funksion tjeter – i thjesht
O notacioni : T(n) = O (f(n)) nese ekzistojnë dy konstante konstante positive c, N ashtu që |T(n)| ≤ c*|f(n)|
per n≥N
Me fjalë tjera me rritje të pakufizuar të n , T(n) nuk rritet më shpejtë se f(n) se f(n)
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë O notacioni (“Big (“Big-O -O” ” Notation)
Shembull 1: • • • • • •
koha e leximit te te dhenva nga nga disku eshte 10.000 ms koha e procesimit te seciles prej n te dhenave eshte 10 ms T(n)= (10.000 +10*n ) ms f(n)=n Le te marrim konstanten c = 20 c*f(n)= 20n
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë O notacioni (“Big (“Big-O -O” ” Notation)
Shembull 2: gjeni nese 7n-2 është ne O(n). Arsyetimi: duhet gjetur një konstante reale c> 0 dhe një numër të plotë N> = 1 tilla që 7n-2 <= c*n për çdo n>=N. Ne kemi zgjedhur c = 7, N = 1 dhe pastaj kemi
7n-2 <7n kur n> = 1 Kështu 7N-2 është O (n)
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë 1,00E+10 1,00E+09 1,00E+08
n log n
1,00E+07
sqrt n n log n
1,00E+06
) n ( T
100n n^2
1,00E+05
n^3
1,00E+04 1,00E+03 1,00E+02 1,00E+01 1,00E+00 1,00E-01 2
4
8
16
32
64
128
25 6
512
1024
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë
Algoritmet dhe strukturat e të të dhënave
Algoritmet dhe strukturat e të të dhënave Shembull 1 : Funksioni për të llogaritur shumën e cubes të numrave intexher nga 1 deri n
Kodi: (1) int calcSum(int n) { (2) int sum = 0; (3) for (int i = 1; i <= n; i++) (4) sum += i * i * i; (5) return sum; } // end calcSum Hapat në analizën e kodit: Vendosim se cilat janë operacionet themelore që ne do t ’i numërojnë : Assignment Increment Loop initialization Comparison
Analiza: Line 1: Skip for now Line 2: 1 operation Line 3: 1 operation operation (initialization) (initialization) + (n + 1) operations operations (test) (test) + n operations (increment) (increment) = 2n + 2 operations Line 4: 3 arithmetic arithmetic operations operations (1 addition addition + 2 multiplications) multiplications) executed n times = 3n operations Line 5: 1 operation Numri i përgjithshëm i operacioneve = 1 + (2n + 2) 3n + 1 = 5n + 4 operacione
Algoritmet dhe strukturat e të të dhënave Analiza e kodit: Supozojmë se ne jemi duke numëruar veprimet njëjtën bazë si në shembullin 1 Kodi: (1) for (int i = 0; i < numLoops; i++) (2) for (int j = 0; j < numLoops; j++) (3) sum += 2; // end nested loop example example
Fillojme me inner loop, dhe le te jete n = numLoops numLoops Line 2: 1 operation (initialization) (initialization) + (n (n + 1) operations operations (test) (test) + n operations operations (increment) (increment) = 2n + 2 perations Line 3: 1 arithmetic operation (1 addition) executed executed n times = 1n operations operations Numri i përgjithshëm i operacioneve operacioneve për inner loop= (2n + 2) + 1n = 3n + 2 operacione (linja 2 & 3) Kështu, koha inner loop është O (n), ose koha lineare.
Tash kemi outer loop: Line 1: 1 operation (initialization) (initialization) + (n + 1) operations operations (test) + n operations operations (increment) (increment) = 2n + 2 operations operations Body of outer loop: Total number of operations for inner loop executed n times = (3n + 2) * n = 3n^2 + 2n operations Numri i përgjithshëm i operacioneve operacioneve = 2n + 2 (alineja 1) + 3n ^ 2 + 2n (trupi i lak e jashtme) = 3n ^ 2 + 4n + 2 Kështu, koha e nested loops është O (n ^ 2). Koha e tij është kuadratik (sepse është ngritur në fuqin 2), kështu që është përshkruar si një Algoritmi kuadratike.
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë Shembull: Jane dhene N numra te plote, sa kombinime te tresheve japin Shumen zero?
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë Zgjidhja
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë Koha e ekzekutimit per madhesi me vlera te ndryshme te hyrjes eshte paraqitur ne table.
Algoritmet dhe strukturat e të të dhënave
Kompleksiteti kohorë
Algoritmet dhe strukturat e të të dhënave
Tipet e të dhënave Tipet Statike Tipet e thjeshta •Integer •Char •Boolean •Pointer/refernce Tipet e strukturume • Array •String
Tipet Dinamike Listat e Lidhura (linked list)
Algoritmet dhe strukturat e të të dhënave
Tipet e të strukturave te te dhënave Array
Linked List
Tree Tree
Queue
Stack
Algoritmet dhe strukturat e të të dhënave
Vektorët/Arrays ektorët/Arrays - në JAV JAVA Vektoret / Arrays Çfare tipi i te dhenave d henave (zakonisht) •Statik •Strukturum Ne java Array eshte objekt. objekt. Krijimi i nje array në Java int[] intArray; // referencë në array intArray = new int[100]; // rezervimi i memorjes për 100 elemente
Sintakse alternative int intArray[]= new int[100]; int intArray[] ={1,4,5,8,2,4,6,5}; int arrayLength = intArray.length intArray.length
Algoritmet dhe strukturat e të të dhënave
Vektorët/Arrays ektorët/Arrays - në JAV JAVA Çasja ne array. Leximi Vlera = intArray[10]; intArray[10];
Percaktimi intArray[10] = Vlera;
Detyre. 1. Krijimi i nje array prej 10 elementeve, inicializimi i array array me keto vlera {11,5,10,23,44,55,1,6,7,5} 2. Programimi i metodes find(vlera) 3. Programimi i metodes delete(vlera)
Algoritmet dhe strukturat e të të dhënave
Vektorët/Arrays ektorët/Arrays - në JAV JAVA
Algoritmet dhe strukturat e të të dhënave
Vektorët/Arrays ektorët/Arrays - në JAV JAVA
Algoritmet dhe strukturat e të të dhënave
Vektorët/Arrays ektorët/Arrays - në JAV JAVA
Algoritmet dhe strukturat e të të dhënave
Vektorët/Arrays ektorët/Arrays - në JAV JAVA 11,5,10,23,44,55,1,6,7,5 } e dhene gjene Detyre: Te shkruhet kodi i cili per array { 11,5,10,23,44,55,1,6,7,5 1. Vleren mesatare te array 2. Vleren maksimale te array 3. Kompjimin e anetarve te array ne nje array tjeter
Algoritmet dhe strukturat e të të dhënave
Vektorët/Arrays ektorët/Arrays - në JAV JAVA
Algoritmet dhe strukturat e të të dhënave
Vektorët/Arrays ektorët/Arrays - në JAV JAVA Disavantazhet: 1. Nëse një anëtare shtohet ose fshihet nga array, anëtaret e array duhet te zhevndosen 2. Në rastin më të keq, për shtimin ose fshirjen e një anëtari në array merr kohë në O(n) 3. Array kanë gjatësi fikse etj.
Algoritmet dhe strukturat e të të dhënave
Listat Lineare Çka mundet me qenë një listë lineare sipas mendimit tuaj? Strukture lineare e të dhënave në formën (e1,e2,…,en). e1: e1: elementi i parë i listës en: en: elementi i i n i listës n: gjatësia e listës Shembull: Lista e studentëve në baze të emrit.
Algoritmet dhe strukturat e të të dhënave
Listat Lineare Operacionet kryesore: Add : shton nje element ne liste Set: percakton percakton vleren e nje elementi Remove: largon nje element nga lista Get: lexon vleren e nje elementi IndexOf: lexon indexin e nje elementi
Operacionet tjera isEmpty isFull
Algoritmet dhe strukturat e të të dhënave
Listat Lineare
Algoritmet dhe strukturat e të të dhënave
Listat Lineare
Algoritmet dhe strukturat e të të dhënave
Listat Lineare - ushtrim
Algoritmet dhe strukturat e të të dhënave
Listat Lineare - ushtrim Rezultati:
Y L K U U