leksion3 - algoritme te renditjes
DESCRIPTION
dssdsdsdsdsdTRANSCRIPT
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
1/57
Leksion 3 25/03
ALGORITMIKE DHE
PROGRAMIM I AVANCUAR
Algoritma te renditjes
1
Algoritme te Renditjes
Disa nga algoritmet e renditjes per tutrajtuar:
1. Selection Sort
2. Insertion Sort
3. Merge Sort
4. Bubble Sort
Tipi abstrakt i te dhenave mbi te cilin do teimplementojme keto algoritme do te jeteVEKTORI.
2
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
2/57
Leksion 3 25/03
Algoritme te Renditjes
Problemi i renditjes
Input: Nje sekuence numrash a1, a2, . . . , an.
Output: nje kombinacion/renditje e inputit e tille qe
a1 a2 an.
Keto sekuenca zakonisht ruhen ne vektor
Sekuences rritese te numraveve {1,2, 3 n} i referohemi si
celesa. Me cdo celes lidhim nje informacion shtese.
Do te shohim disa menyra per te zgjidhur problemet e
renditjes.
Secila menyre do te shprehet si algoritem- procedure
llogaritese e cila merr nje vlere, apo bashkesi vlerash, si input
dhe kthen nje vlere apo bashkesi vlerash si output.
3
Selection Sort
4
7 2 8 5 4
2 7 8 5 4
2 4 8 5 7
2 4 5 8 7
2 4 5 7 8
Pas cdo iteracioni caktohet pozicioni i nje elementi.
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
3/57
Leksion 3 25/03
Selection SortAlgoritmi
Nga i = 0 deri (i < n1)
(a) min = a[i]
(b) lock = i
Nga j = i + 1 deri (j < n) if (a[j] < min)
(a) min = a[j]
(b) lock = j
if (lock ! = i) (a) swap = a[i]
(b) a[i] = a[loc] (c) a[lock] = swap
5
Selection Sort
6
void selectionsort(int *a,int n)
{
int i,j,temp;
for(i=0;i< n1;i++)
for(j=i+1;j < n;j++)
if (a[i]>a[j])
{
temp=a[i];a[i]=a[j];
a[j]=temp;
}
}
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
4/57
Leksion 3 25/03
Analiza mbi ekzekutimin e Selection sort
7
Selection Sort
Rasti me i mire
f (n) = O(n)
Rasti me i keq
f(n) = (n(n1))/2 = O(n2)
Mesatarja
f(n) = (n(n1))/2 = O(n2).
8
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
5/57
Leksion 3 25/03
Insertion Sort - Algoritmi
Nga i = 1 deri ne n.
(a) Swap = A [i],
(b) Pos = i 1
While (Swap < A[Pos] dhe (Pos >= 0))
(a) A [Pos+1] = A [Pos]
(b) Pos = Pos-1
A [Pos +1] = Swap
9
Insertion Sort
10
23 17 45 18 12 22
1 2 6543
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
6/57
Leksion 3 25/03
Insertion Sort
23 17 45 18 12 22
1 2 6543
1 2 6543
Insertion Sort
23
17 45 18 12 22
1 2 6543
1 2 6543
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
7/57
Leksion 3 25/03
Insertion Sort
2317
45 18 12 22
1 2 6543
1 2 6543
Insertion Sort
2317 45
18 12 22
1 2 6543
1 2 6543
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
8/57
Leksion 3 25/03
Insertion Sort
1812 2217 23 45
1 2 6543
1 2 6543
Insertion Sort
void insertionsort(int *a,int n)
{ int i,j, k;
for(j=1;j < n;j++)
{
k=a[j];
for(i=j1;i>=0 && k
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
9/57
Leksion 3 25/03
Insertion Sort
17
Insertion Sort
Rasti me i mire???
Vektori eshte i renditur qe ne fillim
n -1 instruksionekoha e ekzekutimit e
rendit O(n)
Rasti me i keq???
Vektori eshte i renditur ne rend te kundert
n(n=1)/2 -1 instruksionekoha e
ekzekutimit e rendit O(n2)
18
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
10/57
Leksion 3 25/03
Merge SortDivide-and conquer
Divide-and conquereshte nje paradigem disenjimi i algoritmeve:
Divide: ndan bashkensine S te inputit ne dy nenbashkesi S1 dhe S2.
Recur: zgjidhen problemet e lidhura me S1 dhe S2.
Conquer: kombinohen zgjidhjet e S1 dhe S2 qe te japin zgjidhjen per S.
Merge-sort ne nje sekunece inputi S menelemente konsiston ne trehapa:
Divide: ndahet S ne dy sekuneca S1 dhe S2 me afersisht n/2 elementesecila
Recur: renditen ne menyre rekursive S1dhe S2 Conquer: bashkohet S1dhe S2 ne nje sekunece unike te renditur
19
Merge Sort
Merge
(Bashko)
Pjesa e pare Pjesa e dyte
Pjesa e pare Pjesa e dyte
A
Rradhitja
rekursive
Ndarja ne pjese
Vektori i Rradhitur
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
11/57
Leksion 3 25/03
Merge Sort
AlgorithmmergeSort(S, C)Inputsequence S with nelements, comparator C
Outputsequence Ssorted
according to C
ifS.size() > 1
(S1, S2)partition(S,n/2)
mergeSort(S1,C)
mergeSort(S2,C)Smerge(S1,S2)
Merge Sort : Merge
A[middle]A[left]
Sorted
FirstPart
Sorted
SecondPart
A[right]
merge
A:
A:
Sorted
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
12/57
Leksion 3 25/03
Hapi i Bashkimit te dy sekuencave te renditura
Hapi Conquer(hapi i bashkimit) te merge sort ka te beje mebashkimin e dy sekuencave te renditura A dhe B ne njesekuence te renditur S e cila perban te gjithe elementet e A dheB.
Kjo procedure ka nje kompleksitet te rendit O(n)
23
Merge Sort : MergeMerge(A, left, middle, right)
i left; j middle +1
create array L[right - left]
k 0
while i < middle& j < right
ifA[i] < A[j]
L[k++] A[i++]
else
L[k++] A[j++]
while i < middleL[k++] A[i++]
while j < right
L[k++] A[j++]
for(i= left;i< right;i++)
A[i]=L[i-left];
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
13/57
Leksion 3 25/03
Merge Sort
6 10 14 223 5 15 28
L: R:
Temporary Arrays
5 15 28 30 6 10 145
2 3 7 8 1 4 5 6A:
Merge Sort
3 5 15 28 30 6 10 14
L:
A:
3 15 28 30 6 10 14 22
R:
i=0 j=0
k=0
2 3 7 8 1 4 5 6
1
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
14/57
Leksion 3 25/03
Merge Sort
1 5 15 28 30 6 10 14
L:
A:
3 5 15 286 10 14 22
R:
k=1
2 3 7 81 4 5 6
2
i=0 j=1
Merge Sort
1 2 15 28 30 6 10 14
L:
A:
6 10 14 22
R:
i=1
k=2
2 3 7 8 1 4 5 6
3
j=1
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
15/57
Leksion 3 25/03
Merge Sort
1 2 3 6 10 14
L:
A:
6 10 14 22
R:
i=2 j=1
k=3
2 3 7 81 4 5 6
4
Merge Sort
1 2 3 4 6 10 14
L:
A:
6 10 14 22
R:
j=2
k=4
2 3 7 8 1 4 5 6
i=2
5
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
16/57
Leksion 3 25/03
Merge Sort
1 2 3 4 5 6 10 14
L:
A:
6 10 14 22
R:
i=2 j=3
k=5
2 3 7 8
1 4 5 6
6
Merge Sort
1 2 3 4 5 6 14
L
:
A:
6 10 14 22
R
:
k=6
2 3 7 8 1 4 5 6
7
i=2 j=4
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
17/57
Leksion 3 25/03
Merge Sort
1 2 3 4 5 6 14
L:
A:
6 10 14 22
R:
k=6
2 3 7 8
1 4 5 6
7
i=2 j=4
Merge Sort
1 2 3 4 5 6 7 8
L:
A:
3 5 15 28 6 10 14 22
R:
2 3 7 8 1 4 5 6
i=4 j=4
k=8
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
18/57
Leksion 3 25/03
Merge Sort
mergesort(int a[], int low, int high)
{ int mid;
if(low
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
19/57
Leksion 3 25/03
Merge Sort
6 2 8 4 3 7 5 1A:
MERGE_SORT(A, 0, 7)
Merge Sort
6 2 8 4
3 7 5 1
Merge-Sort(A, 0, 3)
Ndarja
A:
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
20/57
Leksion 3 25/03
Merge Sort
3 7 5 1
8 4
6 2
Merge-Sort(A, 0, 1)
Ndarje
A:
Merge Sort
3 7 5 1
8 4
6
2
Merge-Sort(A, 0, 0)
Ndarje ne element te vetem
A:
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
21/57
Leksion 3 25/03
Merge Sort
3 7 5 1
8 4
6 2
Merge-Sort(A, 0, 0), return
A:
Merge Sort
3 7 5 1
8 4
6
2
Merge-Sort(A, 1, 1)
A:
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
22/57
Leksion 3 25/03
Merge Sort
Merge-Sort(A, 1, 1), return
3 7 5 1
8 4
6 2
A:
Merge Sort
3 7 5 1
8 4
2 6
Merge(A, 0, 0, 1)
A:
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
23/57
Leksion 3 25/03
Merge Sort
Merge-Sort(A, 0, 1), return
3 7 5 1
8 42 6
A:
Merge Sort
3 7 5 1
8 4
2 6
Merge-Sort(A, 2, 3)
ndarje
A:
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
24/57
Leksion 3 25/03
Merge Sort
3 7 5 1
4
2 6
8 Merge-Sort(A, 2, 2)
A:
Merge Sort
3 7 5 1
4
2 6
8
Merge-Sort(A, 2, 2),return
A:
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
25/57
Leksion 3 25/03
Merge Sort
4
2 6
8
Merge-Sort(A, 3, 3)
A: 3 7 5 1
Merge Sort
3 7 5 1
4
2 6
8
Merge-Sort(A, 3, 3), return
A:
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
26/57
Leksion 3 25/03
Merge Sort
3 7 5 1
2 6
4 8 Merge(A, 2, 2, 3)
A:
Merge Sort
3 7 5 1
2 6 4 8
Merge-Sort(A, 2, 3), return
A:
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
27/57
Leksion 3 25/03
Merge Sort
3 7 5 1
2 4 6 8 Merge(A, 0, 1, 3)
A:
Merge Sort
3 7 5 12 4 6 8
Merge-Sort(A, 0, 3), return
A:
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
28/57
Leksion 3 25/03
Merge Sort
3 7 5 1
2 4 6 8
Merge-Sort(A, 4, 7)
A:
Merge Sort
1 3 5 7
2 4 6 8A:
Merge (A, 4, 5, 7)
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
29/57
Leksion 3 25/03
Merge Sort
1 3 5 72 4 6 8
Merge-Sort(A, 4, 7), returnA:
Merge Sort
1 2 3 4 5 6 7 8
Merge(A, 0, 3, 7)
A:
Merge-Sort(A, 0, 7)
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
30/57
Leksion 3 25/03
Merge Sort - Analiza
Lartesia he pemens qe krijohet nga merge-sort eshte O(log n)
Ne cdo thirrje rekursive e ndajme pemen ne dy gjysma te njejta
Numri i veprimeve per nyjet me thellesi i eshte O(n)
Ne ndajme dhe bashkojme 2isequenca me madhesi n2i Behen 2i+1thirrje rekursive
Koha e pergjithshme e ekzekutimit eshte e rendit O(nlog n)
59
depth #seqs size
0 1 n
1 2 n2
i 2i n2i
Merge Sort : Analiza
cn
2 cn/2= cn
4 cn/4= cn
n/2 2c= c
n
log n nivele
Kompleksiteti :O(n logn)
Total: cn log n
n
n/2 n/2
n/4 n/4 n/4 n/4
2 2 2
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
31/57
Leksion 3 25/03
Bubble Sort
Duke filluar nga elementi i pare deri tek
elementi i parafundit behet krahasimi me
elementin pasardhes dhe nese elementi
pasardhes eshte me i vogel atehere
ndryshojne vendet.
Kjo perseritet n here dhe ne kete rast kemi
vektorin e rradhitur.
Bubble Sort
512354277 101
1 2 3 4 5 6
512354277 101
1 2 3 4 5 6
Swap
42 77
512357742 101
1 2 3 4 5 6
Swap
35 77
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
32/57
Leksion 3 25/03
Bubble Sort
512773542 101
1 2 3 4 5 6
Swap
12 77
577123542 101
1 2 3 4 5 6
Nuk ka zevendesim
577123542 101
1 2 3 4 5 6
Swap
5 101
77123542 5
1 2 3 4 5 6
101
Vlera me e madhe e vektorit
Bubble Sort
index A[index + 1]) then
Swap(A[index], A[index + 1])
endifindex
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
33/57
Leksion 3 25/03
Bubble Sort
77123542 5
1 2 3 4 5 6
101
5421235 77
1 2 3 4 5 6
101
4253512 77
1 2 3 4 5 6
101
4235512 77
1 2 3 4 5 6
101
4235125 77
1 2 3 4 5 6
101
N-
1
Bubble Sort
void bubblesort(int *a,int n)
{
int i,j,k,temp;
for(i=1;i < n;i++)
for(j=0;j < n1;j++)
if (a[j] > a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
34/57
Leksion 3 25/03
Bubble Sort (Shembull 1)
Marrim serine e numrave pothuajse te renditur
67
Seria e numrave per turenditur
(pothuajse e renditur)
Sa instruksione duhet te kryejme per te marre
serine e renditur?
Kompleksiteti i rendit O(n2)
Bubble Sort (Shembull 1)
68
Seria e renditur
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
35/57
Leksion 3 25/03
Bubble Sort (Shembull 2)69
Seria e numrave e parenditur (pothuajse e renditur)
Kompleksiteti i rendit O(n)
Bubble Sort
Rasti me i mire
f (n) = O(n)
Rasti me i keq
f(n) = (n(n1))/2 = O(n2)
Mesatarja
f(n) = (n(n1))/2 = O(n2).
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
36/57
Leksion 3 25/03
Quicksort
71
Sic duket edhe nga emri, quicksort eshte algoritmi me ishpejtei njohur ne praktike. Kompleksiteti i tij eshte O(nlog n).
Shpejtesia e tij lidhet me nje cikel te brendshem teoptimizuar.
Ne rastin me te keq ka kompleksitet O(n2) por kjo eshtengjarje e pamundur ne menyre eksponenciale.
Ashtu si Mergesort eshte algoritem rekursiv i tipit Percadhe Sundo.
Algoritmi per QuickSort
72
Algoritmi baze per renditjen e nje vektori Skonsiston ne hapat e meposhtem:
1. Nqs numri i elementeve te S eshte 0 ose 1,perfundo.
2. Zgjidh nje element v ne S. Ky quhet pivot.
3. Ndaj bashkesine S- {v} ne dy grupe tendryshme S1= {x S- {v}|x v},dhe S2= {xS-{v}| xv}.
4. Therrasim quicksort(S1) te ndjekur nga v tendjekur nga quicksort(S2)}.
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
37/57
Leksion 3 25/03
Pershkrmi i quicksort
73
Mqs pjesa e ndarjes nuk na tregon si te veprojme meelementet e barabarte me pivot, kjo konsiderohet si
vendim i dizenjimit te algoritmit.
Nje implementim i mire do te ishte ai qe e trajton kete
pjese ne menyre sa me eficente.
Ne menyre intuitive mund te mendojme qe gjysma e
elementeve te barabarte me pivot te shkojne ne S1 dhe
gjysma tjeter ne S2 pak e shume si ne rastin e pemes
binare te kerkimit per ta bere ate te balancuar.
74
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
38/57
Leksion 3 25/03
Aplikimi i Quicksort mbi nje bashkesi
75
1. Pivot zgjidhet rastesisht vlera 65.
2. Pjesa e mbetur e elementeve ndahen ne dy nenbashkesi me tevogla.
3. Aplikohet ne menyre rekursive e njejta procedure per bashkesite ereja.
4. Njelloj si mergesort, ai ne menyre rekursive zgjidh dynenprobleme, dhe kerkon pune lineare shtese (hapi 3).
5. Ndryshe nga Mergesort , nenproblemet nuk garantohen te jene te tenjejtes madhesi, gje qe prezupozohet te jete ane negative.
6. Arsyeja qe Quicksort eshte i shpejte eshte qe faza e ndarjes, mundte ekzekutohet ne vend ne menyre eficente. Kjo eficense eshte mee mire per thirrje rekursive mbi bashkesi me madhesi te ndryshme.
Detaje te quicksort
76
Hapi 2 dhe 3 mund te implementohen ne menyre tendryshme.
Metoda e meposhtme eshte rezultat i analizave dhestudimeve te shumta empirike dhe paraqet nje menyreeficente per te implementuar Quicksort-in.
Derivimi me i vogel prej kesaj metode mund te sjellerezultate jo te mira
1. Zgjedhja e Pivot2. Strategjia e ndarjes
3. Skedaret e vegjel
4. Analiza e veprimeve te quicksort
5. Koha lineare e pritur per algoritmin e selektimit
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
39/57
Leksion 3 25/03
Zgjedhja e pivot
77
Megjithesse algoritmi i pershkruar, funksiononnjelloj pavaresisht cili element zgjidhet si pivot,
disa zgjedhje e bejne me te mire algoritmin se
disa te tjere.
Zgjedhja e Pivot/Zgjedhje e keqe
78
Te perdoret elementi i pare si pivot.
Eshte e pranueshme nqs inputi eshte random, por nqs
eshte i renditur qe me pare, ose i renditur ne rend te
kundert,, te gjithe elementet do shkojne ne S1 ose ne S2.
Me keq akoma qe kjo ndodh ne te gjitha thirrjet rekursive.
Nga ana praktike nqs vektori eshte i renditur, quicksort do
te kerkoje kohe kuadratike ekzekutimi per te mos bereasgje mbi vektor.
Ne pergjithesi, bashkesite e renditura, (ose me pjese te
medha te renditura brenda tyre), jane te shpeshta,
rrjedhimisht do te ishte ide e keqe te perdoret zgjedhja e
elementit te pare si pivot.
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
40/57
Leksion 3 25/03
Zgjedhja e Pivot /Zgjedhje e sigurte
79
Zgjedhja e pivot ne menyre random.
Zgjedhje e sigurte sepse pervec rastit kurgjeneratori i numrave random ka nje defekt, eshteshume e rralle qe te gjenerohen gjithmone numrapivot qe japin gjithmone nje ndarje te keqe tebashkesive.
Gjeneratoret e numrave random jane te
kushtueshem per nga koha e ekzekutimit dhe nukzvogelojne kohen mesatare te ekzekutimit tepjeses tjeter te algoritmit.
Zgjedhja e Pivot/Zgjedhja e mire
80
Median i nje grupi prej n numrash quhet elementi i n/2 ne
radhe nqs keto numra i rendisim (kemi renditje
paraprake!!!).
Zgjedhja me e mire do te ishte pikerisht mediani i
bashkesise.
Por kjo do te ishte e veshtire per tullogaritur dhe do te
ngadalesonte Quicksort-in ne menyre te konsiderueshme. Nje zgjidhje do te ishte te zgjidhen rastesisht 3 vlera nga
bashkesia dhe te merret mediani i tyre.
Por rastesia nuk ndihmon shume prandaj gjejme medianin e
elementit majtas, me ate djathtas, dhe me ate ne mes.
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
41/57
Leksion 3 25/03
81
Psh per nje input 8, 1, 4, 9, 6, 3, 5, 2, 7, 0
Majtas = 8
Djathas = 0
Mes = (0+9)/2 => si pozicion = 6
Mesi = pivot = 6
Eleminohet rasti i keq i bashkesise se renditur
(Bashkesite e reja jane me madhesi te
barabarte) Reduktohet me 5% koha e ekzekutimit te
quicksort.
Strategjia e ndarjes
82
Ka disa menyra, dhe mund te behet e njejta gje me humbje
ne eficense, ne menyre te gabuar.
Do te shohim nje metode te njohur.
Nderrojme vendin e pivot me elmementin e fundit.
8 1 4 9 0 3 5 2 7 6
i j
Supozojme qe te gjithe elementet jane te ndryshem nga njeri-
tjetri
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
42/57
Leksion 3 25/03
Strategjia e ndarjes
83
Qellimi i ndarjes: te levize te gjithe elementet me te vegjel sepivot majtas dhe te gjithe elementet me te vegjel se pivotdjathtas.
Me te Vegjel dhe Me te Medhenjjane dy bashkesite fqinjete pivot.
Ndersa ieshte majtasj, levizim idjathtas, duke kapercyerelementet me te vegjel se pivot. Levizimjmajtas dukekapercyer elementet me te medhenj se pivot.
Kur idhejndalojne, ishenjon ne nje element te madh dhejshenjon ne nje element te vogel (ne krahasim me pivot).
Nqs ieshte ne te majte tej, elementet kembejne vendet.
Qellimi eshte te levizim elementet e medhenj djathtas dhe
elementet e vegjel majtas. Ne shembullin me siper inuk do te levize, ndersajdo te levizenje pozicion.
Situata eshte si me poshte:
Strategjia e ndarjes
84
8 1 4 9 0 3 5 2 7 6
i j
Nderrojme vendet e elementeve i dhe j
2 1 4 9 0 3 5 8 7 6
i j
2 1 4 9 0 3 5 8 7 6
i j
Nderrojme vendet e elementeve i dhe j
2 1 4 5 0 3 9 8 7 6
i j2 1 4 5 0 3 9 8 7 6
j i
i dhe j kapercyen njera tjetren prandaj perfundon iteracioni
Pivot nderron vendin me elementin ku shenjon i
2 1 4 5 0 3 6 8 7 9
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
43/57
Leksion 3 25/03
Strategjia e ndarjes
85
Dime qe cdo element i < p (idhe pjaneindekse, pindeksi ipivot), eshte i tille qevlera e elementit ne indeksin ieshte me evogel se vlera e elementit ne indeksin p.
Per i> p(idhepjane indekse, pindeksi ipivot), eshte i tille qe vlera e elementit neindeksin ieshte me e madhe se vlera eelementit ne indeksin p.
Strategjia e ndarjesSi te trajtojme celesat e barabarte me pivot?
86
Ceshtja eshte nqs duhet te ndaloje ikur gjen nje celes tebarabarte me pivot, apo te ndalojejkur gjen nje celes tebarabarte me pivot?
Ne menyre intuitive mund te themi qe idhejduhet te sillennjelloj.
Nqs indalon, ndersajnuk ndalon atehere te gjitha celesat ebarabarte me pivot do perfundojne ne S2
Konsiderojme rastin kur te gjithe elementet jane te barabarte.Nqs idhejndalojne do te kemi disa shkembime midis idhej.
Pavaresisht se kjo duket e pavlefshme, efekti pozitiv eshte qeidhejdo te kapercehen ne mes, prandaj kur pivotzevendesohet, do te krijohen dy nenbashkesi me madhesipothuajse te njejta.
Sipas mergesort koha e ekzekutimit do te jete O(nlog n).
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
44/57
Leksion 3 25/03
Strategjia e ndarjes
Si te trajtojme celesat e barabarte me pivot?
87
Nqs as idhe asjnuk ndalojne, do te arrijne kufinjte e
bashkesise.
Megjithese kjo duket si praktike e mire, pivot do te
nderroje vendin me i, me fillimin apo fundin e bashkesise
ne varesi te implementimit. Kjo do te krijoje bashkesi me
madhesi shume te ndryshme.
Nqs te gjithe elementet jane te barabarte koha e
ekzekutimit do te jete O(n2).
Efekti eshte i njejte si ne perdorimin e pivot, elementin e
pare te bashkesise kur kemi bashkesi te renditur.
Kohe kuadratike ekzekutimi per te mos bere asgje!
Strategjia e ndarjesSi te trajtojme celesat e barabarte me pivot?
88
Eshte me mire te kryejme hapa te panevojshem dhe te krijojme
bashkesi me madhesi te njejta se sa te rrezikojme nenbashkesi me
diference.
Do te marrim idhejqe ndalojne nqs gjejne celes te njejte me pivot.
Eshte mundesia e vetme qe nuk kerkon kohe kuadratike ekzekutimi.
Ne pamje te pare nuk ia vlen te shqetesohesh per bashkesi me
elemente te njejte, askush nuk kerkon te rendise bashkesi me elemente
te njejte,
Por quicksort eshte rekursiv!
Supozojme kemi 10 000 elemente nder te cilet 5 000 jane te njejte.
Quicksort do te therrase ne menyre rekursive mbi keta 5 000 elemente.
Prandaj eshte e rendesishme qe kjo thirrje te behet ne menyre sa me
optimale.
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
45/57
Leksion 3 25/03
Quick Sort
4 8 6 3 5 1 7 2A:
QUICK_SORT(A, 0, 7)
QUICKSORT
2 3 1
5 6 7 84
Quick-Sort(A, 0, 2)
A:
Ndarja
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
46/57
Leksion 3 25/03
QUICKSORT
2
5 6 7 84
1
1 3
Quick-Sort(A, 0, 0) , return
QUICKSORT
2
5 6 7 84
1
3
3 Quick-Sort(A, 1, 1)
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
47/57
Leksion 3 25/03
QUICKSORT
5 6 7 8421 3
21 3
Quick-Sort(A, 0, 2)
QUICKSORT
421 3
5 6 7 8
5
Quick-Sort(A, 4, 7)
Ndarja
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
48/57
Leksion 3 25/03
QUICKSORT
4
5
6 7 8
6
6
21 3
Quick-Sort(A, 5, 7)
Ndarja
QUICKSORT
4
5
6
7 8
7
21 3
Quick-Sort(A, 6, 7)
Ndarja
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
49/57
Leksion 3 25/03
QUICKSORT
4
5
6
7
21 3
Quick-Sort(A, 7, 7) 8
8
QUICKSORT
4
5
6 87
21 3
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
50/57
Leksion 3 25/03
QUICKSORT
4
5
6 87
21 3
QUICKSORT
421 3 5 6 87
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
51/57
Leksion 3 25/03
QUICKSORT/RASTIMEIMIRE
T = (nlogn)
cn
2 cn/2= cn
4 c/4= cn
n/3 3c= cn
log n nivele
n
n/2 n/2
n/4
3 3 3
n/4n/4n/4
QUICKSORT/RASTIMEIKEQ
cn
c(n-1)
3c
2c
n
n-1
n-2
3
2
c(n-2)
T= (n2)
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
52/57
Leksion 3 25/03
QUICKSORT
103
void quick_sort( int a[ ], int n )
{
q_sort( a, 1, n );
}
104
int median3( int a[], int left, int right ){int center;center = (left + right) / 2;if( a[left] a[center] )
swap( &a[left], &a[center] );if( a[left] a[right] )
swap( &a[left], &a[right] );
if( a[center] a[right] )swap( &a[center], &a[right] );
/*a[left]
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
53/57
Leksion 3 25/03
105
void q_sort( input_type a[], int left, int right ){
int i, j;
input_type pivot;
if( left = right )
{
pivot = median3( a, left, right );
i=left; j=right-1;
for(;;)
{
while( a[i] pivot ) i++;
while( a[j] pivot ) j--;if( i j )
swap( &a[i], &a[j] );
106
else
break;
}
swap( &a[i], &a[right] ); /*rivendospivot*/
q_sort( a, left, i-1 );
q_sort( a, i+1, right );
}
}
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
54/57
Leksion 3 25/03
Ndryshim ne pjese te algoritmit
107
i=left+1; j=right-2;
for(;;)
{
while( a[i] pivot ) i++;
while( a[j] pivot ) j--;
if( i j )
swap( &a[i], &a[j] );
else
break;}
Aplikime te algoritmit
108
Te gjendet elementi i k-te me i madh ne nje
bashkesi.
E quajme kete algoritem quickSelect mqs
eshte i ngjashem me quickSort.
Le te jete |Si| numri i elementecve ne Si.
Hapat e quickselect jane:
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
55/57
Leksion 3 25/03
Aplikime te algoritmit
109
Nqs |S|= 1, atehere k= 1 kthe elementet ne S si pergjigje Prn rendit S dhe kthe k elementet me te vegjel.
Zgjidh nje pivot v nga S
Ndaj bashkesine S- {v} ne S1dhe S2, njelloj sic behet me
quicksort.
Nqs k< |S1|, atehere elementi I k-te me I vogel do te
ndodhet ne S1 , prandaj kthe quickselect (S1, k).
Nqs k= 1 + |S1|, atehere pivot eshte elementi i k-te me i
vogel.
Prn elementi i k-te me i vogel ndodhet ne S2, prandaj
kthjejme quickselect (S2, k - |S1| - 1).
Quick Select
110
Ndryshe nga quickSort, quickSelect ben 1 thirrjerekursive ne vend te 2.
Rasti me i keq eshte njelloj si ne rastin e quickSort,pra O(n2).
Kjo sepse rasti me i keq i quick sort eshte kur njeranga bashkesite eshte bosh, prandaj quickSelect nekete rast nuk po kursen nje thirrje rekursive.
Koha mesatare e ekzekutimit eshte O(n).
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
56/57
Leksion 3 25/03
Quick Select
111
//k te kalohet me vlere te pershtatshme midis 0 dhe Nvoid q_select(int a[], int k, int left, int right){int i, j;int pivot;if( left = right ){pivot = median3( a, left, right );i=left; j=right-1;for(;;){
while( a[i] pivot ) i++;while( a[j] pivot ) j--;if (i j )
swap( &a[i], &a[j] );
Quick Select
112
else
break;
}
swap( &a[i], &a[right-1] ); /* vendos pivot */
if( k i)
q_select( a, k, left, i-1 );
else
if( k i )
q-select( a, k, i+1, right );
else
return a[i]; //pivot eshte elementi i k-te
}
}
-
5/28/2018 Leksion3 - Algoritme Te Renditjes
57/57
Leksion 3 25/03
Fund Leksion 3
113