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

Σχετικά έγγραφα
Αλγόριθµοι Ταξινόµησης

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

p

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός Η/Υ. Ενότητα 8: Ειδικά Θέματα Αλγορίθμων

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

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης

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

Ταχεία Ταξινόμηση Quick-Sort

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

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

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

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

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

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

Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Ουρές Προτεραιότητας Σωροί υλοποίηση και πράξεις Ο αλγόριθμος ταξινόμησης HeapSort

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

ιαφάνειες παρουσίασης #4

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

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

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

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

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

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

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

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

Διαδικασιακός Προγραμματισμός

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

ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ

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

1η Σειρά Γραπτών Ασκήσεων

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

a 1 a 2 a n. 3. i = j 1 5. A[i + 1] = A[i] 6. i = i 1

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φ Ρ Ο Ν Τ Ι Σ Τ Η Ρ Ι Ο 1 : ΤΑΞΙΝΟΜΗΣΗ Δ Ρ Ι Τ Σ Α Σ Η Λ Ι Α Σ Υ Π Ο Ψ Η Φ Ι Ο Σ Δ Ι Δ Α Κ Τ Ο Ρ Α Σ

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

ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 4: Διαίρει και Βασίλευε. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

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

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

Transcript:

Αλγόριθμοι Ταξινόμησης Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης BuubleSort, SelectionSort, InsertionSort, Merger Sort, Quick Soft ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι - Αλγόριθμοι ταξινόμησης Δοθέντων μιας συνάρτησης f (ordering function) και ενός συνόλου στοιχείων x, x,..., x n η ταξινόμηση συνίσταται στη μετάθεση των στοιχείων ώστε να μπουν σε μια σειρά x, x,..., x η οποία να ικανοποιεί ή f ( x k k ) k f ( x k k n )... f ( x k n ) f ( x k ) f ( x k )... f ( x k n ). Θα εξετάσουμε αλγόριθμους ταξινόμησης με κύριο γνώμονα την αποδοτικότητά τους (χρόνος εκτέλεσης, χρήση μνήμης). ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

Ταξινόμηση Φυσαλίδας (Bubble Sort) Ενόσω ο πίνακας δεν είναι ταξινομημένος διαδοχικά σύγκρινε γειτονικά στοιχεία του πίνακα και ενάλλαξε τα περιεχόμενά τους εάν δεν είναι στη ζητούμενη σειρά Ο αλγόριθμος συνεπάγεται διπλή επανάληψη (nested) ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι - 5 5 5 5 5 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

5 5 5 5 5 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -5 5 5 5 5 5 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -6

5 5 5 5 5 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -7 5 5 5 5 Tαξινομημενο! 5 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -8

Παρατηρήσεις Bubble Sort Κάθε προσπέλαση καθορίζει τη θέση τουλάχιστο ενός στοιχείου. η το μέγιστο στοιχείο η το αμέσως επόμενο μεγαλύτερο κτλ Μετά απο κάθε προσπέλαση μείωση αριθμών στοιχείων που εξετάζονται κατά ενα Εαν σε μια προσπέλαση δεν γίνει εναλλαγή: ταξινομημένο (sorted)! ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -9 5 5 5 5 5 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

5 5 5 5 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι - 5 5 5 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

5 5 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι - 5 Ταξινομημένο! ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

void bubble_sort(int table[], int size) { int Sorted, len = size, k; do{ Sorted = ; /*υπόθεση πίνακας ταξινομημένος */ for (k = ; k < len; k++) if (table[k]<table[k+]){ swap(&table[k],&table[k+]); Sorted = ; --len; while (!Sorted && len > ); ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -5 #define SIZE 5 int less(int x, int y) { return x < y; int greater(int x, int y) { return x > y; int main () { int table[size] = {9,,5,,7; bubble_sort(less, table, 5); display_table(table,size); bubble_sort(greater, table,5); display_table(table,size); ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -6

σχεση (φθινουσα, αυξουσα) void bubble_sort(int compare(int,int), int table[], int size) { int Sorted, len = size, k; do{ Sorted = ; /*υπόθεση πίνακας ταξινομημένος */ for (k = ; k < len; k++) if (compare(table[k],table[k+])){ swap(&table[k],&table[k+]); Sorted = ; len; while (!Sorted && len > ); ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -7 Ταξινόμηση με Επιλογή (Selection Sort) Η ταξινόμηση με επιλογή βασίζεται στα ακόλουθα τρία βήματα:. Όσο δεν έχουν ταξινομηθεί τα στοιχεία του πίνακα. Επιλογή του ελάχιστου στοιχείου από το εκάστοτε μη ταξινομημένο τμήμα του πίνακα. Ανταλλαγή με το πρώτο στοιχείο του εκάστοτε μη ταξινομημένου τμήματος του πίνακα Το ελάχιστο μεταξύ i στοιχείων ενός πίνακα μπορεί να βρεθεί με τη σειριακή αναζήτηση σε χρόνο Ο(i). Άρα ο χρόνος εκτέλεσης του Επιλογής (Selection Sort) είναι n i= i = O( n ) ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -8

Διαδικασία Selection Sort void SelectionSort(int A[],int n){ int k; int temp; for (int i=; i<n; i++){ k=i; for (j = i+; j <= n; j++) if (A[j]<A[k]) k=j; swap( A[i], A[k]); ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -9 Παράδειγμα Selection Sort Θέση 5 6 Αρχική Τιμή 8 6 5 Με i= 8 6 5 Με i= 8 6 5 Με i= 8 5 6 Με i= 8 5 6 Με i=5 8 5 6 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

Ταξινόμηση με εισαγωγή (Insertion Sort) Η ταξινόμηση με εισαγωγή εισάγει ένα-έναταστοιχείατουσυνόλου που εξετάζεται, στη σωστή τους θέση. Στη φάση i:. Αν ο πίνακας A[..(i-)] είναι ταξινομημένος,. Μετακινούμε όλα τα στοιχεία που είναι μεγαλύτερα του Α[i] μια θέση δεξιά. Εισάγουμε το στοιχείο Α[i] στην ακολουθία Α[..(i-)] στη σωστή θέση, Έστω μια ταξινομημένη ακολουθία από i στοιχεία. Ένα στοιχείο μπορεί να εισαχθεί στη σωστή του θέση μέσα στην ακολουθία σε χρόνο Ο(i). Άρα ο χρόνος εκτέλεσης της Insertion Sort είναι n i = O( n ) i= ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι - Διαδικασία Insertion Sort void ΙnsertionSort(int A[], int n){ int temp; for (int i=; i<=n; i++){ temp=a[i]; for (int j=i; (j > )&&(temp < A[j-]); j--) A[j]=A[j-]; A[j]=temp; ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

Παράδειγμα Insertion Sort Θέση 5 6 Αρχική Τιμή 8 6 5 Με i= 8 6 5 Με i= 8 6 5 Με i= 8 5 6 Με i=5 8 5 6 Με i=6 8 5 6 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι - Σύγκριση Insertion Sort και Selection Sort Γιατησύγκρισηεξετάζουμε Το πλήθος συγκρίσεων Το πλήθος μετακινήσεων των δεδομένων Τον απαιτούμενο χώρο μνήμης (in place) Χείριστη περίπτωση, Βέλτιστη περίπτωση και Μέση περίπτωση Ο αλγόριθμος Selection sort απαιτεί Ο(n²) συγκρίσεις και Ο(n) μετακινήσεις έτσι η βέλτιστη περίπτωση είναι η ίδια με τη χείριστη περίπτωση. Στον αλγόριθμο Insertion Sort, στη βέλτιστη περίπτωση, όπου ο πίνακας είναι ήδη ταξινομημένος, ο χρόνος εκτέλεσης είναι της τάξης Ο(n). Παρά τούτου, η Selection Sort είναι πιο αποδοτική αν κρίνουμε τους αλγόριθμους με βάση τον αριθμό των μετακινήσεων (swaps) που απαιτούν: η selection sort απαιτεί Ο(n), μετακινήσεις, το insertion sort, απαιτεί Ο(n²) μετακινήσεις (στη χείριστη περίπτωση όπου ο αρχικός πίνακας είναι ταξινομημένος σε φθίνουσα σειρά). ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

Ταξινόμηση με Συγχώνευση (Merge sort) Η ταξινόμηση με συγχώνευση είναι διαδικασία διαίρει και βασίλευε (divide and conquer, δηλ. αναδρομική διαδικασία όπου το πρόβλημα χωρίζεται σε όμοια μικρότερα υπο-προβλήματα, τα οποία λύνονται ξεχωριστά, και μετά οι λύσεις συνδυάζονται.). Χρόνος Εκτέλεσης: Ο(n log n). Απαιτεί τη χρήση βοηθητικού πίνακα Περιγραφή της Mergesort. Μοιράζουμε τον πίνακα στα δύο.. Αναδρομικά ταξινομούμε τα δύο μέρη.. Συγχωνεύουμε τα αποτελέσματα των πιο πάνω αναδρομικών ταξινομήσεων. Παρατηρούμε ότι κατά την i-οστή κλήση της αναδρομικής διαδικασίας, τμήματα μεγέθους i είναι ταξινομημένα. Άρα το Merge Sort χρειάζεται να κληθεί log n φορές μέχρις ότου να ταξινομηθεί ολόκληρος ο πίνακας. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι - Παραδείγματα διαδοχικών κλήσεων Δεδομένο Εισόδου: 57 8 5 8 6 7 Μετά την πρώτη εκτέλεση του Μergesort 57 8 8 5 6 7 Μετά τη δεύτερη εκτέλεση του Μergesort 8 57 8 5 6 7 Μετά την τρίτη εκτέλεση του Μergesort 8 5 6 8 57 7 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -6

Η διαδικασία συγχώνευσης Δύο ταξινομημένες λίστες μπορούν να συγχωνευθούν σε μία ταξινομημένη λίστα σε χρόνο γραμμικό ως προς το άθροισμα των μεγεθών των δύο λιστών. Η διαδικασία απαιτεί τη χρήση βοηθητικού πίνακα. Μπορούμε να χρησιμοποιούμε τον ίδιο βοηθητικό πίνακα temp για όλες τις κλήσεις του ΜergeSort. Μετά από τις δύο αναδρομικές κλήσεις του Μergesort στον αρχικό πίνακα Α, τα δύο μισά του πίνακα είναι ταξινομημένα. Αντιγράφουμε τα δύο μισά στο βοηθητικό πίνακα temp, και τα συγχωνεύουμε πίσω στον Α. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -7 Παράδειγμα εκτέλεσης Μerge (Συγχώνευσης) Οι αρχικοί πίνακες και οι αρχικοί δείκτες : * 7 6 * 6 8 Συγκρίνουμε τα στοιχεία που δείχνονται από τους δείκτες, διαλέγουμε και τυπώνουμε το μικρότερο και προχωρούμε το δείκτη αυτού: *7 6 * 6 8 Οutput: Επαναλαμβάνουμε μέχρις ότου τα στοιχεία του ενός πίνακα εξαντληθούν οπότε τυπώνουμε τα υπόλοιπα στοιχεία του άλλου πίνακα: *7 6 *6 8 Οutput:, *7 6 6 *8 Output:,, 6 7 * 6 6 *8 Output:,, 6, 7 7 *6 6 8 * Output:,, 6, 7,, 8 Output:,, 6, 7,, 8,, 6 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -8

Διαδικασία Merge Sort void MergeSort(int A[], int temp[],int l, int r){ if (l==r) return; int mid = (l+r)/; Mergesort(A, temp, l, mid); Mergesort(A, temp, mid+, r); int i, j, k; /* Αντιγραφή των δύο τμημάτων του Α στον temp */ for (i=l; i<= r; i++) temp[i] = A[i]; /* Συγχώνευση */ for ( i=l,j=mid+,k=l; i<=mid && j<=r && k<=r; k++) if (temp[i]<temp[j]) A[k]= temp[i]; i++; else A[k]= temp[j]; j++; for ( ; i <= mid ; i++, k++ ) A[k] = temp[i]; for ( ; j <= r ; j++, k++ ) A[k] = temp[j]; ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -9 Παράδειγμα Merge Sort Δεδομένο Εισόδου: 5 6 7 8 6 7 8 5 l=, r=8, mid = Μετά από την εκτέλεση των Mergesort(Α,temp,,) και Mergesort(A, temp, 5, 8) 5 6 7 8 7 6 5 8 Μετά από την αντιγραφή ο πίνακας temp περιέχειταίδιαστοιχείαόπωςοα Μετά από την εκτέλεση των τελευταίων τριών for-βρόχων ο Α περιέχει 5 6 7 8 5 7 8 6 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

Μερικά Σχόλια Η αντιγραφή και η συγχώνευση απαιτούν χρόνο Ο(n). Στη χείριστη περίπτωση ο χρόνος εκτέλεσης ικανοποιεί:. Βάση της αναδρομής Τ() =. Αναδρομικό βήμα Τ(n) = T(n/) + n Άρα ο χρόνος εκτέλεσης είναι Θ(n log n). ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι - Κάτω φράγμα για αλγόριθμους ταξινόμησης Γνωρίζουμε ότι το πρόβλημα της ταξινόμησης μπορεί να λυθεί σε χρόνο Ο(n log n) (Heap Sort και Merge Sort). Υπάρχει πιο αποδοτικός αλγόριθμος ταξινόμησης; Θα δείξουμε ότι για την ταξινόμηση ισχύει Ω(n log n). Ως μονάδα μέτρησης θα χρησιμοποιήσουμε τον αριθμό συγκρίσεων. Υποθέτουμε ότι κάθε στοιχείο του πίνακα που θέλουμε να ταξινομήσουμε είναι διαφορετικό από όλα τα άλλα. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

Σειριακή διάταξη στοιχείων και ταξινόμηση Η συμπεριφορά ενός αλγόριθμου ταξινόμησης εξαρτάται μόνο από τη σχετική σειρά μεταξύ των στοιχείων που ταξινομούμε και όχι από τα συγκεκριμένα στοιχεία. Δηλαδή: αν Α και Β είναι δύο πίνακες τέτοιοι ώστε για κάθε i και j, A[i] < A[j] αν και μόνο αν Β[i] < B[j], τότε ο αριθμός των βημάτων (όπως και ο αριθμός των συγκρίσεων) που θα εκτελέσει κάποιος αλγόριθμος με δεδομένο εισόδου Α θα είναι ο ίδιος με τον ανάλογο αριθμό που θα εκτελέσει με δεδομένο εισόδου Β. Άρα, η σειριακή διάταξη των στοιχείων του δεδομένου εισόδου Α, Α[], Α[],, Α[n], έχει κύρια σημασία. Υπάρχουν n! διαφορετικές τοποθετήσεις n ξεχωριστών στοιχείων. Άρα υπάρχουν n! διαφορετικά δεδομένα εισόδου. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι - Ανάλυση Αλγόριθμων Ταξινόμησης Θα περιγράψουμε τη συμπεριφορά ενός αλγόριθμου ως ένα δένδρο αποφάσεων (decision tree). Στη ρίζα επιτρέπονται όλες οι διαφορετικές σειρές των στοιχείων. Ας υποθέσουμε πως ο αλγόριθμος συγκρίνει τα δύο πρώτα στοιχεία Α[] και Α[]. Τότε το αριστερό παιδί του δένδρου αντιστοιχεί στην περίπτωση Α[] < Α[] και το δεξί παιδί της ρίζας στην περίπτωση Α[] < Α[]. Σε κάθε κόμβο, μια σειρά στοιχείων είναι νόμιμη αν ικανοποιεί όλες τις συγκρίσεις στο μονοπάτι από τη ρίζα στον κόμβο. Τα φύλλα αντιστοιχούν στον τερματισμό του αλγόριθμου και κάθε φύλλο περιέχει το πολύ μια νόμιμη σειρά στοιχείων. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

b<c Δένδρο αποφάσεων για στοιχεία a<b<c a<c<b c<a<b a<b a<b<c a<c<b b<a<c b<c<a c<a<b c<b<a b<a b<a<c b<c<a c<b<a c<b b<c c<b a<b<c a<c<b c<a<b b<a<c b<c<a c<b<a a<c c<a a<c c<a a<c<b c<a<b b<a<c b<c<a ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -5 Κάτω φράγμα Έστω P ένας αλγόριθμός ταξινόμησης, και έστω T το δένδρο αποφάσεων του P με δεδομένο εισόδου μεγέθους n. Ο αριθμός των φύλλων του Τ, m με n! <= m Το ύψος του Τ είναι ένα κάτω φράγμα του χείριστου χρόνου εκτέλεσης του αλγόριθμου P. Για ένα δυαδικό δένδρο ύψους h έχουμε n!<= m <= h- φύλλα. Άρα n! <= h- και το Τ έχει ύψος το λιγότερο log n! Αλλά logn!=log(n(n-)(n-).)=logn+log(n-)+ + log+log >=logn+log(n-)+ + logn/>=(n/)log(n/)>=(n/)logn-n/ Συμπέρασμα: P Ω(log n!) = Ω(n log n). H μέση περίπτωση είναι επίσης n log n. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -6

Αλγόριθμος Quick Sort Πρακτικά, ο πιo γρήγορος αλγόριθμος. Στη χείριστη περίπτωση ο αλγόριθμος Quick Sort είναι Ο(n²). Τέτοιες περιπτώσεις όμως έχουν μικρή πιθανότητα. Έχουμε μάλιστα ότι: Στη μέση περίπτωση ο αλγόριθμος είναι Ο(n log n). Τα περισσότερα συστήματα χρησιμοποιούν το Quick Sort (π.χ. Unix). Όπως και το Merge Sort, παράδειγμα αλγόριθμου διαίρει και βασίλευε. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -7 Περιγραφή του Quick Sort Aν το δεδομένο εισόδου περιέχει ή στοιχεία δεν κάνουμε τίποτα. Διαφορετικά, αναδρομικά:. διαλέγουμε ένα στοιχείο p, το οποίο ονομάζουμε το οδηγό στοιχείο (the pivot) και το αφαιρούμε από το δεδομένο εισόδου.. χωρίζουμε τον πίνακα σε δύο μέρη S και S, όπου το S περιέχει όλα τα στοιχεία του πίνακα που είναι μικρότερα από το p, και το S περιέχει τα υπόλοιπα στοιχεία (όλαταστοιχείαπουείναιμεγαλύτερααπότοp).. Καλούμε αναδρομικά τον αλγόριθμο στο S, και παίρνουμε απάντηση το Τ, και στο S, και παίρνουμε απάντηση το Τ.. Επιστρέφουμε τον πίνακα Τ, p, T. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -8

Παράδειγμα εφαρμογής του Quicksort 7 5 8 6 5 9 7 χωρίζουμε με οδηγό το 8 7 6 8 5 5 9 7 Quicksort Quicksort,, 5, 6,,, 5, 7, 7, 9 Αποτέλεσμα:,, 5, 6,,, 8,, 5, 7, 7, 9 ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -9 ΟΑλγόριθμοςQuicksort void Quicksort(int A[], int l, int r){ if (r-l<=) return; /* Εντοπισμός της θέσης του οδηγού στοιχείου */ int pivotindex = FindPivot(A, l, r); int pivot = A[pivotIndex]; /* Τοποθέτηση του οδηγού στοιχείου στην τελευταία θέση */ swap(a, pivotindex, r); /* Εντοπισμός της τελικής θέσης του οδηγού στοιχείου */ int k = partition (A, l, r-, pivot); /* Τοποθέτηση του οδηγού στοιχείου στην τελική του θέση */ swap(a, k, r); Quicksort(A, l, k-); QuickSort(A, k+, r); όπου η διαδικασία FindPivot(A,l,r) βρίσκει και επιστρέφει τη θέση του οδηγού του Α[l r] και η διαδικασία partition (A,l,r-,pivot), χωρίζει τον πίνακα Α[l r-] έτσι ώστε Α[l..k-] να περιέχει στοιχεία < pivot, A[k r-] να περιέχει στοιχεία >pivot, και επιστρέφει την τιμή k. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι

Διαδικασία FindPivot(A, i, j) Η αποδοτικότητα του αλγόριθμου βασίζεται στην επιλογή του μεσαίου στοιχείου οδηγού (pivot). Το οδηγό θα πρέπει να χωρίσει τον πίνακα Α, περίπου, σε δύο μισά. Ιδανικά, το οδηγό θα θέλαμε να είναι ακριβώς το μεσαίο των στοιχείων. Από την άλλη, πρέπει να μπορούμε να βρίσκουμε το οδηγό γρήγορα, σε χρόνο Ο(). Πρώτη προσπάθεια: διαλέγουμε το πρώτο στοιχείο. Κακή επιλογή γιατί συχνά το δεδομένο εισόδου είναι σχεδόν ταξινομημένο. Κατά συνέπεια, τα δύο μέρη θα διαφέρουν κατά πολύ ως προς τον αριθμό των στοιχείων τους, και ο αλγόριθμος θα είναι συχνά της τάξης Ο(n²). Καλύτερη επιλογή, το στοιχείο που βρίσκεται στη μέση του πίνακα: int FindPivot(int A[],int l,int r){ return ((l+r)/); ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι - Διαδικασία Partition(A, l, r, p) Με δεδομένο εισόδου τον πίνακα Α[l r], και pivot p, θέλουμε να χωρίσουμε τον πίνακα σε δύο μέρη ως προς το p. To πιο πάνω πρέπει να επιτευχθεί χωρίς τη χρήση δεύτερου πίνακα. Βασική Ιδέα:. Όσο l<r επαναλαμβάνουμε τα εξής i. όσο τα στοιχεία που βρίσκεις είναι μικρότερα του p, μετακίνησε το l προς τα δεξιά ii. όσο τα στοιχεία που βρίσκεις είναι μεγαλύτερα του p, μετακίνησε το r προς τα αριστερά iii. αντάλλαξε τα στοιχεία που δείχνονται από τα l και r. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

ΗδιαδικασίαPartition int partition(int A[], int l, int r, int p) while (l<r) { /*μετακίνηση του l προς τα δεξιά */ while (A[l]< p) l++; /* μετακίνηση του r προς τα αριστερά */ while (A[r]> p && r>= l) r--; /* ανταλλαγή των Α[l] και A[r] */ if (l<r) swap (A, l, r); else break; return l; ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι - Παράδειγμα Εκτέλεσης Partition Δεδομένο Εισόδου: 5 6 7 8 7 6 7 8 8 75 pivot = 8, μετακίνηση του οδηγού στο τέλος (swap(, 8)): 7 6 7 75 8 8 l r εκτέλεση του Partition(A, l, r, 8): 7 6 7 75 8 8 l r 6 7 75 7 8 8 l r 6 7 75 7 8 8 l r 6 7 75 7 8 8 r l ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -

Παράδειγμα Εκτέλεσης Partition ΗδιαδικασίαPartition(A,, 7, 8) επιστρέφει την τιμή l=5 και ακολουθείται από τη μετακίνηση swap(5, 8): 6 7 8 7 8 75 Στη συνέχεια εκτελούνται αναδρομικά οι διαδικασίες Quicksort(A,,), Quicksort(A, 6, 8), καιέτσιεπιστρέφεταιτοεπιθυμητό αποτέλεσμα. Σημειώστε ότι μετά την εκτέλεση της Partition το στοιχείο 8 (και σε κάθε κλήση της αναδρομής το οδηγό στοιχείο) τοποθετείται στη τελική του θέση στον ταξινομημένο πίνακα. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -5 Ανάλυση του Χρόνου Εκτέλεσης Η εύρεση του οδηγού απαιτεί χρόνο Ο() και η διαδικασία Partition(Α, l, r, p) εκτελείται σε χρόνο O(r-l) O(n). Έστω Τ(n) o χρόνος εκτέλεσης του Quicksort σε δεδομένο εισόδου μεγέθους n. Για τη βάση της αναδρομής έχουμε: T() = T() = και για n > T(n) = T(i) + T(n-i-) + cn, όπου i είναι το μέγεθος του αριστερού τμήματος μετά από την Partition και cn είναι ο χρόνος της Partition. Χείριστη περίπτωση: i = ή n-. Τότε Τ(n) = T(n-) + cn και Τ(n) O(n²). Βέλτιστη περίπτωση: i = n/ T(n) = T(n/) + cn και Τ(n) O(n log n). ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -6

Ανάλυση Μέσης Περίπτωσης Θεωρούμε όλες τις πιθανές περιπτώσεις της συμπεριφοράς της διαδικασίας Partition(A, l, r, p), όπου r-l = n-. Υπάρχουν n τέτοιες περιπτώσεις: το αριστερό κομμάτι του partition μπορεί να έχει από μέχρι n- στοιχεία. Ας υποθέσουμε πως οι n αυτές περιπτώσεις είναι ισοπίθανες, δηλαδή η κάθε μια έχει πιθανότητα /n. Τότε η μέση περίπτωση του Τ(n) δίνεται ως n T ( n) = c n + [ T ( i) + T ( n i)] i= n n = c n + T ( i) i= n Επίλυση της αναδρομικής σχέσης δίνει T(n) O(n log n) (βλ. Weiss σελ. -) ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -7 Παρατηρήσεις Πως δουλεύει η διαδικασία Partition όταν πολλά στοιχεία του πίνακα είναι ίσα με το οδηγό (pivot); Υπάρχουν άλλες στρατηγικές για επιλογή του οδηγού (pivot);. pivot = mid(a[], A[n], A[n/]). Επέλεξε τυχαία κάποιο στοιχείο του πίνακα Στην πράξη, για δεδομένα εισόδου μικρού μεγέθους, η InsertionSort δουλεύει πιο αποδοτικά. Επομένως μια καλή στρατηγική θα ήταν να συνδυάσουμε τους δύο αλγόριθμους ώστε σε μικρούς πίνακες (π.χ. n ) να χρησιμοποιείται το ΙnsertionSort και σε μεγάλους το Quicksort: στη διαδικασία Quicksort ανταλλάξτε την πρώτη γραμμή με την εξής: if (r-l)<= InsertionSort(A[l r], r-l); Ακόμα ένας πιθανός τρόπος βελτίωσης του χρόνου εκτέλεσης είναι η χρήση στοίβας αντί αναδρομής. ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι -8