330 likes | 765 Views
ALGORITMIKE. Leksion 1. Ne kete leksion…. Cfare eshte nje algoritem Paraqitja e algoritmeve Pseudokodi Veprimet Sekuenciale Veprimet Kushtezuese Veprimet Iterative Shembuj. Cfare eshte nje algoritem?. Cfare eshte nje algoritem? Nje varg instruksionesh qe zgjidhin nje problem
E N D
ALGORITMIKE Leksion 1
Ne kete leksion… • Cfare eshte nje algoritem • Paraqitja e algoritmeve • Pseudokodi • Veprimet Sekuenciale • Veprimet Kushtezuese • Veprimet Iterative • Shembuj
Cfare eshte nje algoritem? • Cfare eshte nje algoritem? • Nje varg instruksionesh qe zgjidhin nje problem • Pse jane algoritmet te rendesishem? • Nese mund te percaktojme nje algoritem, mund te automatizojme zgjidhjen • Nje agjent kompjuterik (robot, kompjuter) mund te interpretoje dhe te ekzekutoje instruksione per te zgjidhur problemin
Perkufizimi i Algoritmit • Nje varg mire-renditur. . . • veprimesh te mire-percaktuara (jo te dykuptimta) dhe qe mund te llogariten sakte. . . • qe prodhon nje rezultat. . . • dhe ndalon ne nje kohe te fundme.
A eshte ky nje Algoritem? • Te shtohet miell derisa brumi te jete i forte • Te perzihet dhe te pritet ne forma • Te piqet ne nje furre me ngrohtesi mesatare derisa te marre nje ngjyre kafe te lehte. • Te lihet te ftohet Jo! Pse? Ndihme: A eshte ai i mire-percaktuar?
A eshte ky nje Algoritem? • Vendosni nje sasi te vogel me shampo ne floke • Masazhojeni koken per rreth nje minute • Shperlarjeni mire • Perseriteni Jo! Pse? Ndihme: A eshte ai i mire-renditur?
Si ndertohen algoritmet? • Instruksione Sekuenciale • ekzekutohen ne rendin e dhene • Instruksione Kushtezuese • ekzekutohen nese plotesohet nje kondite • Instruksione Iterative • ekzekutohen derisa te plotesohet nje kondite
Figure 8-7 Skema per tri format?
Figure 8-8 Pseudokodi per tri format?
A duhet t’i paraqesim algoritmet ne Gjuhe Natyrale ? • Shembull “Fillimisht, jepini variablitm vleren 0 dhe variablit i vleren 0. Me pas, filloni ciklin derisa i te jete me i madh se m-1. Ne cikel, mbidhni vlerat e dy vektorevea dhe b … “ • Pro • Familjar • Kunder • Paraqitje verbale • I pasakte, mund te kete interpretime te ndryshme
A duhet t’i paraqesim algoritmet ne terma te Gjuheve Formale te Programimit? • Shembull { int i, m, carryint [] a = new int[100];int [] b = new int[100];int [] c = new int[100];m = Consolte.readInt();for (int j = 0; j <= m-1; j++) { … } • Pro • Preçiz dhe i mire-percaktuar • Ne fund do te progamohet ne keto gjuhe programimi • Kunder • Mund te jete nivel teper i ulet (shume i detajuar) per dizenjim algoritmesh • Detajet e sintakses jane te lodhshme
A duhet t’i paraqesim algoritmet ne Pseudokod? • Shembull Hapi 1: vendos vleren e carry ne 0 Hapi 2: vendos vleren e i ne 0 Hapi 3: merr vlerat e vektoreve a dhe b dhe gjatesine e tyre m Hapi 4: perserit hapat 5 dhe 6 derisa i >= m-1 … • Pro • Nje kompromis i mesem • Ngjan me disa gjuhe programimi popullore • I lexueshem • Relativisht i lire nga rregullat gramatikore • Perfshihen vetem shprehje te mire-percaktuara • “Nje gjuhe programimi pa detaje” • Kunder?
Veprimet sekuenciale • Vleredhenie variablash • Jepi a-se vleren b + 4 -a dhe b jane variabla, te cilet mund te mendohen si vende ne memorie per vlerat • Krijim dhe input variablash • Merr vlerat per a dhe b • Output i variablave • Printo vleren e c-se • Krijim i listave dhe inicializim i vlerave te tyre • Merr vleren n dhe listen e elementeve integer L1 … Ln • Shenim: L1 akseson elementin e pare te listes, L2 elementin e dyte, e keshtu me rradhe.
Veprimet Kushtezuese • Zgjidh nje bashkesi shprehjesh per t’u ekzekutuar, bazuar ne rezultatin vertete-rreme te nje test: Nese [Kushti vertete-rreme eshte i vertete] Atehere Ekzekuto nje bashkesi shprehjesh Perndryshe Ekzekuto nje tjeter bashkesi shprehjesh • Shprehjet kushtezuese jane vertete te rendesishme sepse ato na lejojne te marrim vendime bazuar ne vlerat e variablave
Veprimet Iterative (Ciklet) • Ekzekutojne nje bashkesi shprehjesh ne menyre te perseritur • Tre forma te pergjithshme: • For count = n to m do steps x to y • While [true-false condition is true] do steps x to y • DoExecute set of statementsWhile [true-false condition is true] • Cikli for eshte me pak fleksibel, me i thjeshti nga ana konceptuale • Ciklet while dhe do-while jane me fleksibel dhe me te fuqishem; ndryshimi i vetem eshte se kur vleresohet kushti vertete-rreme: perpara apo pas ciklit) • while count <= 100 [statements] endwhile • do [statements] while count < 100 • (supozohet se variabli count rritet ne çdo cikel)
Versioni me cikel While Get the values for x and yset result to 1 while (y > 0) set result to result * x set y to y – 1 endwhile print result Versioni me cikel Do while Get the values for x and y set result to 1 do set result to result * x set y to y – 1 while (y > 0) print result Shenim: Ka nje gabim ne versionin me cikel do-while. Cili eshte? Krahasimi i cikleve While dhe Do-While Marrim problemin e meposhtem: Te ngrihet x ne fuqi y (supozo qe y eshte jonegative)
Fuqia e Algoritmeve • Kombinimi i shprehjeve mund te jete kompleks • Ciklet dhe kushtezimet mund te nderfuten te njeri-tjetri • “Blloqet” e cikleve ose te shprehjeve kushtezuese mund te jene sekuenca te gjata shprehjesh komplekse • Prova te mirenjohura nga shkenca kompjuterike teorike tregojne qe nese nje problem mund te zgjidhet ne menyre algoritmike, ai mund te zgjidhet duke perdorur vetem veprime sekuenciale, kushtezuese dhe iterative! • Pseudokodi mund te llogarise çdo gje qe eshte e llogaritshme!
Shembull i Zgjidhjes Algoritmike te Problemit: Kerkimi • Problemi: Gjeni vleren e dhene ne nje liste vlerash (psh, nje emer nje numrator telefonik) • Inputi: Nje vlere e dhene (psh, “Smith”) dhe nje liste vlerash N1, N2, . . ., Ni. • Outputi i Deshiruar: “i vertete” nese gjendet vlera e dhene dhe pozicioni i vleres se pare te gjetur ne liste, ose “i rreme” ne te kundert • Percaktimi i nje strategjie zgjidhjeje quhet “zbulim i algoritmit” dhe eshte pjesa me sfiduese e ketij kursi!
Shembull i Zgjidhjes Algoritmike te Problemit: Kerkimi (vazhdim) • Strategji te mundshme zgjidhjeje: Kerko listen ne menyre sekuenciale Get the value of i and the string values of N1..i Get the string value of target set num to 1 set found to false while (found = false) if target = Nnum set found to true else add 1 to num endwhile print "the target was found” A do te funksionoje kjo zgjidhje? Pse ose Pse jo?
Shembull i Zgjidhjes Algoritmike te Problemit: Kerkimi (vazhdim) • Rishikohet strategjia e zgjidhjes: kerko listen ne menyre sekuenciale dhe informo perdoruesin nese vlera nuk gjendet Get the value of i and the string values of N1..i Get the string value of target set num to 1 set found to false while (found = false and num <= i) if target = Nnum set found to true else add 1 to num endif endwhile if found = true print "Target was found” else print "Target was not found." endif
Shembull i Zgjidhjes Algoritmike te Problemit: Kerkimi (vazhdim) • Pse e kerkuam listen ne menyre sekuenciale? • A kerkohet keshtu nje emer ne nje numrator telefonik? • Natyrisht qe jo! Nje numrator telefonik eshte i alfabetizuar dhe kjo ju mundeson qe t’i gjeni emrat me shpejt • Cfare algoritmi perdoret per te kerkuar ne nje numrator telefonik? • Eshte i ndryshem nga algoritmi sekuencial qe sapo pame dhe ndoshta me efikas • Menyra se si jane organizuar te dhenat mund te percaktoje se cili lloj algoritmi eshte i pershtatshem • Me vone do te shohim nje algoritem kerkimi me efikas qe perdoret ne lista te renditura (kerkimi binar)
Shembull: Gjetja e shumes dhe e mesatares se vlerave ne nje liste • Input: nje liste me vlera numra te plote pozitive N1, N2, . . ., Ni • Outputi i deshiruar: shuma dhe mesatarja e vlerave ne liste • Strategjia e zgjidhjes • Vizito ne menyre sekuenciale çdo vlere ne liste, duke mbajtur nje variabel Sum qe ruan shumen • Ne perfundim te ciklit, pjesto shumen me numrin e elementeve te listes per te gjetur mesataren
Shembull: Gjetja e shumes dhe e mesatares se vlerave ne nje liste(vazhdim) • Algoritmi Get the values of i and V1..i set sum to 0 set current to 1 while current <= i Do add Vcurrent to sum add 1 to current endwhile print “Sum: " and sum print “Average: “ and sum / i
Zgjidhja Algoritmike e Problemeve • Problemi: Zhvendosni vleren qe ndodhet ne pozicionin e pare te nje liste, ne pozicionin e fundit ne liste, duke i zhvendosur te gjitha vlerat me nje pozicion majtas • Input: • i (numri i vlerave) • V1, … , Vi (lista e vlerave) • Outputi i Deshiruar: • Lista V ku Vi = V1, Vi-1 = Vi, Vi-2 =Vi-1, etj. • Strategjia e zgjidhjes: Shkembe vendet e te dhenave fqinje ne menyre te njepasnjeshme
Zgjidhja Algoritmike e Problemeve Algoritmi get the values of i and V1..i set current to 1 while current < i do swap Vcurrent with Vcurrent+1 add 1 to current end while
Permbledhje: Pseudokodi • Pseudokodi eshte nje gjuhe fleksibel per zgjidhjen algoritmike te problemeve • Duket shume si gjuhe natyrale, por eshte me i strukturuar • Duket pak si gjuhe programimi por eshte me fleksibel • Si mund ta dini nese ajo qe keni shkruar eshte shkruar “sakte” ne pseudokod? • Nese dikush tjeter mund ta lexoje ate qe keni shkruar dhe ta ekzekutoje ate hap-pas-hapi, atehere me siguri ai eshte “i vlefshem”.
Permbledhje: Variablat dhe Listat • Variablat jane hapesira ne memorie (kontenitoresh) qe ruajne vlerat • Ato mund te mbushen me vlera ne dy menyra: • Input nga perdoruesi (psh: “merr vleren e n-se”) • Shprehje vleredhenieje (psh: “jepi n-se vleren n + 1”) • Listat jane vargje hapesirash ne memorie qe mund te aksesohen nepermjet nje indeksi • Per nje liste L me n qeliza, L1 akseson qelizen e pare, L2 qelizen e dyte, Ln akseson qelizen e n-te
Si behet zgjidhja algoritmike e problemeve: Nje Proces i Pergjithshem • Hapi 1: Percakto variablat e nevojshem dhe inicializoji ato, shpesh nepermjet inputit te perdoruesit • Hapi 2: Kryej llogaritjet • Hapi 3: Afisho rezultatet, shpesh nepermjet shprehjeve te printimit