Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Σχετικά έγγραφα
Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

Αλγόριθμοι ταξινόμησης

Αλγόριθµοι Ταξινόµησης

Εργαστήριο 2: Πίνακες

ΠΛΗ111. Ανοιξη Μάθηµα 9 ο. Ταξινόµηση. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

Διάλεξη 04: Παραδείγματα Ανάλυσης

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

Διδάσκων: Παναγιώτης Ανδρέου

Αλγόριθµοι Ταξινόµησης

Δομές Δεδομένων & Αλγόριθμοι

Διδάσκων: Παναγιώτης Ανδρέου

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2

Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Προγραμματισμός Ι (ΗΥ120)

Διδάσκων: Παναγιώτης Ανδρέου

Εργαστηριακή Άσκηση 1

ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο

Quicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι

Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Ταξινόμηση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομές Δεδομένων & Αλγόριθμοι

Ταξινόμηση με συγχώνευση Merge Sort

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων

Αναδρομικές Σχέσεις «ιαίρει-και-βασίλευε»

Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort

Αλγόριθμοι Ταξινόμησης Μέρος 2

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

Σχεδίαση και Ανάλυση Αλγορίθμων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ ΕΠΛ 035 Δομές Δεδομένων και Αλγόριθμοι για Ηλ. Μηχ. και Μηχ. Υπολ.

Εισαγωγή στην Ανάλυση Αλγορίθμων

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012

Merge Sort (Ταξινόμηση με συγχώνευση) 6/14/2007 3:04 AM Merge Sort 1

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 7 η. Βασίλης Στεφανής

Αλγόριθµοι και Πολυπλοκότητα

Ταξινόμηση. Παύλος Εφραιμίδης. Δομές Δεδομένων Ταξινόμηση 1

Ταξινόμηση. Σαλτογιάννη Αθανασία

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 2 ΛΥΣΕΙΣ Γραμμικές Δομές Δεδομένων, Ταξινόμηση

Ταξινόμηση: Εισαγωγικά. Ταξινόμηση (Sor ng) Αλγόριθμοι Απλής Ταξινόμησης. Βασικά Βήματα των Αλγορίθμων

Κεφάλαιο 1 Εισαγωγή. Περιεχόμενα. 1.1 Αλγόριθμοι και Δομές Δεδομένων

Αλγόριθμοι και Πολυπλοκότητα

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

Προχωρημένες έννοιες προγραμματισμού σε C

Quicksort. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Quicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Διδάσκων: Παναγιώτης Ανδρέου

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1

Πανεπιστήμιο Ιωαννίνων Τμήμα Πληροφορικής Δομές Δεδομένων [ΠΛΥ302] Χειμερινό Εξάμηνο 2012

Πανεπιστήμιο Ιωαννίνων Τμήμα Μηχανικών Η/Υ και Πληροφορικής Δομές Δεδομένων [ΠΛΥ302] Χειμερινό Εξάμηνο 2013

Τεχνικές Σχεδιασμού Αλγορίθμων

ΑΛΓΟΡΙΘΜΟΙ Άνοιξη I. ΜΗΛΗΣ

Αλγόριθμοι Ταξινόμησης Μέρος 1

p

Quicksort. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών

Εισαγωγή στους Αλγορίθμους

Αλγόριθμοι και Πολυπλοκότητα Φώτης Ε. Ψωμόπουλος, Περικλής Α. Μήτκας

Επιλογή. Πρόβλημα Επιλογής. Μέγιστο / Ελάχιστο. Εφαρμογές

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης

Διάλεξη 17η: Ταξινόμηση και Αναζήτηση

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

int Α[] = {4, 16, 22, 12, 9, 15, 10}; { 4, 9, 10, 12, 15, 16, 22 } Α[0]=4, Α[1]=9, Α[2]=10 { 4, 16,22, 12, 9, 15, 10} { 4, 12, 16, 22, 9, 15,16, 22 }

Σχεδίαση και Ανάλυση Αλγορίθμων

Επιλογή. Επιμέλεια διαφανειών: Δ. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

Διδάσκων: Παναγιώτης Ανδρέου

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

Ταξινόµηση. Παύλος Εφραιµίδης. οµές εδοµένων και

Εισαγωγή στην Ανάλυση Αλγορίθμων (1) Διαφάνειες του Γ. Χ. Στεφανίδη

8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση

Αναδρομικοί Αλγόριθμοι

Πληροφορική 2. Αλγόριθμοι

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

Πρόβληµα Επιλογής. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Επιλογή 1

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Επιλογή. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Quicksort Κεφάλαιο 7. Ε. Μαρκάκης Επίκουρος Καθηγητής

Κεφάλαιο 8.6. Πίνακες ΙI (Διάλεξη 17)

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Δείκτες & Πίνακες Δείκτες, Πίνακες

Μεθόδων Επίλυσης Προβλημάτων

ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ ΚΑΙ ΟΙΚΟΝΟΜΙΑΣ ΤΜΗΜΑ ΔΙΟΙΚΗΣΗΣ ΕΠΙΧΕΙΡΗΣΕΩΝ (ΠΑΤΡΑ) ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο

Ο αλγόριθμος Quick-Sort. 6/14/2007 3:42 AM Quick-Sort 1

Κατ οίκον Εργασία 1 Σκελετοί Λύσεων

Ταξινόμηση. 1. Γρήγορη ταξινόμηση 2. Ταξινόμηση με Συγχώνευση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

Δομές Δεδομένων και Αλγόριθμοι

Αναζήτηση και ταξινόμηση

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ

Transcript:

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Α. SelectionSort Ταξινόμηση με Επιλογή Β. InsertionSort Ταξινόμηση με Εισαγωγή Γ. MergeSort Ταξινόμηση με Συγχώνευση ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 2 Αλγόριθμοι ταξινόμησης Δοθέντων μιας συνάρτησης f (ordering function) και ενός συνόλου στοιχείων η ταξινόμηση συνίσταται στη μετάθεση των στοιχείων ώστε να μπουν σε μια σειρά η οποία να ικανοποιεί ή f ( x k 1 ) f ( xk2 f ( xk ) f ( xk2 x x,..., 1, 2 xk,x 1 k2 ) x n,..., x... )... f ( x 1 n αύξουσα σειρά φθίνουσα σειρά Ταξινόμηση Ονομάτων: f( Maria ) < f( Michalis ), δηλαδή η συνάρτηση f συγκρίνει τις δυο λέξεις αλφαριθμητικά. k n f ( Θα εξετάσουμε αλγόριθμους ταξινόμησης με κύριο γνώμονα την αποδοτικότητά τους (χρόνος εκτέλεσης, χρήση μνήμης). x k k n ) )

Bubble Sort Animation ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 3 https://visualgo.net/bn/sorting

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4 A. Ταξινόμηση με Επιλογή - Selection Sort Η Ταξινόμηση με Επιλογή (Selection Sort) βασίζεται στα ακόλουθα τρία βήματα: 1. επιλογή του ελάχιστου στοιχείου 2. ανταλλαγή με το i-οστό στοιχείο (i είναι μια μεταβλητή που αυξάνεται κατά ένα). 3. επανάληψη των βημάτων 1 και 2 για τα υπόλοιπα στοιχεία. Το ελάχιστο μεταξύ i στοιχείων μπορεί να βρεθεί με τη χρήση ενός while-loop, σε χρόνο Ο(i). Άρα ο χρόνος εκτέλεσης του Selection Sort είναι: n 1 i= 1 i = O( n 2 )

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 5 Ταξινόμηση με επιλογή: SelectionSort SelectionSort: ο αλγόριθμος αυτός ταξινομεί μία λίστα με στοιχεία. Σε κάθε βήμα i βρίσκει το i-οστό πιο μικρό στοιχείο και το τοποθετεί στην θέση i. Παράδειγμα: int x = {4, 8, 2, 1, 3, 5; swap Βήμα 1 0 1 2 3 4 5 4 8 2 1 3 5 Βήμα 2 Βήμα 3 Βήμα 4 Βήμα 5 Βήμα 6 1 8 2 4 3 5 1 2 8 4 3 5 1 2 3 4 8 5 1 2 3 4 8 5 1 2 3 4 5 8

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 6 Ταξινόμηση με επιλογή: SelectionSort (συν.) Πρότυπο Συνάρτησης void selectionsort(int x[], int length) Αλγόριθμος //ο πίνακας //το μέγεθος του x Αρχικοποίησε μία μεταβλητή min_index η οποία θα αποθηκεύει τη θέση του ελάχιστου αριθμού Με ένα βρόγχο for που θα ελέγχει ένα ένα τα στοιχεία του πίνακα (i<length) κάνε τα εξής: Θέσε σαν min_index το i Ψάξε ένα-ένα τα στοιχεία με ένα δεύτερο εσωτερικό βρόγχο αρχίζοντας από j=i Αν το στοιχείο που βρίσκεται στη θέση j είναι μικρότερο από το στοιχείο που βρίσκεται στη θέση min_index τότε θέσε min_index = j Με την έξοδο από το βρόγχο, αντάλλαξε τα στοιχεία που βρίσκονται στη θέση i με το στοιχείο που βρίσκεται στη θέση min_index

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 7 SelectionSort: Παράδειγμα Εκτέλεσης Θέση 0 1 2 3 4 5 Αρχικός Πίνακας 34 8 64 51 32 33 i=1 8 34 64 51 32 33 min_index Στοιχείο που θα εισαχθεί στην θέση i i=2 8 32 64 51 34 33 i=3 8 32 33 51 34 64 i=4 8 32 33 34 51 64 i=5 8 32 33 34 51 64 Δεν είναι υποχρεωτικό να γίνει αυτό το βήμα

Selection Sort Animation ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 8 https://visualgo.net/bn/sorting

SelectionSort: Υλοποίηση ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 9 void SelectionSort(int A[]) { int n = A.length; int min_index; int tmp; for(int i=0; i<n-1; i++){ min_index = i; for(int j=i+1; j<n; j++){ if(a[j]<a[min_index]) min_index=j; Αρχικοποίηση θέσης μικρότερου στοιχείου Βρες το μικρότερο στοιχείο tmp = A[i]; A[i] = A[min_index]; A[min_index]=tmp; Αντάλλαξε το μικρότερο στοιχείο με το τρέχον στοιχείο στη θέση [i]

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 10 SelectionSort: Ανάλυση Χρόνου Εκτέλεσης void SelectionSort(){ for (i=0; i<n-1; i++){ for (j=i+1; j<n; j++){ sum++; Εσωτερικός Βρόγχος Εξωτερικός Βρόγχος Εσωτερικός Βρόγχος: IL n = 1 j= i+ 1 = n ( i + 1) + 1 = n i Εξωτερικός Βρόγχος: n = n 1 i i= 0 n i= 0 = n 2 OL n n 1 = i= 0 ( n + 1) 2 IL = n i= 0 ( n i) ( 2 n )

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 11 B. Ταξινόμηση με Εισαγωγή - Insertion Sort Η Ταξινόμηση με Εισαγωγή (InsertionSort) εισάγει έναένα τα στοιχεία του συνόλου που εξετάζεται, στη σωστή τους θέση. Στο βήμα i: 1. υποθέτουμε πως ο πίνακας A[0..(i-1)] είναι ταξινομημένος, 2. εισάγουμε το στοιχείο Α[i] στην ακολουθία Α[0..(i-1)] στη σωστή θέση. Αυτό επιτυγχάνεται μετακινώντας όλα τα στοιχεία που είναι μεγαλύτερα του Α[i] μια θέση δεξιά. sorted notsorted {A[i] { 7 17 9 25 7 11

{ { { ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 12 { B. Ταξινόμηση με Εισαγωγή - Insertion Sort (συν.) Στο βήμα i: 1. υποθέτουμε πως ο πίνακας A[0..(i-1)] είναι ταξινομημένος, 2. εισάγουμε το στοιχείο Α[i] στην ακολουθία Α[0..(i-1)] στη σωστή θέση. Αυτό επιτυγχάνεται μετακινώντας όλα τα στοιχεία που είναι μεγαλύτερα του Α[i] μια θέση δεξιά. sorted notsorted {A[i] 1 7 17 9 25 7 11 sorted A[i] notsorted 9 2 3 7 17 7 11 {25 A[i] 9 7 17 25 notsorted 7 11 sorted

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 13 InsertionSort: Παράδειγμα Εκτέλεσης Θέση 0 1 2 3 4 5 Αρχικός Πίνακας 34 8 64 51 32 21 Με i=1 8 34 64 51 32 21 min_index Στοιχείο που θα εισαχθεί στην θέση i Με i=2 8 34 64 51 32 21 Με i=3 8 34 51 64 32 21 Με i=4 8 32 34 51 64 21 Με i=5 8 21 32 34 51 64

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 14 Insertion Sort: Παράδειγμα Εκτέλεσης 2 BEFORE:[8,4,8,43,3,5,2,] (Το κόκκινο δείχνει τα ταξινομημένα στοιχεία) i:1(index:4) >8 ( > Δείχνει τις μετακινήσεις) [4,8,8,43,3,5,2,] (Νέος Πίνακας) i:2(index:8) (Τίποτα δεν μετακινείται) [4,8,8,43,3,5,2,] i:3(index:43) (Τίποτα δεν μετακινείται) [4,8,8,43,3,5,2,] i:4(index:3) >43>8>8>4 [3,4,8,8,43,5,2,] i:5(index:5) >43>8>8 [3,4,5,8,8,43,2,] i:6(index:2) >43>8>8>5>4>3 [2,3,4,5,8,8,43,] AFTER:[2,3,4,5,8,8,43,]

Insertion Sort Animation ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 15 https://visualgo.net/bn/sorting

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 16 InsertionSort: Υλοποίηση void InsertionSort(int A[]){ int n = x.length; int index, i, j; for (i=1; i < n; i++) { index = A[i]; for (j=i; j>0; j--){ Τρέχον στοιχείο εισαγωγής μετακίνηση στοιχείων προς δεξιά if (A[j-1] <= index) { break; A[j] = A[j-1]; θέλουμε να μετακινήσουμε μόνο τα A[j-1] > index A[j] = index; sorted τοποθέτηση στοιχείου A[i] 9 notsorted { index=9 { 7 17 A[j-1] j=i 25 7 11

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 17 InsertionSort: Ανάλυση Χρόνου Εκτέλεσης void InsertionSort(){ for (i=1; i<n; i++){ for (j=i; j>0; j--){ sum++; Εσωτερικός Βρόγχος: Εξωτερικός Βρόγχος: Εσωτερικός Βρόγχος Εξωτερικός Βρόγχος IL i = 1 OL j=0 = n = i= 1 i IL = n i= 1 i = n ( n +1) 2 ( 2 n )

Σύγκριση InsertionSort και SelectionSort Υπάρχουν δυο κριτήρια: Βήματα (μέχρι να βρω ένα στοιχείο) και Μετακινήσεις (όταν το βρω, πόσα swap κάνω). Ο αλγόριθμος Selection sort απαιτεί πάντα Ο(n²) βήματα (δεν είναι δυνατή η γρήγορη έξοδος από τους βρόχους), έτσι η βέλτιστη περίπτωση είναι η ίδια με τη χείριστη περίπτωση. Στον αλγόριθμο Insertion Sort, είναι δυνατό να βγούμε από το δεύτερο βρόχο γρήγορα. Στη βέλτιστη περίπτωση (ο πίνακας είναι ήδη ταξινομημένος), ο χρόνος εκτέλεσης είναι της τάξης Ω(n) βήματα. Παρά τούτου, το Selection Sort είναι πιο αποδοτικός αν κρίνουμε τους αλγόριθμους με βάση τον αριθμό των μετακινήσεων (swaps) που απαιτούν: το selection sort απαιτεί Ο(n) μετακινήσεις, το insertion sort, απαιτεί Ο(n²) μετακινήσεις (στη χείριστη περίπτωση όπου ο αρχικός πίνακας είναι ταξινομημένος σε φθίνουσα σειρά). ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 18

Γ. Ταξινόμηση με Συγχώνευση (Merge sort) Η ταξινόμηση με συγχώνευση είναι διαδικασία διαίρει και βασίλευε ( Divide and Conquer: αναδρομική διαδικασία όπου το πρόβλημα μοιράζεται σε μέρη τα οποία λύνονται ξεχωριστά, και μετά οι λύσεις συνδυάζονται. ) Περιγραφή του Mergesort 1.Διαίρεση: Αναδρομικά μοιράζουμε τον πίνακα στα δύο μέχρι να φτάσουμε σε πίνακες μεγέθους ένα (DIVIDE) 2.Συγχώνευση: Ταξινομούμε αναδρομικά τους πίνακες αυτούς με την συγχώνευση γειτονικών πινάκων (χρησιμοποιώντας βοηθητικό πίνακα). (CONQUER) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 19

MergeSort: Βασική Ιδέα ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 20 (#στοιχείων αριστερά) n=7 (#στοιχείων δεξιά) n 7 n 7 = = 4 = 3 2 2 = 2 2 Divide (split) Conquer (merge)

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 21 Συγχώνευση 2 Λιστών Υποθέστε ότι θέλετε να συγχωνεύσετε 2 ταξινομημένες λίστες L1, L2 και να δημιουργήσετε μια νέα ταξινομημένη λίστα TEMP Διαδικασία 1. Τοποθέτησε τους δείκτες i, j στην κεφαλή κάθε λίστας. 2. Διάλεξε το μικρότερο από την λίστα L1 και L2 και τοποθέτησε τον στον πίνακα TEMP στην θέση κ 3. Προχώρησε τον δείκτη i (αν το μικρότερο στοιχείο ήταν από την λίστα L1) ή τον δείκτη j στην αντίθετη περίπτωση. 4. Επανέλαβε τα βήματα 2-4 μέχρι να εισαχθούν όλα τα στοιχεία στον TEMP Μέτα από 6 εκτελέσεις: L1 7 8 9 16 30 56 L2 3 5 15 28 60 TEMP 3 5 7 8 9 15 i min(l1[i],l2[j]) κ j (Το i,j ξεκινάνε από την αρχή της κάθε λίστας)

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 22 MergeSort: Υλοποίηση void MergeSort(int A[], int temp[], int l, int r){ // η συνθήκη τερματισμού της ανάδρομης if (l==r) return; int mid = (l+r)/2; // για ελαχιστοποίηση overflow(για μεγάλα l,r) // int mid = l + ((r - l) / 2); // μοιράζουμε αναδρομικά τον πίνακα MergeSort(A, temp, l, mid); MergeSort(A, temp, mid+1, r); DIVIDE // συνεχίζεται

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 23 MergeSort: Υλοποίηση (συν.) // Τώρα οι πίνακες [l..mid] και [mid+1..r] είναι // ταξινομημένοι Η διαδικασία συγχώνευσης int k=l, i=l, j=mid+1; // συγχώνευση στον temp μέχρι μια από // τις λίστες αδειάσει while ((i<=mid) && (j<=r)) { if (A[i]<A[j]){ temp[k] = A[i]; i++; else { temp[k] = A[j]; j++; k++; // συνεχίζεται MERGE

MergeSort: Υλοποίηση (συν.) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 24 // copy όλων των υπόλοιπων στοιχείων λίστας L1 while (i<=mid) { temp[k] = A[i]; k++;i++; // copy όλων των υπόλοιπων στοιχείων λίστας L2 while (j<=r) { temp[k] = A[j]; k++;j++; // αντιγραφή όλων των στοιχείων από TEMP -> A for (i=l; i<=r; i++) { A[i] = temp[i];

Merge Sort Animation ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 25 https://visualgo.net/bn/sorting

Παράδειγμα Εκτέλεσης Merge Sort ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 26 BEFORE:[8,4,8,43,3,5,2,1,10] Index: 0 1 2 3 4 5 6 7 8 0,8: [8,4,8,43,3, 5,2,1,10] 0,4: [8,4,8,43,3] 0,2: [8,4,8] 0,1: [8,4] 0,0: [8] 1,1: [4] Merging: [A0,A0] [A1,A1] => [4,8,] 2,2: [8] Merging: [A0,A1] [A2,A2] => [4,8,8,] 3,4: [43,3] 3,3: [43] 4,4: [3] Merging: [A3,A3] [A4,A4] => [3,43] divide divide divide Merging: [A0,A2] [A3,A4] => [3,4,8,8,43] 5,8: [5,2,1,10] 5,6: [5,2] 5,5: [5] 6,6: [2] divide Merging: [A5,A5] [A6,A6] => [2,5] 7,8: [1,10] divide 7,7: [1] 8,8: [10] Merging: [A7,A7] [A8,A8] => [1,10] Merging: [A5,A6] [A7,A8] => [1,2,5,10] Merging: [A0,A4] [A5,A8] => [1,2,3,4,5,8,8,10,43] AFTER:[1,2,3,4,5,8,8,10,43]

MergeSort: Ανάλυση Χρ. Εκτέλ. - Αναδρομή Το πρόβλημα μοιράζει αναδρομικά σε δυο μέρη την λίστα που θέλουμε να ταξινομήσουμε. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 27 Όταν φτάσουμε στην λίστα που έχει μέγεθος 1 τότε σταματά η αναδρομή και το πρόγραμμα αρχίζει να συνδυάζει (merge) τις επιμέρους λίστες. Παρατηρούμε ότι πάνω σε μια λίστα μεγέθους Ν η αναδρομή εκτελείται 2log 2 n φορές. Δηλαδή ο πίνακας μοιράζεται ως εξής: n, n/2, n/4,, 2, 1 void MergeSort(int A[], int temp[], int l, int r){ if (l==r) return; int mid = (l+r)/2; MergeSort(A, temp, l, mid); MergeSort(A, temp, mid+1, r); Θ(logn)

MergeSort: Ανάλυση Χρ. Εκτέλ. - Συγχώνευση Σε κάθε επίπεδο της ανάδρομης περνάμε μια φορά από το κάθε στοιχείο. Επομένως η συγχώνευση των στοιχείων σε κάθε επίπεδο της εκτέλεσης χρειάζεται γραμμικό χρόνο Θ(n). Σημειώστε ότι η διαδικασία απαιτεί τη χρήση βοηθητικού πίνακα. Μπορούμε να χρησιμοποιούμε τον ίδιο βοηθητικό πίνακα temp για όλες τις (αναδρομικές) κλήσεις του ΜergeSort. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 28

MergeSort: Ανάλυση Χρ. Εκτέλ. - Συνολικός Η αντιγραφή και η συγχώνευση παίρνουν χρόνο Θ(n) και η αναδρομή παίρνει χρόνο Θ(log n). Συνολικά Θ(n log n). Ο χρόνος εκτέλεσης εκφράζεται και από την αναδρομική εξίσωση Τ(0) = Τ(1) = 1 Τ(n) = 2 T(n/2) + n η οποία μπορεί να λυθεί με το Master Theorem ή με την μέθοδο της αντικατάστασης. Πλεονέκτημα MergeSort: O συνολικός χρόνος εκτέλεσης είναι Θ(n log n) (σε αντίθεση με το SelectionSort (Θ(n 2 )) και το InsertionSort (Ο(n 2 )) Μειονέκτημα: Απαιτεί τη χρήση βοηθητικού πίνακα (δηλαδή χρειάζεται διπλάσιο χώρο αποθήκευσης για την εκτέλεση του). Αυτό δεν καθιστά την μέθοδο πολύ εύχρηστη. ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 29