Ταχεία Ταξινόμηση Quick-Sort
|
|
- Ἀριστοφάνης Χριστόπουλος
- 7 χρόνια πριν
- Προβολές:
Transcript
1 Ταχεία Ταξινόμηση Quc-Sort Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 1
2 Outlne Quc-sort Αλγόριθμος Βήμα διαχωρισμού Δένδρο Quc-sort Παράδειγμα εκτέλεσης Ανάλυση του quc-sort In-place quc-sort Περίληψη αλγορίθμων ταξινόμησης Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 2
3 QucSort Βασίζεται στην τεχνική του διαίρει και βασίλευε (dvde & conquer) Στην τεχνική αυτή για να λύσω ένα πρόβλημα το σπάω σε υποπροβλήματα. Λύνω κάθε υποπρόβλημα ξεχωριστά και συνθέτω τις επιμέρους λύσεις για να παράγω την τελική λύση του προβλήματος. ΕΦΑΡΜΟΓΗ - Ας υποθέσω ότι έχω στη διάθεσή μου μια συνάρτηση Partton() που κάνει τα ακόλουθα: δοθέντος ενός στοιχείου του πίνακα Α τοποθετεί το στοιχείο στη σωστή θέση στον πίνακα έτσι ώστε όλα τα στοιχεία που βρίσκονται αριστερά του να είναι μικρότερα και όλα που είναι δεξιά του μεγαλύτερα. - Το στοιχείο το οποίο μπαίνει στη «σωστή» θέση το ονομάζουμε στοιχείο διαχώρισης (pvot element) Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 3
4 QucSort Πρόκειται για απλή και γρήγορη μέθοδο ταξινόμησης Εάν θεωρήσουμε τον πίνακα Α: τον οποίο θέλουμε να ταξινομήσουμε. Σε αυτόν τον πίνακα ο αριθμός 33 έχει μια σημαντική ιδιότητα. Όλοι οι αριθμοί στα αριστερά είναι μικρότεροι και όλοι οι αριθμοί στα δεξιά είναι μεγαλύτεροι Αυτό σημαίνει ότι ο αριθμός 33 βρίσκεται στη σωστή στου θέση!! Έτσι προκειμένου να ταξινομήσουμε τον πίνακα αρκεί να επικεντρώσουμε την προσοχή μας στα δύο υποσύνολα το δεξί και το αριστερό. Το πρόβλημα χωρίστηκε σε δύο υποπροβλήματα (Διαίρει και Βασίλευε) Πώς δημιουργούμε στοιχεία σαν το 33? Τα κατασκευάζουμε! Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 4
5 QucSort Έστω λοιπόν συνάρτηση: nt Partton(nt A[], left, rght, pvotindex) που παίρνει σαν ορίσματα έναν πίνακα Α, το αριστερό και δεξί όριο του πίνακα και τη θέση του στοιχείου διαχώρισης και επιστρέφει την καινούργια θέση του στοιχείου διαχώρισης. Η συνάρτηση Partton πραγματοποιεί τη αναδιάταξη και διαίρεση του πίνακα A[p,r]. ΕΡΩΤΗΣΗ: Πως μπορώ να χρησιμοποιήσω τη συνάρτηση για να λύσω το πρόβλημα της ταξινόμησης? Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 5
6 Ταχεία Ταξινόμηση QucSort vod Qucsort(nt A[], nt left, nt rght) { f (left>=rght) return; nt p = Partton (A, left, rght-1, pvot); Qucsort(A, left, p-1); Qucsort(A, p+1, rght); Όπου η διαδικασία partton (A,, j-1,pvot), χωρίζει τον πίνακα Α[ j-1] έτσι ώστε Α[..-1] να περιέχει στοιχεία < pvot, A[ j-1] να περιέχει στοιχεία >pvot, και επιστρέφει την τιµή. Ο αλγόριθμος είναι σωστός αφού η Partton εξασφαλίζει ότι το στοιχείο που θα βρεθεί στη θέση p είναι και αυτό που θα ήταν αν ο πίνακας ήταν ταξινομημένος, ενώ όλα που είναι αριστερά του θα είναι μικρότερα (αλλά αταξινόμητα) και όσα είναι δεξιά μεγαλύτερα (και αταξινόμητα). H Partton οργανώνει τη διαίρεση του πίνακα A[p,r] γύρω από το στοιχείο x=a[p]. Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 6
7 Quc-Sort Ο Quc-sort είναι ένας randomzed αλγόριθμος ταξινόμησης βασισμένος στο πρότυπο «διαίρει και βασίλευε»: Dvde: διάλεξε ένα τυχαίο στοιχείο x (που καλείται pvot) και χώρισε το S σε L στοιχεία μικρότερα του x E στοιχεία ίσα με x G στοιχεία μεγαλύτερα του x Recur: ταξινόμησε τα L και G Conquer: ένωσε τα L, E και G L x E x G x Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 7
8 QucSort ΠΑΡΑΔΕΙΓΜΑ Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 8
9 QucSort ΜΕΘΟΔΟΛΟΓΙΑ (Partton) - Ξεκίνα ένα αριστερό counter (lc) και ένα δεξί counter (rc) - Αρχικά lc = left + 1 //μια θέση μετά το pvot και rc = rght - O lc θα ανεβαίνει όσο A[lc]<=A[pvotIndex] και ο rc θα κατεβαίνει όσο Α[rc]>A[pvotIndex] - Όταν σταματήσουν και οι δύο αντιμεταθέτω τα Α[rc] και Α[lc] και συνεχίζω - Τελειώνουμε όταν ο rc ξεπεράσει το lc - Η θέση που σταμάτησε ο rc είναι και η θέση που πρέπει να μπει το pvot Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 9
10 QucSort ΠΑΡΑΔΕΙΓΜΑ (Partton) pvot lc rc Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 10
11 QucSort Partton (nt A[], nt left, nt rght, nt pvotindex){ swap (A[left], A[pvotIndex]);//στη γενική περίπτωση //pvotindex!=left nt lc = left + 1; nt rc = rght; whle (lc<rc){ whle (A[lc]<=A[left] && lc<rght) lc++; whle (A[rc]>A[left]) rc--; f (lc<rc) swap (A[lc], A[rc]); swap (A[left], A[rc]); return rc; Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 11
12 Διαχωρισμός Διαχωρίζουμε μια ακολουθία εισόδου ως εξής: Αφαιρούμε, κατά σειρά, κάθε στοιχείο y από το S και Εισάγουμε το y στο L, E ή G, ανάλογα με το αποτέλεσμα της σύγκρισης με το pvot x Κάθε εισαγωγή και αφαίρεση γίνεται στην αρχή ή στο τέλος μιας ακολουθίας, και έτσι χρειάζεται χρόνο O(1) Έτσι, το βήμα διαχωρισμού του qucsort χρειάζεται χρόνο O(n) αλγόριθμος partton(s, p) Είσοδος ακολουθία S, θέση p του pvot Έξοδος υποακολουθίες L, E, G των στοιχείων του S που είναι μικρότερα, ίσα, ή μεγαλύτερα από το pvot. L, E, G κενές ακολουθίες x S.remove(p) whle S.sEmpty() y S.remove(S.frst()) f y < x L.nsertLast(y) else f y = x E.nsertLast(y) else { y > x G.nsertLast(y) return L, E, G Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 12
13 QucSort (Ανάλυση) ΧΕΙΡΟΤΕΡΗ ΠΕΡΙΠΤΩΣΗ - Όταν σαν pvot επιλέγουμε πάντα το Α[left] τότε η χειρότερη περίπτωση για τον αλγόριθμο είναι να είναι ο πίνακας ήδη ταξινομημένος. - Στην πρώτη κλήση η Partton συγκρίνει/μεταθέτει Ν στοιχεία και διασπά τον πίνακα σε έναν κενό αριστερό πίνακα και ένα δεξί πίνακα μεγέθους Ν-1. - Όμοια στη δεύτερη κλήση θα απομείνει στα δεξιά πίνακας Ν-2 μεγέθους ενώ θα έχουν εκτελεστεί Ν-1 συγκρίσεις. Άρα κόστος = Ν + Ν = Ο(Ν 2 ) Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 13
14 QucSort (Ανάλυση) ΜΕΣΗ ΠΕΡΙΠΤΩΣΗ - Στη μέση περίπτωση το pvot μπορεί να βρεθεί σε οποιαδήποτε θέση του πίνακα με την ίδια πιθανότητα. - Υπάρχουν Ν δυνατές θέσεις κάθε μια με πιθανότητα 1/Ν Έστω, το μέγεθος του αριστερού κομματιού μετά το χωρισμό των στοιχείων. Αφού ο pvot είναι στη μέση το αριστερό κομμάτι θα είναι N--1. O μέσος χρόνος για ταξινόμηση του αριστερού και δεξιού θα είναι αντίστοιχα T() και Τ(N--1). Ο χρόνος που απαιτείται για το χωρισμό των στοιχείων θα είναι μικρότερος του cn, όπου c σταθερά. Άρα: T ( N) c N 1 N N 1 0 [ T ( ) T ( N 1)] => T ( N) c N 2 N N 1 0 T ( ) Για να επιλύσουμε την παραπάνω αναδρομική πρέπει να διώξω το άθροισμα Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 14
15 QucSort (Ανάλυση) Πολλαπλασιάζω τις σχέσεις για Ν και Ν-1 με Ν και Ν-1 αντίστοιχα και κατόπιν τις αφαιρώ ( N NT NT ( N 1) T ( N ) c 1) N 2 2 c ( N N 1 0 1) T ( ) 2 2 με αφαίρεση => ( N ) ( N 1) T ( N 1) 2cN 2c 2T ( N 1) Για να συνεχίσω θα πρέπει να διώξω το Τ(Ν-1). Για να γίνει αυτό διαιρώ με Ν(Ν-1) και αθροίζω N 2 0 T ( ) NT ( N ) ( N 1) T ( N 1) 2cN 2T ( N 1) NT ( N ) 2cN ( N 1) T ( N 1) => => Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 15
16 T ( N ) 2c T ( N 1) N 1 N 1 N QucSort (Ανάλυση) T( N 1) N 2c N T( N 2) N 1... T( 2) 2c T (1) 2 με πρόσθεση => T N N 1 ( N) 2c 1 j 3 1 j T (1) 2 Για Ν=1 δε γίνεται κλήση επομένως Τ(1) =0. Άρα η παραπάνω σχέση γίνεται: N 1 T ( N) 2c( N 1) j 3 1 j Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 16
17 QucSort (Ανάλυση) Ισχύει όμως: N 1 j 3 1 N 1 j 2 dx x 1 ln( N 1) Άρα έχω: T ( N) 2c( N 1)(1 ln( N 1)) c ' N log N O( N log N) Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 17
18 QucSort (Ανάλυση) Η πολυπλοκότητα στη μέση περίπτωση λοιπόν είναι Ο(ΝlogN). Ίδια πολυπλοκότητα με τον HeapSort αν και στην πράξη ο QucSort είναι γρηγορότερος. Τι μπορούμε να κάνουμε για να αποφύγουμε το Ο(Ν 2 ) της χειρότερης περίπτωσης? ΑΠΑΝΤΗΣΗ Εφόσον το πρόβλημα προκύπτει όταν ο πίνακας είναι ταξινομημένος αντί να διαλέγουμε το πρώτο στοιχείο σαν pvot διάλεξε ένα τυχαίο (Randomzed QucSort). Μπορεί να δειχτεί ότι η εκδοχή αυτή στη μέση περίπτωση έχει πολυπλοκότητα Ο(ΝlogN) Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 18
19 Θεωρητικό Όριο Ερώτηση: Μπορούμε να κατασκευάσουμε αλγόριθμο ταξινόμησης (βασιζόμενο σε συγκρίσεις δύο στοιχείων) που να έχει πολυπλοκότητα μικρότερη του Ο(ΝlogN)? Απάντηση: OXI (με την προϋπόθεση ότι ο αλγόριθμος θα πρέπει να λειτουργεί για οποιοδήποτε τύπο στοιχείων αρκεί φυσικά να ορίζεται ο τελεστής σύγκρισης). Παρατήρηση: Αν τα στοιχεία προς ταξινόμηση είναι ακέραιοι μπορώ να πετύχω χρόνο Ο(Ν) Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 19
20 Θεωρητικό Όριο Απόδειξη: - Περιγράφουμε τον αλγόριθμο σαν ένα δέντρο απόφασης - Έστω αρχικά ο αλγόριθμος συγκρίνει τα στοιχεία Α[] και A[j]. Το αριστερό υπόδεντρο της ρίζας θα αντιστοιχεί στην περίπτωση Α[]<A[j] και δεξί στην περίπτωση Α[]>A[j] - Ένας κόμβος του δέντρου περιέχει τις περιπτώσεις της τελικής λύσης που ικανοποιούν τις συγκρίσεις που έγιναν στο μονοπάτι από τη ρίζα προς τον κόμβο αυτόν. - Τα φύλλα περιέχουν μία λύση. Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 20
21 Θεωρητικό Όριο Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 21
22 Θεωρητικό Όριο - Έστω αλγόριθμος ταξινόμησης Ι και Τ το δέντρο απόφασής του. - Το πλήθος των φύλλων είναι Ν! (όσες και οι δυνατές διατάξεις Ν στοιχείων) - Το ύψος του δυαδικού δέντρου αντιστοιχεί σε κάτω φράγμα για την απόδοση του αλγορίθμου - Ένα δυαδικό δέντρο έχει το πολύ 2 h φύλλα όπου h το ύψος του - Άρα για οποιονδήποτε αλγόριθμο θα πρέπει: 2 h N! => h log(n!) => h log(n/e) N => h NlogN-Nloge - Άρα οποιοσδήποτε αλγόριθμος είναι Ω(NlogN) Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 22
23 Δένδρο Quc-Sort Μια εκτέλεση του quc-sort απεικονίζεται από ένα δυαδικό δένδρο Κάθε κόμβος αναπαριστά μια αναδρομική κλήση του quc-sort και αποθηκεύει Μη ταξινομημένη ακολουθία πριν την εκτέλεση και τον pvot αυτής Ταξινομημένη ακολουθία στο τέλος της εκτέλεσης Η ρίζα είναι η αρχική κλήση Τα φύλλα είναι κλήσεις σε υποακολουθίες μεγέθους 0 ή Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 23
24 Παράδειγμα εκτέλεσης Επιλογή Pvot Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 24
25 Παράδειγμα εκτέλεσης (συνέχεια) Διαχωρισμός, αναδρομική κλήση, επιλογή pvot Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 25
26 Παράδειγμα εκτέλεσης (συνέχεια) Διαχωρισμός, αναδρομική κλήση, βασική περίπτωση Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 26
27 Παράδειγμα εκτέλεσης (συνέχεια) Αναδρομική κλήση,, βασική περίπτωση, συνένωση Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 27
28 Παράδειγμα εκτέλεσης (συνέχεια) Αναδρομική κλήση, επιλογή pvot Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 28
29 Παράδειγμα εκτέλεσης (συνέχεια) Διαχωρισμός,, αναδρομική κλήση, βασική περίπτωση Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 29
30 Παράδειγμα εκτέλεσης (συνέχεια) Συνένωση, συνένωση Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 30
31 Χρόνος Εκτέλεσης Χειρότερης Περίπτωσης Η χειρότερη περίπτωση για τον quc-sort συμβαίνει όταν το pvot είναι το μοναδικό ελάχιστο ή μέγιστο στοιχείο Ένα από τα L και G έχει μέγεθος n 1 και το άλλο 0 Ο χρόνος εκτέλεσης είναι ανάλογος με το άθροισμα n (n 1) 2 Έτσι, ο χρόνος εκτέλεσης χειρότερης περίπτωσης είναι O(n 2 ) βάθος χρόνος 0 n 1 n 1 n 1 1 Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 31
32 Αναμενόμενος Χρόνος Εκτέλεσης Σκεφτείτε μια αναδρομική κλήση του quc-sort σε μια ακολουθία μεγέθους s Καλή κλήση: τα μεγέθη των L και G είναι το καθένα λιγότερο από 3s 4 Κακή κλήση: ένα από τα L και G έχει μέγεθος μεγαλύτερο από 3s Good call Bad call Μια κλήση είναι καλή με πιθανότητα 1 2 1/2 των πιθανών pvots προκαλούν καλές κλήσεις: Δομές Δεδομένων και Αλγόριθμοι Κακοί pvots Καλοί pvots Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής Κακοί pvots 32
33 Αναμενόμενος Χρόνος Εκτέλεσης, Μέρος 2 Πιθανοτικό γεγονός: ο αναμενόμενος αριθμός ρίψεων νομίσματος που απαιτείται για να έρθουν κορώνες είναι 2 Για έναν κόμβο βάθους, περιμένουμε ότι Οι 2 πρόγονοι είναι καλές κλήσεις Το μέγεθος της ακολουθίας εισόδου για την παρούσα κλήση είναι το πολύ (3 4) 2 n Άρα έχουμε Για έναν κόμβο βάθους 2log 4 3 n, το αναμενόμενο μέγεθος εισόδου είναι ένα Το αναμενόμενο ύψος του δένδρου quc-sort tree είναι O(log n) Το ποσό της εργασίας που γίνεται στους κόμβους ίδιου βάθους είναι O(n) Έτσι ο αναμενόμενος χρόνος εκτέλεσης είναι O(n log n) expected heght O(log n) s(a) s(r) s(b) s(c) s(d) s(e) s(f) tme per level O(n) O(n) O(n) total expected tme: O(n log n) Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 33
34 In-Place Quc-Sort Ο Quc-sort μπορεί να υλοποιηθεί για να τρέχει n-place Στο βήμα διαχωρισμού, χρησιμοποιούμε πράξεις αντικατάστασης για να αναδιατάξουμε τα στοιχεία της ακολουθίας εισόδου έτσι ώστε Τα στοιχεία μικρότερα του pvot έχουν βαθμό μικρότερο του h Τα στοιχεία που είναι ίσα με το pvot έχουν βαθμό ανάμεσα σε h και Τα στοιχεία μεγαλύτερα του pvot έχουν βαθμό μεγαλύτερο από Οι αναδρομικές κλήσεις λαμβάνουν υπόψη Στοιχεία με βαθμό μικρότερο από h Στοιχεία με βαθμό μεγαλύτερο από Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής Αλγόριθμος nplacequcsort(s, l, r) Είσοδος ακολουθία S, βαθμοί l και r Έξοδος ακολουθία S με στοιχεία βαθμού ανάμεσα σε l και r αναδιατεταγμένα σε αύξουσα σειρά f l r return a r και om nteger between l και r x S.elemAtRan() (h, ) nplacepartton(x) nplacequcsort(s, l, h 1) nplacequcsort(s, 1, r) 34
35 In-Place Διαχωρισμός Εκτέλεσε το διαχωρισμό με 2 δείκτες για να χωρίσεις το S σε L και E G (μια παρόμοια μέθοδος μπορεί να χωρίσει το E G σε E και G). j (pvot = 6) Επανάλαβε μέχρι τα j και να διασταυρωθούν: Διάτρεξε το j δεξιά μέχρι να βρεις στοιχείο > x. Διάτρεξε το αριστερά μέχρι να βρεις στοιχείο < x. Άλλαξε τις θέσεις των στοιχείων που δείχνουν οι j και j Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 35
36 Παράδειγμα A. Κατασκευάστε το δυαδικό δέντρο (bnary tree) που αντιστοιχεί στην εκτέλεση του αλγόριθμου ταξινόμησης qucsort (ταξινόμηση με διαμερισμό και ανταλλαγή) στον πίνακα Α=[10, 4, 15, 7, 23, 6, 15,14, 16, 20]. Κάθε κόμβος του δέντρου θα περιέχει τον υποπίνακα που κάθε φορά καλείται με τις αναδρομικές κλήσεις της συνάρτησης. Β. Πώς επηρεάζει η επιλογή του άξονα (pvot) την απόδοση του αλγόριθμου qucsort; Μπορούμε να χρησιμοποιούμε ως άξονα το τελευταίο στοιχείο του πίνακα; Δικαιολογείστε την απάντησή σας. Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 36
37 A. Κατασκευάστε το δυαδικό δέντρο (bnary tree) που αντιστοιχεί στην εκτέλεση του αλγόριθμου ταξινόμησης qucsort (ταξινόμηση με διαμερισμό και ανταλλαγή) στον πίνακα Α=[10, 4, 15, 7, 23, 6, 15,14, 16, 20]. Κάθε κόμβος του δέντρου θα περιέχει τον υποπίνακα που κάθε φορά καλείται με τις αναδρομικές κλήσεις της συνάρτησης. Μέχρι να πάρουμε τα δύο πρώτα παιδιά, (6,4,7) και (15,23,10,15,14,16,20), γίνονται οι παρακάτω ανταλλαγές (swaps): 10 με 6, 15 (το αριστερότερο) με 7. Μέχρι να πάρουμε τα δύο παιδιά (14,15,10) και (23,15,16,20) γίνονται οι παρακάτω ανταλλαγές (swaps): 15 (το αριστερότερο) με 14, 23 με 15 (το αριστερότερο). Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 37
38 Παράδειγμα Β. Πώς επηρεάζει η επιλογή του άξονα (pvot) την απόδοση του αλγόριθμου qucsort; Μπορούμε να χρησιμοποιούμε ως άξονα το τελευταίο στοιχείο του πίνακα; Δικαιολογείστε την απάντησή σας. Aν κάθε φορά επιλέγεται ως άξονας το μεσαίο στοιχείο και οι τιμές των κλειδιών ακολουθούν τυχαία κατανομή τότε η ταξινόμηση είναι αποτελεσματική γιατί ο πίνακας χωρίζεται σε δύο περίπου ισομήκεις υποπίνακες Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 38
39 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; Pvot το 1 ο στοιχείο του πίνακα =
40 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot =
41 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot =
42 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot =
43 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot =
44 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot =
45 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot =
46 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot =
47 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot =
48 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = Άρα, μετά το partton στον πίνακα ταξινομήσαμε τα στοιχεία έτσι ώστε στα αριστερά του pvot (8) να είναι όλα όσα είναι μικρότερα από αυτό (κανένα) και στα δεξιά όλα όσα είναι μεγαλύτερα. Με βάση τον αλγόριθμο του qucsort θα πρέπει να κάνουμε qucsort για κάθε υποπίνακα ο οποίος στο παράδειγμά μας είναι ο null για τα στοιχεία «μικρότερα του 8» και ο [ ] για τα στοιχεία «μεγαλύτερα του 8»
49 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; gude
50 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; Pvot το 1 ο στοιχείο του πίνακα = gude
51 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
52 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
53 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
54 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
55 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
56 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
57 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
58 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
59 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
60 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
61 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
62 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
63 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
64 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
65 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude Άρα, μετά το partton στον πίνακα ταξινομήσαμε τα στοιχεία έτσι ώστε στα αριστερά του pvot (12) να είναι όλα όσα είναι μικρότερα από αυτό και στα δεξιά όλα όσα είναι μεγαλύτερα. Με βάση τον αλγόριθμο του qucsort θα πρέπει να κάνουμε qucsort για κάθε υποπίνακα ο οποίος στο παράδειγμά μας είναι ο [ ] για τα στοιχεία «μικρότερα του 12» και ο [ ] για τα στοιχεία «μεγαλύτερα του 12»
66 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; Pvot το 1 ο στοιχείο του πίνακα = gude
67 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
68 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
69 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
70 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
71 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
72 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude
73 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot = gude Άρα, μετά το partton στον πίνακα ταξινομήσαμε τα στοιχεία έτσι ώστε στα αριστερά του pvot (10) να είναι όλα όσα είναι μικρότερα από αυτό και στα δεξιά όλα όσα είναι μεγαλύτερα. Με βάση τον αλγόριθμο του qucsort θα πρέπει να κάνουμε qucsort για κάθε υποπίνακα ο οποίος στο παράδειγμά μας είναι ο [9] για τα στοιχεία «μικρότερα του 10» και ο [11] για τα στοιχεία «μεγαλύτερα του 10»
74 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; Η συνθήκη f δεν ισχύει άρα τελειώσαμε με το αριστερό τμήμα gude
75 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; Η συνθήκη f δεν ισχύει άρα τελειώσαμε με το δεξί τμήμα gude
76 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; gude Άρα, συνεχίζουμε με το δεξί τμήμα του gude=12 που είναι ο πίνακας [ ]
77 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; Pvot το 1 ο στοιχείο του πίνακα = gude
78 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot= gude
79 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot= gude
80 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot= gude
81 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot= gude
82 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; pvot= gude Άρα, μετά το partton στον πίνακα ταξινομήσαμε τα στοιχεία έτσι ώστε στα αριστερά του pvot (13) να είναι όλα όσα είναι μικρότερα από αυτό και στα δεξιά όλα όσα είναι μεγαλύτερα. Με βάση τον αλγόριθμο του qucsort θα πρέπει να κάνουμε qucsort για κάθε υποπίνακα ο οποίος στο παράδειγμά μας είναι ο null για τα στοιχεία «μικρότερα του 13» και ο [15 14] για τα στοιχεία «μεγαλύτερα του 13»
83 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; Η συνθήκη f δεν ισχύει άρα τελειώσαμε με το αριστερό τμήμα gude
84 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; gude
85 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; gude
86 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; gude
87 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; gude
88 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; gude Άρα, μετά το partton στον πίνακα ταξινομήσαμε τα στοιχεία έτσι ώστε στα αριστερά του pvot (15) να είναι όλα όσα είναι μικρότερα από αυτό και στα δεξιά όλα όσα είναι μεγαλύτερα. Με βάση τον αλγόριθμο του qucsort θα πρέπει να κάνουμε qucsort για κάθε υποπίνακα ο οποίος στο παράδειγμά μας είναι ο [14] για τα στοιχεία «μικρότερα του 15» και ο null για τα στοιχεία «μεγαλύτερα του 15»
89 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; Η συνθήκη f δεν ισχύει άρα τελειώσαμε με το αριστερό τμήμα gude
90 qucsort(a,, ) { f( < ) { gude = partton(a,, ) qucsort(a,, gude-1); qucsort(a, gude+1, ); partton (A,, ) { pvot= πρώτο στοιχείο, ή μεσαίο στοιχείο, ή τυχαίο στοιχείο του πίνακα; swap(a[], pvot); = ; = +1; ++ untl (A[] >= pvot or ==); -- untl (A[] <= pvot or ==); f (<) swap(a[], A[]); untl >=; swap(a[], A[]); return ; Ο πίνακας ταξινομημένος είναι :
91 Περίληψη Αλγορίθμων Ταξινόμησης Αλγόριθμος Μέσος Χρόνος Χειρότερος Χρόνος Παρατηρήσεις Bubble sort O(n 2 ) O(n 2 ) selecton-sort O(n 2 ) O(n 2 ) nserton-sort O(n 2 ) O(n 2 ) n-place αργός (καλός για μικρές εισόδους) n-place αργός (καλός για μικρές εισόδους) n-place αργός (καλός για μικρές εισόδους) quc-sort O(n log n) expected O(n 2 ) n-place, randomzed ταχύτατος (καλός για μεγάλες εισόδους) heap-sort O(n log n) O(n log n) merge-sort O(n log n) O(n log n) n-place ταχύς (καλός για μεγάλες εισόδους) σειριακή πρόσβαση δεδομένων ταχύς (καλός για πολύ μεγάλες εισόδους) Δομές Δεδομένων και Αλγόριθμοι Εργαστήριο Γνώσης και Ευφυούς Πληροφορικής 91
Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort) Ιωάννης Τόλλης Τμήμα Επιστήμης Υπολογιστών Ταχυταξινόμηση (Quick-Sort) 7 4 9 6 2 2 4 6 7 9 4 2 2 4 7 9 7
Διαβάστε περισσότεραΤαξινόμηση με συγχώνευση Merge Sort
Ταξινόμηση με συγχώνευση Merge Sort 7 2 9 4 2 4 7 9 7 2 2 7 9 4 4 9 7 7 2 2 9 9 4 4 Πληροφορικής 1 Διαίρει και Βασίλευε Η μέθοδος του «Διαίρει και Βασίλευε» είναι μια γενική αρχή σχεδιασμού αλγορίθμων
Διαβάστε περισσότεραΟ αλγόριθμος Quick-Sort. 6/14/2007 3:42 AM Quick-Sort 1
Ο αλγόριθμος Quick-Sort 7 4 9 6 2 2 4 6 7 9 4 2 2 4 7 9 7 9 2 2 9 9 6/14/2007 3:42 AM Quick-Sort 1 Κύρια σημεία για μελέτη Quick-sort ( 4.3) Αλγόριθμος Partition step Δέντρο Quick-sort Παράδειγμα εκτέλεσης
Διαβάστε περισσότεραΤαξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort
Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort 1, c 3, a 3, b 7, d 7, g 7, e B 0 1 3 4 5 6 7 8 9 1 BucketSort (Ταξινόμηση Κάδου) - Αρχικά θεωρείται ένα κριτήριο κατανομής με βάση το οποίο
Διαβάστε περισσότεραΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές Δεδομένων Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού
Διαβάστε περισσότεραMerge Sort (Ταξινόμηση με συγχώνευση) 6/14/2007 3:04 AM Merge Sort 1
Merge Sort (Ταξινόμηση με συγχώνευση) 7 2 9 4 2 4 7 9 7 2 2 7 9 4 4 9 7 7 2 2 9 9 4 4 6/14/2007 3:04 AM Merge Sort 1 Κύρια σημεία για μελέτη Το παράδειγμα του «διαίρει και βασίλευε» ( 4.1.1) Merge-sort
Διαβάστε περισσότεραΤαξινόμηση. Σαλτογιάννη Αθανασία
Ταξινόμηση Σαλτογιάννη Αθανασία Ταξινόμηση Ταξινόμηση Τι εννοούμε όταν λέμε ταξινόμηση; Ταξινόμηση Τι εννοούμε όταν λέμε ταξινόμηση; Ποια είδη αλγορίθμων ταξινόμησης υπάρχουν; Ταξινόμηση Τι εννοούμε όταν
Διαβάστε περισσότεραΔομές Δεδομένων & Αλγόριθμοι
Δομές Δεδομένων & Αναζήτηση & Ταξινόμηση 1 Αναζήτηση Έχω έναν πίνακα Α με Ν στοιχεία. Πρόβλημα: Βρες αν το στοιχείο x ανήκει στον πίνακα Αν ο πίνακας είναι αταξινόμητος τότε μόνη λύση σειριακή αναζήτηση
Διαβάστε περισσότερα3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. n! = 1*2*3*..(n-1)*n. n! = 1 αν n = 0, = n*(n-1)! αν n > ΑΝΑ ΡΟΜΗ Εισαγωγή
3 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ 3.1 ΑΝΑ ΡΟΜΗ 3.1.1 Εισαγωγή ΕΦΑΡΜΟΣΜΕΝΗ ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ Αναδροµή είναι η µέθοδος κατά την οποία, σε µία γλώσσα προγραµµατισµού, µία διαδικασία ή συνάρτηση έχει την δυνατότητα
Διαβάστε περισσότεραΑλγόριθμοι και Πολυπλοκότητα
Αλγόριθμοι και Πολυπλοκότητα Διαίρει και Βασίλευε Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Διαίρει και Βασίλευε Divide and Conquer Η τεχνική διαίρει και βασίλευε αναφέρεται
Διαβάστε περισσότεραΔομές Δεδομένων & Αλγόριθμοι
Δομές Δεδομένων & Αναζήτηση & Ταξινόμηση 1 Αναζήτηση Έχω έναν πίνακα Α με Ν στοιχεία. Πρόβλημα: Βρες αν το στοιχείο x ανήκει στον πίνακα Αν ο πίνακας είναι αταξινόμητος τότε μόνη λύση σειριακή αναζήτηση
Διαβάστε περισσότεραQuicksort. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι
Πρόβλημα Ταξινόμησης Quicksort Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Είσοδος : ακολουθία n αριθμών (α 1, α 2,..., α n
Διαβάστε περισσότεραΤαξινόμηση. 1. Στατιστικά Διάταξης 2. Στατιστικά σε Μέσο Γραμμικό Χρόνο. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη
Ταξινόμηση. Στατιστικά Διάταξης. Στατιστικά σε Μέσο Γραμμικό Χρόνο Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Στατιστικά Διάταξης Με τον όρο στατιστικά διάταξης (order statistics) εννοούμε την περίπτωση
Διαβάστε περισσότεραΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 9: Στατιστικά Διάταξης- Στατιστικά σε Μέσο Γραμμικό Χρόνο Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε
Διαβάστε περισσότεραΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές Δεδομένων Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού
Διαβάστε περισσότεραΑλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση Ιωάννης Τόλλης Τμήμα Επιστήμης Υπολογιστών Συγχωνευτική Ταξινόμηση (Merge Sort) 7 2 9 4 2 4 7 9 7 2 2 7 9 4
Διαβάστε περισσότεραΔομές Δεδομένων. Δημήτρης Μιχαήλ. Ταξινόμηση. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Δομές Δεδομένων Ταξινόμηση Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Το πρόβλημα Είσοδος n αντικείμενα a 1, a 2,..., a n με κλειδιά (συνήθως σε ένα πίνακα, ή λίστα, κ.τ.λ)
Διαβάστε περισσότεραΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων
ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Εξεταστική Ιανουαρίου 2014 Διδάσκων : Ευάγγελος Μαρκάκης 20.01.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες και
Διαβάστε περισσότεραHeapsort Using Multiple Heaps
sort sort Using Multiple s. Λεβεντέας Χ. Ζαρολιάγκης Τµήµα Μηχανικών Η/Υ & Πληροφορικής 29 Αυγούστου 2008 sort 1 Ορισµός ify Build- 2 sort Πως δουλεύει Ιδιότητες 3 4 Προβλήµατα Προτάσεις Ανάλυση Κόστους
Διαβάστε περισσότεραΑλγόριθμοι ταξινόμησης
Αλγόριθμοι Ταξινόμησης Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης BuubleSort, SelectionSort, InsertionSort, Merger Sort, Quick Soft ΕΠΛ Δομές Δεδομένων και Αλγόριθμοι
Διαβάστε περισσότεραΔιάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort
Διάλεξη 17: O Αλγόριθμος Ταξινόμησης HeapSort Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Η διαδικασία PercolateDown, Δημιουργία Σωρού O Αλγόριθμος Ταξινόμησης HeapSort Υλοποίηση, Παραδείγματα
Διαβάστε περισσότεραΟυρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης
Ουρές Προτεραιότητας: Υπενθύμιση Σωροί / Αναδρομή / Ταξινόμηση Ορέστης Τελέλης telelis@unipi.gr Τμήμα Ψηφιακών Συστημάτων, Πανεπιστήμιο Πειραιώς (Abstract Data Type) με μεθόδους: Μπορεί να υλοποιηθεί με
Διαβάστε περισσότεραQuicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1
Quicksort [Hoare, 62] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1 Quicksort [Hoare, 62] Στοιχείο διαχωρισµού (pivot), π.χ. πρώτο, τυχαίο, Αναδιάταξη και διαίρεση εισόδου σε δύο υπο-ακολουθίες:
Διαβάστε περισσότεραΤαξινόμηση. 1. Γρήγορη ταξινόμηση 2. Ταξινόμηση με Συγχώνευση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη
Ταξινόμηση. Γρήγορη ταξινόμηση. Ταξινόμηση με Συγχώνευση Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Γρήγορη Ταξινόμηση Η γρήγορη ταξινόμηση qucksort), που αλλιώς ονομάζεται και ταξινόμηση µε διαμερισμό
Διαβάστε περισσότεραΣχεδίαση και Ανάλυση Αλγορίθμων
Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα.0 Σταύρος Δ. Νικολόπουλος 06-7 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros Ταξινόμηση Selection-Sort Bubble-Sort και
Διαβάστε περισσότεραΑλγόριθμοι Ταξινόμησης Μέρος 2
Αλγόριθμοι Ταξινόμησης Μέρος 2 Μανόλης Κουμπαράκης 1 Προχωρημένοι Αλγόριθμοι Ταξινόμησης Στη συνέχεια θα παρουσιάσουμε τρείς προχωρημένους αλγόριθμους ταξινόμησης: treesort, quicksort και mergesort. 2
Διαβάστε περισσότεραΔοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης
Δοµές Δεδοµένων 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων Ε. Μαρκάκης Περίληψη Quicksort Χαρακτηριστικά επιδόσεων Μη αναδροµική υλοποίηση Δέντρα Μαθηµατικές ιδιότητες Δοµές Δεδοµένων 11-2
Διαβάστε περισσότεραQuicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών
Quicksort Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Quicksort [Hoare, 6] Στοιχείο διαχωρισμού (pivot),
Διαβάστε περισσότεραΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ταξινόµηση Mergesort Κεφάλαιο 8. Ε. Μαρκάκης Επίκουρος Καθηγητής
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ταξινόµηση Mergesort Κεφάλαιο 8 Ε. Μαρκάκης Επίκουρος Καθηγητής Περίληψη Ταξινόµηση µε συγχώνευση Αλγόριθµος Mergesort Διµερής συγχώνευση Αφηρηµένη επιτόπου συγχώνευση Αναλυτική ταξινόµηση
Διαβάστε περισσότεραΔομές δεδομένων (2) Αλγόριθμοι
Δομές δεδομένων (2) Αλγόριθμοι Παράγωγοι τύποι (struct) σύνοψη προηγουμένων Πίνακες: πολλές μεταβλητές ίδιου τύπου Παράγωγοι τύποι ή Δομές (struct): ομαδοποίηση μεταβλητών διαφορετικού τύπου struct Student
Διαβάστε περισσότεραΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 7α: Μελέτη πολυπλοκότητας των Αλγόριθμων qucksort & mergesort Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται
Διαβάστε περισσότεραQuicksort. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο
Quicksort ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Quicksort [Hoare, 62] Στοιχείο διαχωρισμού (pivot), π.χ. πρώτο, τυχαίο, Αναδιάταξη και διαίρεση
Διαβάστε περισσότεραΕισαγωγή στην Ανάλυση Αλγορίθμων
Εισαγωγή στην Ανάλυση Αλγορίθμων (4) Μεθοδολογία αναδρομικών σχέσεων (Ι) Με επανάληψη της αναδρομής Έστω όπου r και a είναι σταθερές. Βρίσκουμε τη σχέση που εκφράζει την T(n) συναρτήσει της T(n-) την T(n)
Διαβάστε περισσότεραΕπιλογή. Επιμέλεια διαφανειών: Δ. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο
Επιλογή Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Πρόβλημα Επιλογής Πίνακας Α[ ] με n στοιχεία (όχι ταξινομημένος). Αριθμός k,
Διαβάστε περισσότεραΔιάλεξη 09: Αλγόριθμοι Ταξινόμησης I
Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης: Α. SelectoSort Ταξινόμηση με Επιλογή Β. IsertoSort Ταξινόμηση με Εισαγωγή Γ. MergeSort
Διαβάστε περισσότεραεπιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S
Μελετάμε την περίπτωση όπου αποθηκεύουμε ένα (δυναμικό) σύνολο στοιχειών,, τα οποίo είναι υποσύνολο του. Υποστηριζόμενες λειτουργίες αναζήτηση(s,x): εισαγωγή(s,x): διαγραφή(s,x): διάδοχος(s,x): προκάτοχος(s,x):
Διαβάστε περισσότεραΔιαδικασιακός Προγραμματισμός
Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 12 η Αναζήτηση/Ταξινόμηση Πίνακα Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην
Διαβάστε περισσότεραΔιδάσκων: Παναγιώτης Ανδρέου
Διάλεξη 20: Αλγόριθμοι ΤαξινόμησηςIII Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Ε. QuickSort Γρήγορη Ταξινόμηση - Έμμεση Ταξινόμηση - Εξωτερική Ταξινόμηση Διδάσκων:
Διαβάστε περισσότεραΕισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 7 η. Βασίλης Στεφανής
Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ Διάλεξη 7 η Βασίλης Στεφανής Αλγόριθμοι ταξινόμησης Στην προηγούμενη διάλεξη είδαμε: Binary search Λειτουργεί μόνο σε ταξινομημένους πίνακες Πώς τους ταξινομούμε? Πολλοί τρόποι. Ενδεικτικά:
Διαβάστε περισσότερα1η Σειρά Γραπτών Ασκήσεων
1/20 Ασυμπτωτικός Συμβολισμός, Αναδρομικές Σχέσεις 1η Σειρά Γραπτών Ασκήσεων Αλγόριθμοι και Πολυπλοκότητα ΣΗΜΜΥ, Εθνικό Μετσόβιο Πολυτεχνείο 1 Ασυμπτωτικός Συμβολισμός, Αναδρομικές Σχέσεις 2 3 4 5 2/20
Διαβάστε περισσότεραΠρόβληµα Επιλογής. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Επιλογή 1
Πρόβληµα Επιλογής Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Επιλογή 1 Πρόβληµα Επιλογής Πίνακας Α[ Αριθµός k, 1 k n. ] µε n στοιχεία (όχι ταξινοµηµένος). Υπολογισµός του k-οστού µικρότερου στοιχείου (στοιχείο
Διαβάστε περισσότεραΕιδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων
Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Άσκηση 1 α) Η δομή σταθμισμένης ένωσης με συμπίεση διαδρομής μπορεί να τροποποιηθεί πολύ εύκολα ώστε να υποστηρίζει τις
Διαβάστε περισσότεραΑλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012
Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012 3 5 1 Ταξινόμηση - Sorting Πίνακας Α 1 3 5 5 3 1 Ταξινόμηση (Φθίνουσα) Χωρίς Ταξινόμηση Ταξινόμηση
Διαβάστε περισσότεραιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο
ιαίρει-και-βασίλευε ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο ιαίρει-και-βασίλευε Γενική μέθοδος σχεδιασμού αλγορίθμων: ιαίρεση σε ( 2) υποπροβλήματα
Διαβάστε περισσότεραΕπιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών
Διαίρει-και-Βασίλευε Επιμέλεια διαφανειών: Δ. Φωτάκης Τροποποιήσεις-προσθήκες: Α. Παγουρτζής Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Διαίρει-και-Βασίλευε Γενική
Διαβάστε περισσότεραauth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο
Σχεδίαση Αλγορίθμων Διαίρει και Βασίλευε http://delab.csd.auth.gr/courses/algorithms/ auth 1 Διαίρει και Βασίλευε Η γνωστότερη ρημέθοδος σχεδιασμού αλγορίθμων: 1. Διαιρούμε το στιγμιότυπο του προβλήματος
Διαβάστε περισσότεραΔιασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1
Διασυνδεδεμένες Δομές Δυαδικά Δέντρα Προγραμματισμός II 1 lalis@inf.uth.gr Δέντρα Τα δέντρα είναι κλασικές αναδρομικές δομές Ένα δέντρο αποτελείται από υποδέντρα, καθένα από τα οποία μπορεί να θεωρηθεί
Διαβάστε περισσότεραΕπιλογή. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο
Επιλογή ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Πρόβλημα Επιλογής Πίνακας Α[]με n στοιχεία (όχι ταξινομημένος). Αριθμός k, 1 k n. Υπολογισμός
Διαβάστε περισσότεραΑναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη
Αναζήτηση. Σειριακή αναζήτηση. Δυαδική Αναζήτηση Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Παραδοχή Στη συνέχεια των διαφανειών (διαλέξεων) η ασυμπτωτική έκφραση (συμβολισμός Ο, Ω, Θ) του χρόνου
Διαβάστε περισσότερα8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 8. Σωροί (Heaps)-Αναδρομή- Προχωρημένη Ταξινόμηση 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων
Διαβάστε περισσότεραΔομές Δεδομένων και Αλγόριθμοι
Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 8 Quick Sort 1 / 11 Ο αλγόριθμος QuickSort 1 Προτάθηκε από τον CAR (Tony) Hoare το 1961 2 Ο αλγόριθμος
Διαβάστε περισσότεραQuicksort. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών
Quicksort ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται
Διαβάστε περισσότεραΔιάλεξη 09: Αλγόριθμοι Ταξινόμησης I
Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Α. SelectionSort Ταξινόμηση με Επιλογή Β. InsertionSort Ταξινόμηση με Εισαγωγή
Διαβάστε περισσότεραΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 6α: Αναζήτηση Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commos. Για εκπαιδευτικό
Διαβάστε περισσότεραΌρια Αλγόριθμων Ταξινόμησης. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη
Όρια Αλγόριθμων Ταξινόμησης Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Όρια Αλγόριθμων Ταξινόμησης Μέχρι στιγμής εξετάσθηκαν μέθοδοι ταξινόμησης µε πολυπλοκότητα της τάξης Θ ) ή Θlog ). Τι εκφράζει
Διαβάστε περισσότεραΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 4: Αναδρομικές σχέσεις και ανάλυση αλγορίθμων Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης
Διαβάστε περισσότεραΕπιλογή. Πρόβλημα Επιλογής. Μέγιστο / Ελάχιστο. Εφαρμογές
Επιλογή Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Πρόβλημα Επιλογής Πίνακας Α[]με n στοιχεία (όχι ταξινομημένος). Αριθμός
Διαβάστε περισσότεραΔιδάσκων: Κωνσταντίνος Κώστα
Διάλεξη Ε4: Επανάληψη Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή σε δενδρικές δομές δεδομένων, Δυαδικά Δένδρα Αναζήτησης Ισοζυγισμένα Δένδρα & 2-3 Δένδρα Διδάσκων: Κωνσταντίνος
Διαβάστε περισσότεραΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ
ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ (ΑΛΓΟΡΙΘΜΟΙ, Sanjoy Dasgupta, Christos Papadimitriou, Umesh Vazirani, σελ. 55-62 ΣΧΕΔΙΑΣΜΟΣ ΑΛΓΟΡΙΘΜΩΝ, Jon Kleinberg, Eva Tardos, Κεφάλαιο 5) Δυαδική αναζήτηση
Διαβάστε περισσότεραΕνότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις
Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε μία αναδρομική συνάρτηση που θα παίρνει ως παράμετρο ένα δείκτη στη ρίζα ενός δυαδικού δένδρου και θα επιστρέφει το βαθμό του
Διαβάστε περισσότεραΑλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες)
Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι
Διαβάστε περισσότεραΔιαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2
Διαίρει-και-Βασίλευε Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2 Διαίρει-και-Βασίλευε Γενική µέθοδος σχεδιασµού αλγορίθµων: Διαίρεση σε ( 2) υποπροβλήµατα (σηµαντικά) µικρότερου µεγέθους.
Διαβάστε περισσότεραΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων
ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Πτυχιακή Εξεταστική Ιούλιος 2014 Διδάσκων : Ευάγγελος Μαρκάκης 09.07.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες
Διαβάστε περισσότεραΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ
1 ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ Φροντιστήριο #10: Αλγόριθμοι Διαίρει & Βασίλευε: Master Theorem, Αλγόριθμοι Ταξινόμησης, Πιθανοτικός
Διαβάστε περισσότεραΕισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1
Εισαγωγή στην Επεξεργασία Ερωτήσεων Βάσεις Δεδομένων 2013-2014 Ευαγγελία Πιτουρά 1 Επεξεργασία Ερωτήσεων Θα δούμε την «πορεία» μιας SQL ερώτησης (πως εκτελείται) Ερώτηση SQL Ερώτηση ΣΒΔ Αποτέλεσμα Βάσεις
Διαβάστε περισσότεραΑλγόριθµοι και Πολυπλοκότητα
Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα Φεβρουαρίου 0 / ένδρα Ενα δένδρο είναι
Διαβάστε περισσότεραΆσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).
Κ08 Δομές Δεδομένων και Τεχνικές Προγραμματισμού Διδάσκων: Μανόλης Κουμπαράκης Εαρινό Εξάμηνο 2016-2017. Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).
Διαβάστε περισσότεραΓ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης
Γ7.5 Αλγόριθμοι Αναζήτησης Γ Λυκείου Κατεύθυνσης Εισαγωγή Αλγόριθμος αναζήτησης θεωρείται ένας αλγόριθμος, ο οποίος προσπαθεί να εντοπίσει ένα στοιχείο με συγκεκριμένες ιδιότητες, μέσα σε μία συλλογή από
Διαβάστε περισσότεραΕπιλογή. ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών
Επιλογή ιδάσκοντες: Σ. Ζάχος,. Φωτάκης Επιμέλεια διαφανειών:. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται
Διαβάστε περισσότεραΤι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές
Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι
Διαβάστε περισσότεραΕισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1
Εισαγωγή στην Επεξεργασία Ερωτήσεων 1 Επεξεργασία Ερωτήσεων Θα δούμε την «πορεία» μιας SQL ερώτησης (πως εκτελείται) Ερώτηση SQL Ερώτηση ΣΒΔ Αποτέλεσμα 2 Βήματα Επεξεργασίας Τα βασικά βήματα στην επεξεργασία
Διαβάστε περισσότεραΕισαγωγή στους Αλγορίθμους
Εισαγωγή στους Αλγορίθμους Ενότητα 5η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Η Μέθοδος «Διαίρει & Βασίλευε» Η Μέθοδος
Διαβάστε περισσότεραΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 7β: Όρια Αλγόριθμων Ταξινόμησης Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commos.
Διαβάστε περισσότεραΣχεδίαση και Ανάλυση Αλγορίθμων
Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 3.0 Σταύρος Δ. Νικολόπουλος 0-7 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros Διαίρει και Βασίλευε Quick-sort και Merge-sort
Διαβάστε περισσότεραa 1 a 2 a n. 3. i = j 1 5. A[i + 1] = A[i] 6. i = i 1
Εισαγωγη στον Σχεδιασμο και Αναλυση αλγοριθμων Αλγοριθμοι Ταξινομησης Η ταξινόμηση μιας ακολουθίας αριθμών είναι από τα βασικά αποτελέσματα της θεωρίας αλγορίθμων. Μια ευρεία γκάμα τέτοιων αλγορίθμων έχουν
Διαβάστε περισσότεραΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φ Ρ Ο Ν Τ Ι Σ Τ Η Ρ Ι Ο 1 : ΤΑΞΙΝΟΜΗΣΗ Δ Ρ Ι Τ Σ Α Σ Η Λ Ι Α Σ Υ Π Ο Ψ Η Φ Ι Ο Σ Δ Ι Δ Α Κ Τ Ο Ρ Α Σ
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φ Ρ Ο Ν Τ Ι Σ Τ Η Ρ Ι Ο 1 : ΤΑΞΙΝΟΜΗΣΗ Δ Ρ Ι Τ Σ Α Σ Η Λ Ι Α Σ Υ Π Ο Ψ Η Φ Ι Ο Σ Δ Ι Δ Α Κ Τ Ο Ρ Α Σ ΤΟ ΠΡΟΒΛΗΜΑ ΤΗΣ ΤΑΞΙΝΟΜΗΣΗΣ Ορισμός ταξινόμησης 2 Κατηγορίες αλγορίθμων ταξινόμησης
Διαβάστε περισσότεραΤαξινόμηση. Παύλος Εφραιμίδης. Δομές Δεδομένων Ταξινόμηση 1
Ταξινόμηση Παύλος Εφραιμίδης Δομές Δεδομένων Ταξινόμηση 1 Το πρόβλημα της ταξινόμησης Δομές Δεδομένων Ταξινόμηση 2 Ταξινόμηση Δίνεται πολυ-σύνολο Σ με στοιχεία από κάποιο σύμπαν U (πχ. U = το σύνολο των
Διαβάστε περισσότεραΑλγόριθμοι Ταξινόμησης Μέρος 4
Αλγόριθμοι Ταξινόμησης Μέρος 4 Μανόλης Κουμπαράκης Δομές Δεδομένων και Τεχνικές 1 Μέθοδοι Ταξινόμησης Βασισμένοι σε Συγκρίσεις Κλειδιών Οι αλγόριθμοι ταξινόμησης που είδαμε μέχρι τώρα αποφασίζουν πώς να
Διαβάστε περισσότεραΣχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο
Πολλαπλασιασμός μεγάλων ακεραίων (1) Για να πολλαπλασιάσουμε δύο ακεραίους με n 1 και n 2 ψηφία με το χέρι, θα εκτελέσουμε n 1 n 2 πράξεις πολλαπλασιασμού Πρόβλημα ρβημ όταν έχουμε πολλά ψηφία: A = 12345678901357986429
Διαβάστε περισσότεραΔιάλεξη 10: Αλγόριθμοι Ταξινόμησης II
ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Δ. QuickSort Γρήγορη Ταξινόμηση Ε. BucketSort
Διαβάστε περισσότεραΠρογραμματισμός Ι (ΗΥ120)
Προγραμματισμός Ι (ΗΥ120) Διάλεξη 20: Δυαδικό Δέντρο Αναζήτησης Δυαδικό δέντρο Κάθε κόμβος «γονέας» περιέχει δύο δείκτες που δείχνουν σε δύο κόμβους «παιδιά» του ιδίου τύπου. Αν οι δείκτες προς αυτούς
Διαβάστε περισσότεραΑλγόριθμοι Ταξινόμησης Μέρος 1
Αλγόριθμοι Ταξινόμησης Μέρος 1 Μανόλης Κουμπαράκης 1 Το Πρόβλημα της Ταξινόμησης Το πρόβλημα της ταξινόμησης (sorting) μιας ακολουθίας στοιχείων με κλειδιά ενός γνωστού τύπου (π.χ., τους ακέραιους ή τις
Διαβάστε περισσότεραΑλγόριθµοι και Πολυπλοκότητα
Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα 23 Μαρτίου 2017 1 / 20 Επιλογή Το πρόβληµα
Διαβάστε περισσότεραΔομές Δεδομένων & Αλγόριθμοι
Σωροί 1 Ορισμοί Ένα δέντρο μεγίστων (δένδρο ελαχίστων) είναι ένα δένδρο, όπου η τιμή κάθε κόμβου είναι μεγαλύτερη (μικρότερη) ή ίση με των τιμών των παιδιών του Ένας σωρός μεγίστων (σωρός ελαχίστων) είναι
Διαβάστε περισσότεραΔιάλεξη 19: Κατανομή Πόρων Κόψιμο Τούρτας. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι
Διάλεξη 19: Κατανομή Πόρων Κόψιμο Τούρτας ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι Ορισμός Προβλήματος Τι θα δούμε σήμερα Συνθήκη Δικαιοσύνης Αλγόριθμος 2 επεξεργαστών (Cut & Choose) Αλγόριθμος 3 επεξεργαστών
Διαβάστε περισσότεραΑλγόριθµοι. Παράδειγµα. ιαίρει και Βασίλευε. Παράδειγµα MergeSort. Τεχνικές Σχεδιασµού Αλγορίθµων
Τεχνικές Σχεδιασµού Αλγορίθµων Αλγόριθµοι Παύλος Εφραιµίδης pefraimi@ee.duth.gr Ορισµένες γενικές αρχές για τον σχεδιασµό αλγορίθµων είναι: ιαίρει και Βασίλευε (Divide and Conquer) υναµικός Προγραµµατισµός
Διαβάστε περισσότεραΔένδρα Αναζήτησης Πολλαπλής Διακλάδωσης
Δένδρα Αναζήτησης Πολλαπλής Διακλάδωσης Δένδρα στα οποία κάθε κόμβος μπορεί να αποθηκεύει ένα ή περισσότερα κλειδιά. Κόμβος με d διακλαδώσεις : k 1 k 2 k 3 k 4 d-1 διατεταγμένα κλειδιά d διατεταγμένα παιδιά
Διαβάστε περισσότεραΠανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 2. Πίνακες 45 23 28 95 71 19 30 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 12/10/2017
Διαβάστε περισσότεραΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής
ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ουρές προτεραιότητας Κεφάλαιο 9 Ε. Μαρκάκης Επίκουρος Καθηγητής Περίληψη Ουρές προτεραιότητας Στοιχειώδεις υλοποιήσεις Δοµή δεδοµένων σωρού Αλγόριθµοι σε σωρούς Ο αλγόριθµος heapsort Δοµές
Διαβάστε περισσότεραΣχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 9: ΒΑΣΙΚΕΣ ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΜΟΥ ΚΑΙ ΑΝΑΛΥΣΗΣ ΑΛΓΟΡΙΘΜΩΝ ΕΞΙΣΟΡΡΟΠΗΣΗ, ΔΙΑΙΡΕΙ ΚΑΙ ΒΑΣΙΛΕΥΕ
Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 9: ΒΑΣΙΚΕΣ ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΜΟΥ ΚΑΙ ΑΝΑΛΥΣΗΣ ΑΛΓΟΡΙΘΜΩΝ ΕΞΙΣΟΡΡΟΠΗΣΗ, ΔΙΑΙΡΕΙ ΚΑΙ ΒΑΣΙΛΕΥΕ Δημήτριος Κουκόπουλος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα
Διαβάστε περισσότεραΔομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής
Ενότητα 8: Γραμμική Αναζήτηση και Δυαδική Αναζήτηση-Εισαγωγή στα Δέντρα και Δυαδικά Δέντρα-Δυαδικά Δέντρα Αναζήτησης & Υλοποίηση ΔΔΑ με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό
Διαβάστε περισσότεραΤαξινόμηση. 1. Ταξινόμηση με Εισαγωγή 2. Ταξινόμηση με Επιλογή. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη
Ταξινόμηση. Ταξινόμηση με Εισαγωγή. Ταξινόμηση με Επιλογή Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Ταξινόμηση Η ταξινόμηση sortg τοποθετεί ένα σύνολο κόμβων ή εγγραφών σε μία συγκεκριμένη διάταξη
Διαβάστε περισσότερα5. Απλή Ταξινόμηση. ομές εδομένων. Χρήστος ουλκερίδης. Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 5. Απλή Ταξινόμηση 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 11/11/2016 Εισαγωγή Η
Διαβάστε περισσότεραΣχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο
Σχεδίαση Αλγορίθμων Διαίρει και Βασίλευε http://delab.csd.auth.gr/~gounaris/courses/ad auth gounaris/courses/ad 1 Διαίρει και Βασίλευε Η γνωστότερη ρημέθοδος σχεδιασμού αλγορίθμων: 1. Διαιρούμε το στιγμιότυπο
Διαβάστε περισσότεραΠανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων ομές εδομένων
Πανεπιστήμιο Πειραιώς Σχολή Τεχνολογιών Πληροφορικής και Επικοινωνιών Τμήμα Ψηφιακών Συστημάτων 2. Πίνακες 45 23 28 95 71 19 30 2 ομές εδομένων 4 5 Χρήστος ουλκερίδης Τμήμα Ψηφιακών Συστημάτων 21/10/2016
Διαβάστε περισσότεραΣχεδίαση & Ανάλυση Αλγορίθμων
Σχεδίαση & Ανάλυση Αλγορίθμων Ενότητα 3 Αλγόριθμοι Επιλογής Σταύρος Δ. Νικολόπουλος Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros Αλγόριθμοι Επιλογής Γνωρίζουμε
Διαβάστε περισσότεραΕργαστηριακή Άσκηση 1
Εργαστηριακή Άσκηση 1 Επανάληψη προγραμματισμού Βασικοί Αλγόριθμοι Είσοδος τιμών από το πληκτρολόγιο Σε όλα τα προγράμματα που θα γράψουμε στην συνέχεια του εξαμήνου θα χρειαστεί να εισάγουμε τιμές σε
Διαβάστε περισσότεραΔομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο
Δομές Δεδομένων Δέντρα Αναζήτησης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Το πρόβλημα Αναζήτηση Θέλουμε να διατηρήσουμε αντικείμενα με κλειδιά και να μπορούμε εκτός από
Διαβάστε περισσότεραΑλγόριθμοι Ταξινόμησης Μέρος 3
Αλγόριθμοι Ταξινόμησης Μέρος 3 Μανόλης Κουμπαράκης 1 Ταξινόμηση με Ουρά Προτεραιότητας Θα παρουσιάσουμε τώρα δύο αλγόριθμους ταξινόμησης που χρησιμοποιούν μια ουρά προτεραιότητας για την υλοποίηση τους.
Διαβάστε περισσότεραΚεφάλαιο 2. Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014
Κεφάλαιο 2 Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014 Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. 1 Σωρός και Ταξινόμηση
Διαβάστε περισσότερα