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

Σχετικά έγγραφα
Δομές Δεδομένων & Αλγόριθμοι

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

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

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

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

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

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

1o Φροντιστήριο ΗΥ240

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

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

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

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

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

Προγραµµατισµός 1 Ταξινόµηση - Αναζήτηση

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

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

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

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

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

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές

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

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη

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

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

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

Δομές Δεδομένων Ενότητα 2

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

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης

ΗΥ-150. Ταξινόµηση και Αναζήτηση

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

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

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

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

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

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

Προγραµµατιστικές Τεχνικές

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

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

Δοµές Δεδοµένων. 9η Διάλεξη Ταξινόµηση - Στοιχειώδεις µέθοδοι. Ε. Μαρκάκης

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

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

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

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

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

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

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Πληροφορική II. Ενότητα 2 : Αλγόριθμοι. Δρ. Γκόγκος Χρήστος

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

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

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

Ελληνική Δημοκρατία Τεχνολογικό Εκπαιδευτικό Ίδρυμα Ηπείρου. Προγραμματισμός Ι. Ενότητα 8 : Πίνακες IΙ. Αλέξανδρος Τζάλλας

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

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

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

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

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

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

ΜΥΥ105: Εισαγωγή στον Προγραμματισμό. Αναζήτηση και Ταξινόμηση Χειμερινό Εξάμηνο 2016

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

242 -ΕισαγωγήστουςΗ/Υ

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

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

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

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

Προγραμματιστικές Τεχνικές

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

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

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

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 8: Αναζήτηση και ταξινόμηση

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

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

3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. n! = 1*2*3*..(n-1)*n. n! = 1 αν n = 0, = n*(n-1)! αν n > ΑΝΑ ΡΟΜΗ Εισαγωγή

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

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

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

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 }

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

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

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

ΜΥΥ105: Εισαγωγή στον Προγραµµατισµό. Αναζήτηση και Ταξινόµηση Χειµερινό Εξάµηνο 2014

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αρχές Ανάλυσης Αλγορίθµων Κεφάλαιο 2. Ε. Μαρκάκης Επικ. Καθηγητής

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

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

Δομημένος Προγραμματισμός (ΤΛ1006)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Προγραμματιστικές Τεχνικές

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

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

ΒΑΣΙΚΕΣ ΕΠΕΞΕΡΓΑΣΙΕΣ ΜΟΝΟΔΙΑΣΤΑΤΩΝ ΚΑΙ ΔΙΣΔΙΑΣΤΑΤΩΝ ΠΙΝΑΚΩΝ ΟΙ ΠΙΟ ΣΗΜΑΝΤΙΚΟΙ ΑΛΓΟΡΙΘΜΟΙ

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

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

Πελάτες φθάνουν στο ταμείο μιας τράπεζας Eνα μόνο ταμείο είναι ανοικτό Κάθε πελάτης παρουσιάζεται με ένα νούμερο - αριθμός προτεραιότητας Όσο ο

Προγραμματιστικές Τεχνικές

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

Ανάλυση αλγορίθμων. Χρόνος εκτέλεσης: Αναμενόμενη περίπτωση. - απαιτεί γνώση της κατανομής εισόδου

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Φροντιστήριο 2 ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ

Transcript:

Δομές Δεδομένων & Αναζήτηση & Ταξινόμηση 1

Αναζήτηση Έχω έναν πίνακα Α με Ν στοιχεία. Πρόβλημα: Βρες αν το στοιχείο x ανήκει στον πίνακα Αν ο πίνακας είναι αταξινόμητος τότε μόνη λύση σειριακή αναζήτηση for (i=0; i<n; i++) if (A[i]==x) return i;//th thesh toy stoixeioy return -1; //-1 dhlonei apotyxia Χειρότερη και Μέση περίπτωση: O(N) 2

Αναζήτηση σε πίνακες Σειριακή αναζήτηση Τα στοιχεία διατρέχονται κατά σειρά Κόστος: O(n) 12 9 72 22 42 99 14 61 (1) (2) (3) (4) (5) n = 8 x = 42 Δομές Δεδομένων & Εργαστήριο Γνώσης & Ευφυούς 3

Αναζήτηση σε πίνακες Υλοποίηση σε C int ssearch (int a[], int n, int x) { int i; } for (i = 0; i < n; i++) if (a[i] == x) return i; return -1; Δομές Δεδομένων & Εργαστήριο Γνώσης & Ευφυούς 4

Παράδειγμα Εύρεση ενός στοιχείου σε αταξινόμητο πίνακα. Χειρότερη Περίπτωση: Ψάχνω όλον τον πίνακα δηλ. n συγκρίσεις => Ο(n) Μέση Περίπτωση: Θεωρώ ισοπίθανο το να βρεθεί το στοιχείο που ψάχνω σε οποιαδήποτε από τις θέσεις του πίνακα. Από ορισμό έχω: A( n) 1 k n 1/ n k 1 2... n n n n n( n 1)/2 n ( n 1)/2 O( n) Δομές Δεδομένων & Εργαστήριο Γνώσης & Ευφυούς 5

Δυαδική Αναζήτηση Αν ο πίνακας είναι ταξινομημένος μπορώ να εφαρμόσω δυαδική αναζήτηση (binary search)! ΜΕΘΟΔΟΛΟΓΙΑ - Πήγαινε στο μεσαίο στοιχείο του πίνακα (έστω Α[mid]) - Αν Α[mid]==x επέστρεψε επιτυχία - Αν Α[mid]<x τότε πήγαινε στη μέση του υποπίνακα mid+1..n-1 - Αν Α[mid]>x τότε πήγαινε στη μέση του υποπίνακα 0..mid-1 - Συνέχισε αναδρομικά 6

Παράδειγμα: Δυαδική Αναζήτηση Πόσα στοιχεία εξετάζουμε στη χειρότερη περίπτωση? Απάντηση: 4 (= log 2 16) Δομές Δεδομένων & Εργαστήριο Γνώσης & Ευφυούς 7

Αναζήτηση σε πίνακες Δυαδική αναζήτηση Ο πίνακας πρέπει να είναι ταξινομημένος Κόστος: O(logn) Δομές Δεδομένων & 3 7 14 22 42 61 72 99 (1) (3) (2) Άλλες μέθοδοι αναζήτησης Εργαστήριο Γνώσης & Ευφυούς n = 8 x = 42 Μικρότερο κόστος περισσότερος χώρος Πίνακες κατακερματισμού (hash tables) 8

Δυαδική Αναζήτηση-Κώδικας #include <iostream> using namespace std; int binarysearch (int A[], int x, int left, int right){ int mid; if (left>right) return -1; mid=(left+right)/2; if (A[mid]==x) return mid; if (A[mid]<x) return binarysearch(a,x,mid+1,right); else return binarysearch(a,x,left,mid-1); } void main(){ int A[10]={0,1,2,3,4,5,6,7,8,9}; cout << binarysearch(a,8,0,9) << endl; cout << binarysearch(a,10,0,9) << endl; } 9

Δυαδική Αναζήτηση (συν.) // Επιστροφή της θέσης του στοιχείου με τιμή // x στον ταξινομημένο πίνακα a μεγέθους n. int BinarySearch(int a[], int n, int x) { int left = 0; int right = n-1; // όρια πίνακα while (left <= right) { // σταμάτα όταν τα // όρια ταυτιστούν int middle = (left + right) / 2; // έλεγχος του μεσαίου στοιχείου if (x == a[middle]) return middle; // βρέθηκε if (x > a[middle]) left = middle + 1; else right = middle 1; // αναζήτηση στο δεξί ή αριστερό μισό, αντίστοιχα } return -1; // ένδειξη ότι δεν βρέθηκε } Δομές Δεδομένων & Εργαστήριο Γνώσης & Ευφυούς 10

Δυαδική Αναζήτηση-Ανάλυση Χειρότερη περίπτωση: To στοιχείο δε βρίσκεται στον πίνακα! Μας ενδιαφέρει το πλήθος συγκρίσεων που γίνονται. Σε κάθε κλήση της αναδρομής ο αλγόριθμος κάνει μια σύγκριση και κατόπιν συνεχίζει για το μισό πίνακα που απομένει. Έστω Τ(Ν) η πολυπλοκότητα για μέγεθος πίνακα Ν. Τότε έχω Τ(Ν)<=Τ( N / 2 ) +1 με αρχική τιμή Τ(1)=1 Για τη λύση της αναδρομής διακρίνω 2 περιπτώσεις: - To N είναι δύναμη του 2 - Το Ν δεν είναι δύναμη του 2 11

Ανάλυση Ποια η πολυπλοκότητα στη χειρότερη περίπτωση? - Χειρότερη περίπτωση = Να μη βρεθεί καθόλου Απλή ανάλυση Επανάληψη 1 : Απομένει N/2 (μισός πίνακας) Επανάληψη 2: N/4 Επανάληψη 3: N/8. Δηλ. Για μια τυχαία επανάληψη k απομένει (1/2) k Ν Ο αλγ. Τελειώνει όταν στην επανάληψη k για την οποία ισχύει (1/2) k Ν=1=> 2 k =Ν => k=logn Άρα Θ(logN) στη χειρότερη περίπτωση. Η ανάλυση της μέσης περίπτωσης είναι πιο δύσκολη... Δομές Δεδομένων & Εργαστήριο Γνώσης & Ευφυούς 12

Δυαδική Αναζήτηση-Ανάλυση Αν το Ν είναι δύναμη του 2 τότε έχω: T(N) <= T(N/2) +1 T(N/2) <= T(N/4) +1 T(N/4) <= T(N/8) + 1.. T(N/2 logn-1 ) <= T(N/2 logn ) + 1 Αθροίζοντας παίρνω Τ(Ν) <= logn + 1 13

Δυαδική Αναζήτηση-Ανάλυση Αν το Ν δεν είναι δύναμη του 2 αποδεικνύω επαγωγικά ότι ισχύει Τ(Ν)<= logn + 1 - Για Ν=3 ισχύει αφού χρειάζομαι 2 συγκρίσεις (Τ(Ν)=2 ) - Έστω ότι ισχύει για k<ν - Θα δείξω για k=n Έχω: T(N) <= T( N / 2 ) + 1 <= (από επαγωγική υπόθεση) log N / 2 + 1 + 1 <= log(( N 1) / 2) +1 +1 <= log( N 1) + 1 <= log N + 1 Επομένως ο αλγόριθμος στη χειρότερη περίπτωση (όπου δε βρίσκουμε αυτό που αναζητούμε) έχει πολυπλοκότητα Ο(logN). 14

Δυαδική Αναζήτηση-Ανάλυση Μέση Περίπτωση: Στη μέση περίπτωση το στοιχείο μπορεί να βρίσκεται στον πίνακα σε οποιαδήποτε θέση του ή και να μη βρίσκεται. - Υπάρχουν 2Ν + 1 καταστάσεις στις οποίες μπορεί να τερματίσει η αναζήτηση. - Οι Ν αντιστοιχούν σε επιτυχή αναζήτηση (μία για κάθε θέση του πίνακα που μπορεί να βρεθεί το στοιχείο) - Οι υπόλοιπες Ν+1 αντιστοιχούν στις θέσεις που μπορεί να τερματίσει η αναζήτηση ανεπιτυχώς (Ν-2 ενδιάμεσα των στοιχείων και 2 στις άκρες του πίνακα) Αν θεωρήσω ισοπίθανα τα 2Ν+1 ενδεχόμενα αθροίζοντας προκύπτει πάλι Ο(logN) (η απόδειξη αφήνεται) 15

Αναζήτηση Παρεμβολής (Interpolation Search) Γενικώς, αν τα στοιχεία του πίνακα είναι οποιασδήποτε μορφής (αρκεί να ορίζεται σχέση διάταξης) πχ. αλφαριθμητικά, μπορεί να αποδειχτεί ότι δεν υπάρχει αλγόριθμος που να λύνει το πρόβλημα της αναζήτησης σε χρόνο λιγότερο του Ο(logN). Στην ειδική περίπτωση που τα στοιχεία είναι αριθμοί μπορούμε να θεωρήσουμε το χρόνο στη μέση περίπτωση. Μεθοδολογία Αναζήτησης Παρεμβολής Ίδια με Δυαδική αναζήτηση (Binary Search) μόνο που σαν mid επιλέγεται το: x A[ left] ( right left) left A[ right] A[ left] 16

Αναζήτηση Παρεμβολής (Interpolation Search) ΠΑΡΑΔΕΙΓΜΑ 1 Έστω πίνακας Α={2,4,6,...,20} και x = 20 Τότε στην πρώτη κλήση επιλέγεται: x A[ left] ( right A[ right] A[ left] mid=(20-2)/(20-2) * (9-0) + 0 δηλ. 1*9+0 δηλ. η θέση 9 left) left Με άλλα λόγια ο αλγόριθμος θα βρει κατευθείαν το ζητούμενο κάνοντας μια μόνο σύγκριση (σε αντίθεση με τη δυαδική αναζήτηση) Γενικά αν τα στοιχεία του πίνακα αντιπροσωπεύουν αριθμητική πρόοδο η αναζήτηση παρεμβολής έχει πολυπλοκότητα Ο(1). 17

Αναζήτηση Παρεμβολής (Interpolation Search) ΠΑΡΑΔΕΙΓΜΑ 2 Έστω πίνακας Α={0,1,2,3,4,5,6,7,8,9000} και x = 8 Τότε στην πρώτη κλήση επιλέγεται: x A[ left] ( right left) left A[ right] A[ left] mid=(8-0)/(9000-0) * (9-0) + 0 δηλ. 72/9000 δηλ. η θέση 0 Η δεύτερη κλήση θα είναι για left =1 mid=8-1/9000-1 *(9-1) + 1 = 56/8999 +1 δηλ η θέση 1 Κατόπιν θα ελεγχθεί η θέση 2,3,4...8 Με άλλα λόγια στη χειρότερη περίπτωση ο αλγόριθμος έχει πολυπλοκότητα Ο(Ν) Στη μέση περίπτωση μπορεί να αποδειχτεί ότι είναι Ο(loglogN) 18

Ταξινόμηση Οι αλγόριθμοι που λύνουν το πρόβλημα της ταξινόμησης ενός πίνακα εμπίπτουν σε δύο κατηγορίες: - Βασιζόμενους σε συγκρίσεις στοιχείων (συγκριτικοί) - Μη συγκριτικοί αλγόριθμοι Στην πρώτη κατηγορία ανήκουν οι: - Selection Sort (ταξινόμηση με επιλογή) - Insertion Sort (ταξινόμηση με εισαγωγή) - Bubble Sort (ταξινόμηση φυσαλίδας) - Quick Sort (ταχεία ταξινόμηση) - Heap Sort (ταξινόμηση σωρού) 19

Ταξινόμηση με Επιλογή (Selection Sort) ΜΕΘΟΔΟΛΟΓΙΑ - Ψάξε όλον τον πίνακα για να βρεις το μικρότερο στοιχείο - Αντιμετάθεσε με το πρώτο - Επανέλαβε για το κομμάτι του πίνακα που απομένει void SelectionSort(int A[],int Ν){ int min; for (int i=0; i<ν-1; i++){ //το τελευταίο στοιχείο δε min=i; //χρειάζεται ταξινόμηση for (j=i+1; j<ν, j++) if A[j]<A[min] min=j; swap(a[i], A[min]); } 20

Ταξινόμηση με Επιλογή (Selection Sort) ΠΑΡΑΔΕΙΓΜΑ 4 3 5 6 2 3 1 1 3 5 6 2 3 4 125 6 3 3 4 1 2 3 6 5 3 4 1 2 3 3 5 6 4 1 2 3 3 4 65 1 2 3 3 4 5 6 ΠΟΛΥΠΛΟΚΟΤΗΤΑ Το πλήθος των συγκρίσεων που κάνει ο αλγόριθμος είναι i=0 (Ν-1) i=1 (N-2). i=n-1 0 Άρα συνολικά 1+2 +... +(Ν-1) = Ν(Ν-1)/2 = Ο(Ν 2 ) 21

Ταξινόμηση με εισαγωγή (Insertion Sort) ΜΕΘΟΔΟΛΟΓΙΑ Εισάγουμε ένα- ένα τα στοιχεία στη σωστή τους θέση Ο αλγόριθμος λειτουργεί σε βήματα Αρχικά (βήμα 0) μόνο ο πίνακας Α[0...0] (δηλ. το στοιχείο Α[0]) είναι ταξινομημένο Στο βήμα 1 προσθέτουμε το στοιχείο Α[1] (αντιμεταθέτοντας με το Α[0] αν χρειάζεται) Γενικά στο βήμα i το κομμάτι του πίνακα Α[0...i-1] είναι ταξινομημένο και βάζουμε το στοιχείο Α[i] στη σωστή του θέση έτσι ώστε με το πέρας της φάσης το κομμάτι του πίνακα Α[0...i] να είναι ταξινομημένο 22

Ταξινόμηση με εισαγωγή (Insertion Sort) void InsertionSort(int A[], int N){ for (int i=1; i<n; i++) for (int j=i; (j>0)&&(a[j]<a[j-1]); j--) swap(a[j], A[j-1]); } ΠΑΡΑΔΕΙΓΜΑ 4 3 5 6 2 3 1 4 3 5 6 2 3 1 3 4 5 6 2 3 1 3 4 5 6 2 3 1 3 4 5 6 2 3 1 2 3 4 5 6 3 1 2 3 3 4 5 6 1 1 2 3 3 4 5 6 23

Ταξινόμηση με εισαγωγή (Insertion Sort) ΠΟΛΥΠΛΟΚΟΤΗΤΑ ΧΕΙΡΟΤΕΡΗΣ ΠΕΡΙΠΤΩΣΗΣ Στη χειρότερη περίπτωση ο πίνακας είναι αντίστροφα ταξινομημένος. Οι συγκρίσεις που θα εκτελεστούν είναι: 1 + 2 +. +N-1 δηλ. Ο(Ν 2 ) Παρατηρήστε ότι όταν ο πίνακας είναι ήδη ταξινομημένος οι συγκρίσεις που απαιτούνται είναι Ο(Ν) (σε αντίθεση με πχ. το Selection Sort που εξακολουθεί να είναι Ο(Ν 2 )) 24

Ταξινόμηση με εισαγωγή (Insertion Sort) ΠΟΛΥΠΛΟΚΟΤΗΤΑ ΜΕΣΗΣ ΠΕΡΙΠΤΩΣΗΣ Στη μέση περίπτωση κατά τη διάρκεια της φάσης i δηλ. όταν πάμε να βάλουμε το στοιχείο Α[i] στον ήδη ταξινομημένο πίνακα Α[0...i-1] είναι ισοπίθανο το να μπει το Α[i] σε οποιαδήποτε από της i+1 δυνατές θέσεις. Αν μπει στη θέση i θα έχω κάνει μια σύγκριση Αν στη i-1, 2 συγκρίσεις (και 1 αντιμετάθεση) Στη i-2 3, κ.ο.κ Συνολικά δηλαδή κατά την ένθεση του i-οστού στοιχείου θα έχω κόστος = 1/i+1 + 2/i+1 + 3/i+1 +.. + i/i+1 = i/2 Άρα το πλήθος των συγκρίσεων για τον αλγόριθμο θα είναι 1/2 + 2/2 + 3/2 +... + (N-1)/2 = Ν(Ν-1)/4 => Ο(Ν 2 ) 25

BubbleSort-Ταξινόμηση φυσαλίδας ΜΕΘΟΔΟΛΟΓΙΑ Σάρωνε τον πίνακα από αριστερά προς τα δεξιά αντιμεταθέτοντας γειτονικά στοιχεία που είναι εκτός διάταξης. Συνέχισε μέχρι να ταξινομηθεί ο πίνακας. Το όνομα του αλγορίθμου προκύπτει από το γεγονός ότι το μεγαλύτερο στοιχείο σε κάθε πέρασμα οδηγείται προς τα δεξιά του πίνακα (σαν φυσαλίδα που ανεβαίνει προς τα πάνω) void BubbleSort(int A[], int N){ for (int i=1; i<n-1; i++) for (int j=0; j<n-i; j++) if (A[j]>A[j+1]) swap(a[j], A[j+1]); } Για πιο αποδοτική υλοποίηση μπορούμε να βάλουμε ένα flag για να ελέγχουμε αν σε κάποιο πέρασμα δεν έγινε καμιά αντιμετάθεση (ο πίνακας τότε έχει ταξινομηθεί) 26

ΠΑΡΑΔΕΙΓΜΑ 435 6 2 3 1 3 4 2315 6 3 4 5 6 2 3 1 3 4 2 3 1 5 6 3 4 5 6 2 3 1 3 2 4 3 1 5 6 3 4 5 6 2 3 1 3 2 3 415 6 3 4 5 2 6 3 1 3 2 3 1 4 5 6 3 4 5 2 3 6 1 3 2 3 1 4 5 6 3 4 5 2 3 1 6 2 3 3 1 4 5 6 3 4 52316 233 1 4 5 6 3 4 5 2316 2313 4 5 6 3 4 5 2 3 1 6 2 3 1 3 4 5 6 3 4 2 5 3 1 6 2 3 1 3 4 5 6 3 4 2 3 5 1 6 2 1 3 3 4 5 6 3 4 2 3 1 5 6 2 1 3 3 4 5 6 1 233456 BubbleSort 27

BubbleSort ΠΟΛΥΠΛΟΚΟΤΗΤΑ Στη χειρότερη περίπτωση συγκρίσεις/αντιμεταθέσεις = Ν-1 + Ν-2 +... +1 => Ο(Ν 2 ) 28