Leksion3 - Algoritme Te Renditjes

  • Upload
    napster

  • View
    147

  • Download
    0

Embed Size (px)

DESCRIPTION

dssdsdsdsdsd

Citation preview

  • 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