Basic HTML Version

|  | Table of Contents |  | View Full Version

Page 34 - Demo
P. 34

                                        TEMATIKA 2 ALGORITMIKA DHE PROGRAMIMIhyrje, koha e përfundimit të programit dyfishohet po ashtu, për algoritmin me kompleksitet linear, ndërsa koha do të shumëfishohej sipas një rendi eksponencial për algoritmet me kompleksitet eksponencial (fig. 3).Kompleksiteti në hapësirë i referohet matjes së hapësirës (kujtesës) që shpenzon programi, ndërsa sasia e të dhënave për përpunim në hyrje rritet. Edhe në këtë rast aplikohet i njëjti koncept sikurse te kompleksiteti në kohë, veçse tashmë konsiderohet hapësira në vend të kohës.Po si mund ta llogarisim kohën e ekzekutimit të një programi? Koha mesatare e ekzekutimit të tij shpesh është e vështirë të llogaritet. Ka dy përqasje kryesore se si mund të vlerësohet një algoritëm.• Vlerësimi eksperimental. Për ta realizuar këtë është e nevojshme të zbatohet algoritmi duke zgjedhur një gjuhë programimi. Kjo jo gjithmonë është e lehtë, sepse që të krahasohen dy algoritme, programi i ndërtuar mbi to duhet të ekzekutohet në të njëjtën makinë dhe të kenë të njëjtat ambiente software. Eksperimentet mbi kohën e ekzekutimit të algoritmeve nuk janë asnjëherë mjaft për të qenë 100% të bindur për efikasitetin e tyre, pasi mund të ketë gjithmonë hyrje të tjera, të paprovuara në eksperimente, për të cilat programi sillet ndryshe. Për matjen e kohës, shprehur në sekonda, shërbejnë funksione të gatshme, që masin ciklet e clock-ut të procesorit deri në përfundimin e programit.• Vlerësimi sipas analizës teorike. Ai përdor një përshkrim të algoritmit në nivel të lartë (në formën e pseudokodit), në vend që ta zbatojë atë. Koha e ekzekutimit konsiderohet si një funksion i madhësisë së të dhënave të hyrjes n. E mira e këtij vlerësimi është se na lejon të vlerësojmë kohën e ekzekutimit në mënyrë të pavarur nga ambienti hardware apo software. Nëse analizojmë algoritmin e gjetjes së shumës së n-elementeve, përshkrimi teorik i kohës së ekzekutimit do të jepej nga një shprehje e formës T(n) = c*n + t, ku cdhe t janë konstante, ndërsa n është madhësia e të dhënave në hyrje. Pra, ky algoritëm karakterizohet nga kompleksitet linear, siç e tregon edhe shprehja T(n). Një tjetër faktor që duhet marrë parasysh për të zgjedhur njërin algoritëm kundrejt një tjetri apo vlerësimin e një algoritmi, është lloji i të dhënave në hyrje. Supozojmë se kemi një bashkësi elementësh të parenditur dhe duam ta rendisim në rend rritës. Fakti që kjo bashkësi është thuajse e renditur, por ka vetëm 1 apo 2 elemente në krye që duhen vendosur në vendin e duhur, bën një diferencë të madhe për sjelljen e një algoritmi kundrejt rastit më të keq të mundshëm, kur numrat janë të renditur në rend zbritës. Në rastin e parë, rritja e madhësisë së hyrjes ndikon linearisht në kohën e ekzekutimit, por rasti më i keq, shfaq një ndikim të rendit n2 për kohën e ekzekutimit. PROVO VETEN1. Supozojmë se kemi një tabelë prej n numrash. Shqyrto këto 2 probleme: a) Duam të ndërrojmë vendin e elementit të parë me elementin e fundit.b) Duam të kërkojmë për një element nëse gjendet apo jo në tabelë. Vlerëso për secilin rast kompleksitetin në kohë të algoritmit dhe argumento përgjigjen.2. Përpiqu të gjesh një mjet që bën matjen e kohës së ekzekutimit të programit tënd dhe zbatoje atë për të llogaritur kohën e programeve që zhvilluat në Ushtrimin 1 (Zbato algoritmat në një gjuhë programimi, të cilën e njeh tashmë).Fig. 39000800070006000400030002000100000 50 1005000Madhësia e hyrjesKoha (ms)32

| 28 29 30 31 32 33 34 35 36 37 38 |