analizë e algoritmeve renditja (sortimi) · 2020. 12. 24. · analizë e algoritmeve 2 sortimet...

35
Analizë e algoritmeve 1 Analizë e algoritmeve Renditja (sortimi) Elver H. Bajrami [email protected], [email protected] FSHMN, Departamenti i Matematikës, viti akademik 2020/21 (Kapitulli 7 në literaturë)

Upload: others

Post on 28-Jan-2021

9 views

Category:

Documents


0 download

TRANSCRIPT

  • Analizë e algoritmeve 1

    Analizë e algoritmeve

    Renditja (sortimi)Elver H. Bajrami

    [email protected], [email protected]

    FSHMN, Departamenti i Matematikës, viti akademik 2020/21

    (Kapitulli 7 në literaturë)

    mailto:[email protected]:[email protected]

  • Analizë e algoritmeve 2

    Sortimet

    ◼ Shpesh here gjatë ditës na paraqitet nevoja e renditjes së gjërave sipas një kriterit të caktuar- punët gjatë ditës të renditura me orë, ushqimet në tavolinë etj.

    ◼ Kjo punë në kompjuter bëhet më së shpeshti në baza të të dhënave për qëllime të caktuara

    ◼ Ekzistojnë disa algoritme që bëjnë sortimin por përpjekjet vazhdojnë edhe sot në përmirësimin e tyre

  • Analizë e algoritmeve 3

    Sortimet

  • Analizë e algoritmeve 4

    2.1 Terminologjitë dhe shprehjet e sortimit

    ◼ Gjatë këtij kapitulli do të nënkupotojmë:

    ◼ Hyrja në algoritin e sortimit gjithmonëështë varg

    ◼ Rrokjet janë të krahasueshme ndërmjetveti varësisht nga tipi i vargut

    ◼ Do të marrim klasën zgjerueseComparable dhe metodën compareTome qëllim të unifikimit të problematikës

  • Analizë e algoritmeve 5

    Terminologjitë dhe shprehjet e sortimit

  • Analizë e algoritmeve 6

    Terminologjitë dhe shprehjet e sortimit

    ◼ Në rastin e përgjithshëm në varg mund të përsëriten çelsat

    ◼ Algoritmi është i qëndrueshëm (stable) nëse nuk bënë ndrrimin e termave me vlerë të njejtë

    ◼ Kompleksiteti i alg. sortimit do të matet me nr. e krahasimit apo ndrrimeve të çelsave

    ◼ Parametër tjetër është edhe hapësira memorike e nevojshme për sortim

  • Analizë e algoritmeve 7

    ◼ Këtu do ti prezentojm tre algoritme më të thjeshta të sortimit

    ◼ Janë më të lehtë për tu kuptuar dhe implementuar, por të ngadalshëm në kryerjen e sortimit, në raste specifike edhe “të mire”

  • Analizë e algoritmeve 8

    Insertion Sort

    ◼ Imagjinojm një grumbull të faturave të pa paguara dhe këkrojm ti rendisim ato sipasdates së arritjes

    ◼ Procedura e renditjes së tyre duke filluar ngady të parat e me radhë na krijon logjiken e implementimit të algoritmit Insertion Sort

    ◼ Ilustrojm këtë me shembullin në vazhdim

  • Analizë e algoritmeve 9

    Insertion Sort

  • Analizë e algoritmeve 10

    Insertion Sort

  • Analizë e algoritmeve 11

    Insertion Sort

    Krahasimet vs nderrimet ne rastin e mire!

  • Analizë e algoritmeve 12

    Bubble Sort

    ◼ Algoritem i thjeshte për tu implementuar

    ◼ Krasimi i çdo dy termave fqinjë të vargut dhevarësisht nga kjo të ndrrohen vendet apo tëecet para (bubble)

    ◼ for (int i=0; ii; j--)

    ◼ if ((A[j].compareTo(A[j-1]) < 0))

    ◼ DSutil.swap(A, j, j-1);

  • Analizë e algoritmeve 13

    Bubble Sort

  • Bubble Sort

    ◼ Kompleksiteti edhe i këtij algoritmimbetet i njejt me atë paraprak, pra

    ◼ σ𝑖=1𝑛 𝑖 =

    𝑛(𝑛+1)

    2≈ 𝜃(𝑛2)

    ◼ Si në rastin e keq, poashtu edhe nërastet e tjera

    Analizë e algoritmeve 14

  • Selection Sort

    ◼ I kthehemi problemit të renditjes së grumbullit të faturave, në atë mënyrë që kërkojm faturene muajit janar dhe e vendosim të paren, pasta të shkurtit e kështu me radhë

    ◼ Në këtë algoritëm numri i ndrrimeve është saktësisht n-1.

    ◼ Eshtë përmirësim i BubbleSortit në aspektin e ndrrimeve por jo edhe të krahasimeve

    ◼ Ideja e max dhe minsort-it ne prapavijë

    Analizë e algoritmeve 15

  • Selection Sort

    ◼ for (int i=0; ii; j--)

    ◼ if (A[j].compareTo(A[lowindex]) < 0)

    ◼ lowindex = j;

    ◼ DSutil.swap(A, i, lowindex);

    ◼ }

    Analizë e algoritmeve 16

  • Selection Sort

    Analizë e algoritmeve 17

  • Përmbledhja per tre algoritmet

    Analizë e algoritmeve 18

  • Shell Sort

    ◼ Ne kete algoritem behet krahasimi i elementeve jo fqinje te vargut (perdallim nga bubble Sort)

    ◼ Krijon nën vargje te cilat i renditim sipas algoritmit Insertion Sort te modifikuar, pastaj bashkon këto vargje

    ◼ Zakonisht fillohet me ndarjet e vargut “përafërsisht” në dy pjese

    Analizë e algoritmeve 19

  • Shell Sort

    Analizë e algoritmeve 20

  • Shell Sort

    ◼ for (int i=A.length/2; i>2; i/=2)

    ◼ for (int j=0; j

  • Shell Sort

    ◼ Nëse Shellsort-i është formuar me ndarjen me 3, mund te vërtetohet se kompleksiteti është 𝜃(𝑛1.5)

    ◼ Përfundimisht Shell Sort-i konsiderohet njëpërmirësim i vogël i Insertion Sort-it

    Analizë e algoritmeve 22

  • 2.3 Sortimet e llojit “divide & conquer” - Merge Sort

    ◼ Algoritëm që i takon grupit “përqaj e sundo” – përndarjen e problemit në probleme më të vogla, zgjidhjen e tyre veç e veç, dhe bashkim i zgjidhjevesi zgjidhje të problemit

    ◼ Merge Sort këtë e bënë duke ndarë vargun në dypjesë në mënyrë rekurzive, pastoj sorton ato kur tëarrijnë nga dy elemente me u krahasu dhe në fund, bashkimi i dy vargjeve të sortuar në një të tretë tësortuar (merge)

    Analizë e algoritmeve 23

  • Merge Sort

    ◼ List mergesort(List inlist) {

    ◼ if (inlist.length()

  • Merge Sort

    Analizë e algoritmeve 25

  • Merge Sort

    ◼ Nga konstruksioni i ndërtimit algoritmitvërejmë se në çdo hap problemi ndahetnë dy nënprobleme, përgjysmë më të

    vogla, pra 𝑀 𝑛 = 2𝑀(𝑛

    2)

    ◼ Poashtu, pas krahasimit të dy nga dytermave të vargut duhet bërë bashkimi ityre i cili ka koston n (tregoni!)

    Analizë e algoritmeve 26

  • Merge Sort

    ◼ Prandaj kompleksiteti në rastin e

    përgjithshëm është 𝑀 𝑛 = 2𝑀𝑛

    2+ 𝑛

    ◼ Kur të zgjidhim këtë rekurzion gjejmkompleksiteti përfundimtar 𝜃(𝑛 log 𝑛) qëështë më i miri prej të gjithë që i kemishtjelluar gjer më tani

    Analizë e algoritmeve 27

  • Merge Sort

    ◼ Një implementim standard i mergeSort-it◼ void mergesort(E[] A, E[] temp, int l, int r) {

    ◼ int mid = (l+r)/2; // Select midpoint

    ◼ if (l == r) return; // List has one element

    ◼ mergesort(A, temp, l, mid); // Mergesort first half

    ◼ mergesort(A, temp, mid+1, r); // Mergesort second half

    ◼ for (int i=l; i

  • Quick Sort

    ◼ Ky algoritëm shfrytëzon strategjin e ngjashëmme Merge Sorti, por këtu nuk bëhët ndarja nëdysh e vargut, por sipas një rregullit tëquajtur “partition with pivot element”

    ◼ E merr emrin quick, për arsye se në rastimesatar jep rezultatet më të mira si përkohën ashtu edhe hapësirën memorike

    ◼ Kompleksiteti mbetet i njejtë në rastin e përgjithshëm sikurse tek Merge Sort-it

    Analizë e algoritmeve 29

  • Quick Sort

    ◼ void qsort(E[] A, int i, int j) { // Quicksort

    ◼ int pivotindex = findpivot(A, i, j); // Pick a pivot

    ◼ DSutil.swap(A, pivotindex, j); // Stick pivot at end

    ◼ // k will be the first position in the right subarray

    ◼ int k = partition(A, i-1, j, A[j]);

    ◼ DSutil.swap(A, k, j); // Put pivot in place

    ◼ if ((k-i) > 1) qsort(A, i, k-1); // Sort left partition

    ◼ if ((j-k) > 1) qsort(A, k+1, j); // Sort right partition

    ◼ }

    Analizë e algoritmeve 30

  • Heap Sort

    ◼ Algoritëm i bazuar në kërkimin në drurin binar(Binary Search Tree-BST)

    ◼ Sjellja asimptotike e këtij algoritmi është e rangut 𝜃(𝑛 log 𝑛) në rastin e mire, të keq dhemesatar

    ◼ void heapsort(E[] A) {

    ◼ // The heap constructor invokes the buildheap method

    ◼ MaxHeap H = new MaxHeap(A, A.length, A.length);

    ◼ for (int i=0; i

  • BinSort dhe RadixSort

    ◼ Shembulli i faturave vjetore te grumbulluara ne tavoline, renditja e tyre sipas llojit (rryme, telefon, shërbimet e ujësjellësit etj.) dhe pastaj sipas datës

    ◼ Analizojmë kodin programor

    ◼ for (i=0; i

  • BinSort dhe RadixSort

    ◼ Përmirësim i vogël i algoritmit BinSort është edheBucketSort ku kemi ndarjen e indeksave të vargut ne intervale

    ◼ Rast i vecant ndarja e intervalin 1-100 ne 10 pjesëduke shfrytëzuar funksionet / dhe mod

    ◼ Që paraqet rastin e RadixSort

    ◼ Komplelsiteti tek ky algoritëm është 𝜃(𝑛 log 𝑛)

    Analizë e algoritmeve 33

  • Përmbledhje

    ◼ Disa simulime empirike për algoritmet e shtjelluara në këtë kapitull (milisekonda)

    Analizë e algoritmeve 34

  • Përmbledhje

    ◼ Disa simulime empirike për algoritmet e shtjelluara në këtë kapitull (appleta)

    Analizë e algoritmeve 35