Leksion 5
Dizenjimi i Algoritmeve
Ka disa menyra per ndertimin e algoritmeve. Rendtja me nderfutje perdor metoden inkrementale: Duke patur te renditur nenvektorin A[1..j - 1], ne nderfutim elementin A[j] ne vendin e vet, duke perftuar keshtu nenvektorin e renditur A[1 j]. Ne kete leksion do te shohim nje metode alternative te dizenjimit, te njohur si Pera-e-Sundo . Ne do ta perdorim metoden Pera-e-Sundo per te dizenjuar nje algoritem renditjeje per te cilin koha e kezekutimit ne rastin me te keq eshte shume me e shkurter se ajo e renditjes me nderfutje.
Metoda Pera-e-Sundo .
Shume algoritme te perdorshem jane rekursive ne strukture: per te zgjidhur nje problem te dhene, ata therrasin vetveten ne menyre rekursive nje ose disa here per te zgjidhur nenprobleme te lidhura ngushte me to. Keto algoritme zakonisht ndjekin nje metode pera e sundo: ata e ndajne problemin ne disa nenprobleme qe jane te ngjashem me problemin fillestar por qe jane me te vegjel ne madhesi, i zgjidhin nenproblemet ne menyre rekursive dhe me pas kombinojne keto zgjidhje per te krijuar nje zgjidhje te problemit fillestar.
Metoda Pera-e-Sundo .
Metoda pera e sundo perfshin 3 hapa ne secilin nivel te rekursivitetit: Ndaj (pera) problemin ne disa nenprobleme. Zgjidh (sundo) nenproblemet duke i zgjidhur ato ne menyre rekursive. Megjithate, nese madhesia e nenproblemeve eshte mjaftueshem e vogel, zgjidh nenproblemet ne nje menyre te drejtperdrejte.
Pera: Ndaj sekuencen prej n elementesh qe duhet renditur, ne dy nensekuenca me nga n/2 elemente secila.
Sundo: Rendit dy nensekuencat ne menyre rekursive duke perdorur renditjen me perzierje. Kombino: Perziej dy nensekuencat e renditura per te prodhuar zgjidhjen e renditur: Rekursiviteti perfundon kur sekuenca qe duhet renditur ka gjatesine 1, rast ne te cilin nuk ka pune per te bere, meqe do sekuence prej 1 elementi eshte vete e renditur.
q, dhe r jane indekset qe numerojne elementet e vektorit te tille qe p q < r. Procedura supozon se nenvektoret A[p..q] dhe A[q + 1..r] jane te renditur. Kjo procedure i perzien dy vektoret per te formuar nje nenvektor te vetem te renditur qe zevendeson nenvektorin aktual A[p..r].
Ne vend qe te numerojme hapat baze, mjafton te mbushim vektorin output nga indeksi p deri tek dhe duke perfshire indeksin r .
qe eshte linear ne n: (n) Pra rekursiviteti per kohen e ekzekutimit te merge sort eshte
Vizatojme nje peme rekursiviteti, qe tregon zgjerimin hap pas hapi: Per problemin fillestar, kemi nje kosto cn, plus dy nenproblemet, ku secili kushton T (n/2):
eshte lg n).
Krahasime
Krahasuar me renditjen me nderfutje, renditja me perzierje eshte me e shpejte. Per madhesi te vogla inputi, renditja me nderfutje mund te jete me e shpejte. Por per inpute mjaft te medha renditja me perzierje gjithmone do te jete me e shpejte, sepse koha e ekzekutimit te tij rritet me ngadale se koha e ekzekutimit te renditjes me nderfutje.
Detyre Shtepie
Bazuar ne algoritmin ne pseudokod per renditjen me perzierje, ndertoni nje program ne Paskal per kete algoritme. Modifikojeni algoritmin menyre qe ai ti rendise vektoret ne rendin zbrites.
Pyetje