Upload
teddy-ingram
View
2.012
Download
20
Embed Size (px)
DESCRIPTION
ASDFFFFFF
Citation preview
Ligjëruesi: Gazmend Bajrami e-mail: [email protected]
Qëllimi: • Algoritmet dhe karakteristikat themelore te tyre. Strukturat e te dhenave dhe tipet e ndryshme
te tyre.
Literatura: • R. Sedgewick: Algorithms in Java, Part 1-5. • Robert LaFore, Data Structures and Algorithms in Java. Sams Publishing, 2003 • T. H. Cormen, C. E. Leiserson und R. I. Rivest: Introduction to Algorithms, MIT Press• K. Mehlhorn, P. Sanders: Algorithms and Data Structures - The Basic Toolbox. Springer,May
2008
ë dhënave
Algoritmet dhe strukturat e të dhënave
Algoritmet d ë dhënave
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.
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 Sort, Mergesort. Kërkimi skuencial dhe kërkimi binar.
Çka është një algoritem dhe strukturë e të dhënave?
Algoritmet dhe strukturat 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.
ë dhënave
Algoritmet dhe strukturat e të 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 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, face recognition
Pse t’i studiojmë Algoritmet?
Algoritmet dhe strukturat e të dhënave
• Për tu bërë një programer ekspert.
Pse t’i studiojmë Algoritmet?
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 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
Shembuj të algoritmeve për llogaritjen e shumës dhe faktorielit :
Algoritmet dhe strukturat e 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 and Flow Chart
Algoritmet dhe strukturat e të dhënave
• Mbledhja e dy numrave te thjesht me posht eshte paraqitur permes Pseudo code dhe Flow Chart
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ë 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ë dhënave
Analiza e algoritmeve Pasi një algoritm është ndërtuar për të zgjidhur një problem të caktuar, dy pyetje kryesorelindin:
1. E para është nëse algoritmi i zgjedhur gjithmonë jep rezultat të saktatë të problemit (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 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ë dhënave
Analiza e algoritmeve
Atributet e algoritmeve janë
• Korrektësia • Algoritmi duhet të jap rezultat të saktë për të gjitha rastet e mundshme
• Mund të përcaktohet në mënyrë matematikore, shpesh nuk dihet
• Efikasiteti • Analiza kohore: Sa instruksione algoritmi mund të ekzekutoj?
• Analiza e hapsires memoruese: Sa hapsire memoruese algorithm ka nevojë ?
Algoritmet dhe strukturat e të dhënave
Analiza e algoritmeve • Shembull: Rradhitja (Sorting)
Algoritmet dhe strukturat e të dhënave
Sort
HyrjaSekuence e numrave
a1, a2, a3,….,an b1,b2,b3,….,bn
DaljaPermutacioni i sekuences se numrave
2 5 4 10 7 2 4 5 7 10
Korrektësia Për çfarë do hyrje në algoritem dalja do të jetë:
• b1 < b2 < b3 < …. < bn
• b1, b2, b3, …., bn është permutacion i a1, a2, a3,….,an
Korrektësia Për çfarë do hyrje në algoritem dalja do të jetë:
• b1 < b2 < b3 < …. < bn
• b1, b2, b3, …., bn është permutacion i a1, a2, a3,….,an
Koha e ekzekutimi Varet në
• numrin e elementve (n) • si janë (pjesërisht) tër
renditura? • algoritmi
Koha e ekzekutimi Varet në
• numrin e elementve (n) • si janë (pjesërisht) tër
renditura? • algoritmi
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 = TA (N) = 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ë dhënave
Kompleksiteti kohorë • Nëse njësia për matjen e kohës se algoritmeve a dhe b është μsec
Algoritmet dhe strukturat e të dhënave
Pra, cila algoritmi është më e shpejtë?
Kompleksiteti kohorë Algoritmet dhe strukturat e të dhënave
O notacioni (“Big-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 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)
Kompleksiteti kohorë Algoritmet dhe strukturat e të dhënave
O notacioni (“Big-O” Notation)
Shembull 1:
• koha e leximit te te dhenva 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
Kompleksiteti kohorë Algoritmet dhe strukturat e të dhënave
O notacioni (“Big-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)
Kompleksiteti kohorë Algoritmet dhe strukturat e të dhënave
1,00E-01
1,00E+00
1,00E+01
1,00E+02
1,00E+03
1,00E+04
1,00E+05
1,00E+06
1,00E+07
1,00E+08
1,00E+09
1,00E+10
2 4 8 16 32 64 128 256 512 1024n
T(n
)
n
log n
sqrt n
n log n
100n
n^2
n^3
Algoritmet dhe strukturat e 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 Arithmetic operations Return statement
Analiza:Line 1: Skip for nowLine 2: 1 operationLine 3: 1 operation (initialization) + (n + 1) operations (test) + n operations (increment) = 2n + 2 operationsLine 4: 3 arithmetic operations (1 addition + 2 multiplications) executed n times = 3n operationsLine 5: 1 operation
Numri i përgjithshëm i operacioneve = 1 + (2n + 2) 3n + 1 = 5n + 4 operacione
Algoritmet dhe strukturat e të dhënave
Kodi:
(1) for (int i = 0; i < numLoops; i++) (2) for (int j = 0; j < numLoops; j++) (3) sum += 2; // end nested loop example
Analiza e kodit:Supozojmë se ne jemi duke numëruar veprimet njëjtën bazë si në shembullin 1
Fillojme me inner loop, dhe le te jete n = numLoops
Line 2: 1 operation (initialization) + (n + 1) operations (test) + n operations (increment) = 2n + 2 perations Line 3: 1 arithmetic operation (1 addition) executed n times = 1n operations
Numri i përgjithshëm i 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) + (n + 1) operations (test) + n operations (increment) = 2n + 2 operationsBody 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 = 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.
Kompleksiteti kohorë Algoritmet dhe strukturat e të dhënave
Shembull: Jane dhene N numra te plote, sa kombinime te tresheve japin Shumen zero?
Kompleksiteti kohorë Algoritmet dhe strukturat e të dhënave
Koha e ekzekutimit per madhesi me vlera te ndryshme te hyrjes eshte paraqitur ne table.
Tipet e të dhënave Algoritmet dhe strukturat 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) Tree-s
Tipet e të strukturave te te dhënave Algoritmet dhe strukturat e të dhënave
Array
Linked List
TreeQueue Stack
Keto jane disa prej strukturave te te dhenvae qe do ti mesojme ne detaje ne vazhdim
Vektorët/Arrays - në JAVAAlgoritmet dhe strukturat e të dhënave
Vektoret / Arrays Çfare tipi i te dhenave (zakonisht) •Statik •Strukturum
Ne java Array eshte objekt.
Krijimi i nje array në Javaint[] intArray; // referencë në array intArray = new int[100]; // rezervimi i memorjes për 100 elemente
Sintakse alternativeint intArray[]= new int[100]; int intArray[] ={1,4,5,8,2,4,6,5}; int arrayLength = intArray.length
Algoritmet dhe strukturat e të dhënave Vektorët/Arrays - në JAVA
Çasja ne array. Leximi Vlera = intArray[10]; Percaktimi intArray[10] = Vlera; Detyre.
1. Krijimi i nje array prej 10 elementeve, inicializimi i 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ë dhënave Vektorët/Arrays - në JAVA
Detyre: Te shkruhet kodi i cili per array {11,5,10,23,44,55,1,6,7,5} e dhene gjene
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ë dhënave Vektorët/Arrays - në 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ë 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: elementi i parë i listës en: elementi i i n i listësn: gjatësia e listës
Shembull: Lista e studentëve në baze të emrit.
Algoritmet dhe strukturat e të dhënave Listat Lineare
Operacionet kryesore: Add: shton nje element ne liste Set: percakton vleren e nje elementi Remove: largon nje element nga lista Get: lexon vleren e nje elementi IndexOf: lexon indexin e nje elementi
Operacionet tjeraisEmpty isFull