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

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

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

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

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

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

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

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

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

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

Αν ένα πρόβλημα λύνεται από δύο ή περισσότερους αλγόριθμους, ποιος θα είναι ο καλύτερος; Με ποια κριτήρια θα τους συγκρίνουμε;

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

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

Α Ν Α Λ Τ Η Α Λ Γ Ο Ρ Ι Θ Μ Ω Ν Κ Ε Υ Α Λ Α Ι Ο 5. Πως υπολογίζεται ο χρόνος εκτέλεσης ενός αλγορίθμου;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Εισαγωγή στην Ανάλυση Αλγορίθμων (2-3)

Ουρά Προτεραιότητας (priority queue)

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

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

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

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

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

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

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

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

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

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

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

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

εισαγωγικές έννοιες Παύλος Εφραιμίδης Δομές Δεδομένων και

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

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

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

οµές εδοµένων 3 ο Εξάµηνο Τµήµα Πανεπιστήµιο Πληροφορικής Ιωαννίνων ΟΜΕΣ Ε ΟΜΕΝΩΝ

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

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

Κεφάλαιο 5 Ανάλυση Αλγορίθμων

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

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

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

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

ΠΛΕ075: Προηγμένη Σχεδίαση Αλγορίθμων και Δομών Δεδομένων. Λουκάς Γεωργιάδης

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

Ορθότητα Χωρική αποδοτικότητα. Βελτιστότητα. Θεωρητική ανάλυση Εμπειρική ανάλυση. Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ -4ο εξάμηνο 1

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 8 Ο. Ταξινόμηση και Αναζήτηση Συναρτήσεις χειρισμού οθόνης ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

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

5.1. Προσδοκώμενα αποτελέσματα

Ενδεικτικές Ερωτήσεις Θεωρίας

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

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

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

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

Κεφάλαιο 6 Ουρές Προτεραιότητας

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

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

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

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

Ουρά Προτεραιότητας (priority queue)

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

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

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

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

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

Τμήμα Μηχανικών Πληροφορικής ΤΕ Η μέθοδος Simplex. Γκόγκος Χρήστος ΤΕΙ Ηπείρου Επιχειρησιακή Έρευνα. τελευταία ενημέρωση: 19/01/2017

Συνδετικότητα γραφήματος (graph connectivity)

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

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

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

ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ: ΕΞΙ (6)

Ερωτήσεις πολλαπλής επιλογής - Κεφάλαιο Κάθε δομή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε πρόβλημα ή εφαρμογή

Θεωρητικό Μέρος. int rec(int n) { int n1, n2; if (n <= 5) then return n; else { n1 = rec(n-5); n2 = rec(n-3); return (n1+n2); } }

Ορισµός. Εστω συναρτήσεις: f : N R και g : N R. η f(n) είναι fi( g(n) ) αν υπάρχουν σταθερές C 1, C 2 και n 0, τέτοιες ώστε:

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 }

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

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

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

1. Η χειρότερη περίπτωση είναι όταν γίνου 10 επαναλήψεις, δηλαδή για n = 0.

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

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

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

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

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

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

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

Transcript:

Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου, Τμήμα Μηχανικών Πληροφορικής ΤΕ Χειμερινό Εξάμηνο 2014-2015 (Παρουσίαση 5) 1 / 17

Απόδοση προγραμμάτων Συχνά χρειάζεται να εκτιμηθεί η απόδοση ενός προγράμματος δηλαδή πόσο γρήγορα εκτελείται και πόσους πόρους (μνήμη, αποθηκευτικό χώρο σε δευτερεύουσα μνήμη, εύρος ζώνης κα) απαιτεί Μπορεί να χρειαστεί να συγκριθεί ένα πρόγραμμα με ένα άλλο πρόγραμμα που επιλύει το ίδιο πρόβλημα και να επιλεγεί το καλύτερο H απόδοση ενός προγράμματος μπορεί να εξαρτάται από το είδος του υπολογιστή στο οποίο εκτελείται Η απόδοση ενός προγράμματος συνήθως εξαρτάται από το μέγεθος αλλά και την μορφή της εισόδου Η απόδοση ενός προγράμματος μπορεί να μετρηθεί πειραματικά ή θεωρητικά 2 / 17

Πειραματική μέτρηση απόδοσης προγράμματος Πειραματική - εμπειρική μέτρηση Καταστρώνεται ένα πείραμα κατά το οποίο το πρόγραμμα εκτελείται για διάφορα μεγέθη εισόδου και καταγράφεται ο χρόνος εκτέλεσης σε κάθε περίπτωση Τα αποτελέσματα συνήθως απεικονίζονται διαγραμματικά και δείχνουν την συμπεριφορά του προγράμματος καθώς το μέγεθος του προβλήματος αυξάνεται Αν υπάρχουν περισσότερα του ενός υποψήφια εναλλακτικά προγράμματα μπορούν να προκύψουν συγκριτικά στοιχεία που να υποδεικνύουν το καταλληλότερο ανάμεσα τους 3 / 17

Αναλυτική μέτρηση απόδοσης προγράμματος Θεωρητικό μοντέλο Η/Υ Το πρόγραμμα εκτελείται σε ένα θεωρητικό μοντέλο υπολογιστή για το οποίο υποθέτουμε ότι οι βασικές λειτουργίες (αριθμητικές πράξεις, σύγκριση, μεταφορά) απαιτούν κάποιον χρόνο που μπορεί να θεωρηθεί σταθερός για κάθε μια στοιχειώδη ενέργεια 4 / 17

Πολυπλοκότητα χώρου / χρόνου Η πολυπλοκότητα χώρου αφορά τον απαιτούμενο χώρο που συνεπάγεται η εκτέλεση του προγράμματος Ο απαιτούμενος χώρος ενός προγράμματος αποτελείται από: Χώρο εντολών Χώρο δεδομένων Χώρο στοίβας περιβάλλοντος εκτέλεσης Η πολυπλοκότητα χρόνου έχει να κάνει με την καταμέτρηση των λειτουργιών που γίνονται κατά την εκτέλεση του προγράμματος Αυτό που ενδιαφέρει είναι ο ρυθμός αύξησης του χώρου ή του χρόνου που απαιτεί η εκτέλεση ενός προγράμματος καθώς το μέγεθος του προβλήματος αυξάνεται 5 / 17

Αριθμός εκτελέσεων εντολών σε μια απλή for for ( int i = 0; i < 10; i++) { command1 } for ( int i = a; i < b; i++) { command2 } Στο πρώτο τμήμα κώδικα η συνθήκη i<10 θα εξεταστεί 11 φορές και η εντολή command1 θα εκτελεστεί 10 φορές Στο δεύτερο τμήμα κώδικα η συνθήκη i<b θα εξεταστεί b a + 1 φορές και η εντολή command2 θα εκτελεστεί b a φορές 6 / 17

Ανάλυση χρόνου εκτέλεσης find_max (1/2) Το πρόβλημα που επιλύει η find_max Βρίσκει τη μεγαλύτερη τιμή ενός πίνακα n θέσεων template<class T> T find_max(t a[], int n) { T max = a[0]; // c1 for ( int i = 1; i < n; i++) { // c2 if (a[ i ] > max) // c3 max = a[i ]; // c4 } return max; // c5 } c1 έως c5 είναι οι χρόνοι εκτέλεσης των εντολών κάθε φορά που εκτελούνται 7 / 17

Ανάλυση χρόνου εκτέλεσης find_max (2/2) template<class T> T find_max(t a[], int n) { T max = a[0]; // c1 for ( int i = 1; i < n; i++) { // c2 if (a[ i ] > max) // c3 max = a[i ]; // c4 } return max; // c5 } Η εντολή με χρόνο εκτέλεσης c1 εκτελείται 1 φορά Η εντολή με χρόνο εκτέλεσης c2 εκτελείται n φορές Η εντολή με χρόνο εκτέλεσης c3 εκτελείται n-1 φορές Η εντολή με χρόνο εκτέλεσης c4 εκτελείται n-1 φορές Η εντολή με χρόνο εκτέλεσης c5 εκτελείται 1 φορά Εξετάζουμε το χρόνο της χειρότερης περίπτωσης T(n) = c1 + c2n + c3(n 1) + c4(n 1) + c5 = (c2 + c3 + c4)n + (c1 c3 c4 + c5) an + b a = (c2 + c3 + c4), b = (c1 c3 c4 + c5) Άρα ο χρόνος εκτέλεσης T(n) είναι an + b δηλαδή περιγράφεται από μια γραμμική συνάρτηση του μεγέθους n της ακολουθίας εισόδου 8 / 17

Ο αλγόριθμος ταξινόμησης με επιλογή (selection_sort) Περιγραφή λειτουργίας Ο αλγόριθμος εντοπίζει το μικρότερο στοιχείο του πίνακα και το αντιμεταθέτει με το πρώτο στοιχείο του Στη συνέχεια εντοπίζει το μικρότερο στοιχείο από το δεύτερο μέχρι το τελευταίο στοιχείο του πίνακα και το αντιμεταθέτει με το στοιχείο που βρίσκεται στην δεύτερη θέση Η διαδικασία συνεχίζεται εντοπίζοντας στην εναπομείνασα ακολουθία κάθε φορά το μικρότερο στοιχείο και κάνοντας αντιμετάθεση με το αριστερότερο στοιχείο της ακολουθίας που εξετάστηκε για εύρεση του μικρότερου template<class T> void selection_sort(t a [], int n) { for ( int i = 0; i < n 1; i++) { // c1 int pmin = i; // c2 for ( int j = i + 1; j < n; j++) // c3 if (a[ j ] < a[pmin]) // c4 pmin = j; // c5 swap(a[i], a[pmin]); // c6 } } c1 έως c6 είναι οι χρόνοι εκτέλεσης των εντολών κάθε φορά που εκτελούνται 9 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου selection_sort Η ταξινόμηση προχωρά ως εξής: 16, 22, 11, 9, 7, 18 10 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου selection_sort Η ταξινόμηση προχωρά ως εξής: 16, 22, 11, 9, 7, 18 7, 22, 11, 9, 16, 18 10 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου selection_sort Η ταξινόμηση προχωρά ως εξής: 16, 22, 11, 9, 7, 18 7, 22, 11, 9, 16, 18 7, 9, 11, 22, 16, 18 10 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου selection_sort Η ταξινόμηση προχωρά ως εξής: 16, 22, 11, 9, 7, 18 7, 22, 11, 9, 16, 18 7, 9, 11, 22, 16, 18 7, 9, 11, 22, 16, 18 10 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου selection_sort Η ταξινόμηση προχωρά ως εξής: 16, 22, 11, 9, 7, 18 7, 22, 11, 9, 16, 18 7, 9, 11, 22, 16, 18 7, 9, 11, 22, 16, 18 7, 9, 11, 16, 22, 18 10 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου selection_sort Η ταξινόμηση προχωρά ως εξής: 16, 22, 11, 9, 7, 18 7, 22, 11, 9, 16, 18 7, 9, 11, 22, 16, 18 7, 9, 11, 22, 16, 18 7, 9, 11, 16, 22, 18 7, 9, 11, 16, 18, 22 10 / 17

Ανάλυση χρόνου εκτέλεσης της ταξινόμησης με επιλογή selection_sort (1/2) template<class T> void selection_sort(t a [], int n) { for ( int i = 0; i < n 1; i++) { // c1 int pmin = i; // c2 for ( int j = i + 1; j < n; j++) // c3 if (a[ j ] < a[pmin]) // c4 pmin = j; // c5 swap(a[i], a[pmin]); // c6 } } Η εντολή με χρόνο εκτέλεσης c1 εκτελείται n φορές Η εντολή με χρόνο εκτέλεσης c2 εκτελείται n 1 φορές Η εντολή με χρόνο εκτέλεσης c3 εκτελείται n 2 i=0 n (i + 1) + 1 = n 2 i=0 n i φορές Η εντολή με χρόνο εκτέλεσης c4 εκτελείται n 2 i=0 n (i + 1) = n 2 i=0 n i 1 φορές Η εντολή με χρόνο εκτέλεσης c5 εκτελείται n 2 i=0 n (i + 1) = n 2 i=0 n i 1 φορές Η εντολή με χρόνο εκτέλεσης c6 εκτελείται n 1 φορές n 2 n(n + 1) n i = n + (n 1) + (n 2) + + 2 = 1 = n2 2 2 + n 2 1 i=0 n 2 (n 1)n n i 1 = (n 1) + (n 2) + + 1 = = n2 2 2 n 2 i=0 T(n) = c1n + c2(n 1) + c3( n2 2 + n 2 1) + c4( n2 2 n 2 ) + c5( n2 2 n 2 ) + c6(n 1) = an2 + bn + c a = c3+c4+c5, b = (c1 + c2 + 2 c3 2 c4 2 c5 2 + c6), c = ( c2 c3 c6) 11 / 17

Ανάλυση χρόνου εκτέλεσης της ταξινόμησης με επιλογή selection_sort (2/2) Συνάρτηση χρόνου εκτέλεσης Άρα ο χρόνος εκτέλεσης T(n) είναι an 2 + bn + c δηλαδή περιγράφεται από μια τετραγωνική συνάρτηση του μεγέθους n της ακολουθίας εισόδου 12 / 17

Ο αλγόριθμος ταξινόμησης με εισαγωγή (insertion_sort) Περιγραφή λειτουργίας Ξεκινώντας από το αριστερό άκρο κάθε τιμή τοποθετείται στην σωστή θέση σε σχέση με αυτές που βρίσκονται αριστερά της template<class T> void insertion_sort (T a [], int n) { for ( int i = 1; i < n; i++) { // c1 T key = a[ i ]; // c2 int j = i 1; // c3 while (( j >= 0) && (key < a[j ]) ) { // c4 a[ j + 1] = a[ j ]; // c5 j ; // c6 } a[ j + 1] = key; // c7 } } c1 έως c7 είναι οι χρόνοι εκτέλεσης των εντολών κάθε φορά που εκτελούνται 13 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου insertion_sort Η ταξινόμηση με εισαγωγή προχωρά ως εξής: 16, 22, 11, 9, 7, 18 14 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου insertion_sort Η ταξινόμηση με εισαγωγή προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 9, 7, 18 14 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου insertion_sort Η ταξινόμηση με εισαγωγή προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 9, 7, 18 16, 22, 11, 9, 7, 18 14 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου insertion_sort Η ταξινόμηση με εισαγωγή προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 9, 7, 18 16, 22, 11, 9, 7, 18 11, 16, 22, 9, 7, 18 14 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου insertion_sort Η ταξινόμηση με εισαγωγή προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 9, 7, 18 16, 22, 11, 9, 7, 18 11, 16, 22, 9, 7, 18 9, 11, 16, 22, 7, 18 14 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου insertion_sort Η ταξινόμηση με εισαγωγή προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 9, 7, 18 16, 22, 11, 9, 7, 18 11, 16, 22, 9, 7, 18 9, 11, 16, 22, 7, 18 7, 9, 11, 16, 22, 18 14 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου insertion_sort Η ταξινόμηση με εισαγωγή προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 9, 7, 18 16, 22, 11, 9, 7, 18 11, 16, 22, 9, 7, 18 9, 11, 16, 22, 7, 18 7, 9, 11, 16, 22, 18 7, 9, 11, 16, 18, 22 14 / 17

Ανάλυση χρόνου εκτέλεσης της ταξινόμησης με εισαγωγή template<class T> void insertion_sort (T a [], int n) { for ( int i = 1; i < n; i++) { // c1 T key = a[ i ]; // c2 int j = i 1; // c3 while (( j >= 0) && (key < a[j ]) ) { // c4 a[ j + 1] = a[ j ]; // c5 j ; // c6 } a[ j + 1] = key; // c7 } } Η εντολή με χρόνο εκτέλεσης c1 εκτελείται n φορές Η εντολή με χρόνο εκτέλεσης c2 εκτελείται n 1 φορές Η εντολή με χρόνο εκτέλεσης c3 εκτελείται n 1 φορές Η εντολή με χρόνο εκτέλεσης c4 εκτελείται n 1 i=1 i + 1 φορές Η εντολή με χρόνο εκτέλεσης c5 εκτελείται n 1 i=1 i φορές Η εντολή με χρόνο εκτέλεσης c6 εκτελείται n 1 i=1 i φορές Η εντολή με χρόνο εκτέλεσης c7 εκτελείται n 1 φορές n 1 i=1 i + 1 = n i=2 i = n(n+1) 2 1 = n2 2 + n 2 1 n 1 i=1 i = (n 1)n 2 = n2 2 n 2 T(n) = c1n + c2(n 1) + c3(n 1) + c4 ( n2 2 + 2 n 1) + c5( n2 2 2 n ) + c6( n2 2 2 n ) + c7(n 1) = an 2 + bn + c, a = c4+c5+c6, b = (c1 + c2 + c3 + 2 c4 2 c5 2 c6 + c7), c = ( c2 c3 c4 c7) 2 15 / 17

Ο αλγόριθμος ταξινόμησης φυσαλίδας (bubble_sort) Περιγραφή λειτουργίας Γειτονικά στοιχεία συγκρίνονται από το τέλος προς την αρχή και αν δεν είναι στην ορθή σειρά αντιμετατίθενται Η διαδικασία επαναλαμβάνεται μέχρι να ταξινομηθούν όλα τα στοιχεία του πίνακα template<class T> void bubble_sort(t a [], int n) { for ( int i = 1; i < n; i++) for ( int j = n 1; j >= i ; j ) if (a[ j 1] > a[ j ]) swap(a[j], a[ j 1]); } 16 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου bubble_sort Η ταξινόμηση φυσαλίδας προχωρά ως εξής: 16, 22, 11, 9, 7, 18 17 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου bubble_sort Η ταξινόμηση φυσαλίδας προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 7, 9, 18 17 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου bubble_sort Η ταξινόμηση φυσαλίδας προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 7, 9, 18 16, 22, 7, 11, 9, 18 17 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου bubble_sort Η ταξινόμηση φυσαλίδας προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 7, 9, 18 16, 22, 7, 11, 9, 18 16, 7, 22, 11, 9, 18 17 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου bubble_sort Η ταξινόμηση φυσαλίδας προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 7, 9, 18 16, 22, 7, 11, 9, 18 16, 7, 22, 11, 9, 18 7, 16, 22, 11, 9, 18 17 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου bubble_sort Η ταξινόμηση φυσαλίδας προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 7, 9, 18 16, 22, 7, 11, 9, 18 16, 7, 22, 11, 9, 18 7, 16, 22, 11, 9, 18 7, 16, 22, 9, 11, 18 17 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου bubble_sort Η ταξινόμηση φυσαλίδας προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 7, 9, 18 16, 22, 7, 11, 9, 18 16, 7, 22, 11, 9, 18 7, 16, 22, 11, 9, 18 7, 16, 22, 9, 11, 18 7, 16, 9, 22, 11, 18 17 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου bubble_sort Η ταξινόμηση φυσαλίδας προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 7, 9, 18 16, 22, 7, 11, 9, 18 16, 7, 22, 11, 9, 18 7, 16, 22, 11, 9, 18 7, 16, 22, 9, 11, 18 7, 16, 9, 22, 11, 18 7, 9, 16, 22, 11, 18 17 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου bubble_sort Η ταξινόμηση φυσαλίδας προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 7, 9, 18 16, 22, 7, 11, 9, 18 16, 7, 22, 11, 9, 18 7, 16, 22, 11, 9, 18 7, 16, 22, 9, 11, 18 7, 16, 9, 22, 11, 18 7, 9, 16, 22, 11, 18 7, 9, 16, 11, 22, 18 17 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου bubble_sort Η ταξινόμηση φυσαλίδας προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 7, 9, 18 16, 22, 7, 11, 9, 18 16, 7, 22, 11, 9, 18 7, 16, 22, 11, 9, 18 7, 16, 22, 9, 11, 18 7, 16, 9, 22, 11, 18 7, 9, 16, 22, 11, 18 7, 9, 16, 11, 22, 18 7, 9, 11,16, 22, 18 17 / 17

Παράδειγμα εκτέλεσης του αλγορίθμου bubble_sort Η ταξινόμηση φυσαλίδας προχωρά ως εξής: 16, 22, 11, 9, 7, 18 16, 22, 11, 7, 9, 18 16, 22, 7, 11, 9, 18 16, 7, 22, 11, 9, 18 7, 16, 22, 11, 9, 18 7, 16, 22, 9, 11, 18 7, 16, 9, 22, 11, 18 7, 9, 16, 22, 11, 18 7, 9, 16, 11, 22, 18 7, 9, 11,16, 22, 18 7, 9, 11,16, 18, 22 17 / 17