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

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

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

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) Ιωάννης Τόλλης Τμήμα Επιστήμης Υπολογιστών Ταχυταξινόμηση (Quick-Sort) 7 4 9 6 2 2 4 6 7 9 4 2 2 4 7 9 7

Διαβάστε περισσότερα

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

Ταξινόμηση με συγχώνευση 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. 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 Ταξινόμηση κάδου και ταξινόμηση Ρίζας 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 (Ταξινόμηση με συγχώνευση) 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 ΑΝΑ ΡΟΜΗ ΑΝΑΖΗΤΗΣΗ - ΤΑΞΙΝΟΜΗΣΗ. 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. Πρόβλημα Ταξινόμησης. Μέθοδοι Ταξινόμησης. Συγκριτικοί Αλγόριθμοι Πρόβλημα Ταξινόμησης Quicksort Διδάσκοντες: Σ. Ζάχος, Δ. Φωτάκης Επιμέλεια διαφανειών: Δ. Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Είσοδος : ακολουθία n αριθμών (α 1, α 2,..., α n

Διαβάστε περισσότερα

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

Ταξινόμηση. 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

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 Διάλεξη 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] Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Quicksort 1 Quicksort [Hoare, 62] Στοιχείο διαχωρισµού (pivot), π.χ. πρώτο, τυχαίο, Αναδιάταξη και διαίρεση εισόδου σε δύο υπο-ακολουθίες:

Διαβάστε περισσότερα

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

Ταξινόμηση. 1. Γρήγορη ταξινόμηση 2. Ταξινόμηση με Συγχώνευση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Ταξινόμηση. Γρήγορη ταξινόμηση. Ταξινόμηση με Συγχώνευση Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Γρήγορη Ταξινόμηση Η γρήγορη ταξινόμηση qucksort), που αλλιώς ονομάζεται και ταξινόμηση µε διαμερισμό

Διαβάστε περισσότερα

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

Σχεδίαση και Ανάλυση Αλγορίθμων Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα.0 Σταύρος Δ. Νικολόπουλος 06-7 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros Ταξινόμηση Selection-Sort Bubble-Sort και

Διαβάστε περισσότερα

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

Αλγόριθμοι Ταξινόμησης Μέρος 2 Αλγόριθμοι Ταξινόμησης Μέρος 2 Μανόλης Κουμπαράκης 1 Προχωρημένοι Αλγόριθμοι Ταξινόμησης Στη συνέχεια θα παρουσιάσουμε τρείς προχωρημένους αλγόριθμους ταξινόμησης: treesort, quicksort και mergesort. 2

Διαβάστε περισσότερα

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

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης Δοµές Δεδοµένων 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων Ε. Μαρκάκης Περίληψη Quicksort Χαρακτηριστικά επιδόσεων Μη αναδροµική υλοποίηση Δέντρα Μαθηµατικές ιδιότητες Δοµές Δεδοµένων 11-2

Διαβάστε περισσότερα

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

Quicksort. Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Quicksort Επιμέλεια διαφανειών: Δ. Φωτάκης Μικροαλλαγές: Α. Παγουρτζής Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Quicksort [Hoare, 6] Στοιχείο διαχωρισμού (pivot),

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Δομές δεδομένων (2) Αλγόριθμοι Δομές δεδομένων (2) Αλγόριθμοι Παράγωγοι τύποι (struct) σύνοψη προηγουμένων Πίνακες: πολλές μεταβλητές ίδιου τύπου Παράγωγοι τύποι ή Δομές (struct): ομαδοποίηση μεταβλητών διαφορετικού τύπου struct Student

Διαβάστε περισσότερα

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΑΝΑΛΥΣΗ ΑΛΓΟΡΙΘΜΩΝ Ενότητα 7α: Μελέτη πολυπλοκότητας των Αλγόριθμων qucksort & mergesort Μαρία Σατρατζέμη Τμήμα Εφαρμοσμένης Πληροφορικής Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται

Διαβάστε περισσότερα

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

Quicksort. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο Quicksort ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Quicksort [Hoare, 62] Στοιχείο διαχωρισμού (pivot), π.χ. πρώτο, τυχαίο, Αναδιάταξη και διαίρεση

Διαβάστε περισσότερα

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

Εισαγωγή στην Ανάλυση Αλγορίθμων Εισαγωγή στην Ανάλυση Αλγορίθμων (4) Μεθοδολογία αναδρομικών σχέσεων (Ι) Με επανάληψη της αναδρομής Έστω όπου r και a είναι σταθερές. Βρίσκουμε τη σχέση που εκφράζει την T(n) συναρτήσει της T(n-) την T(n)

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I Διάλεξη 09: Αλγόριθμοι Ταξινόμησης I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Οι αλγόριθμοι ταξινόμησης: Α. SelectoSort Ταξινόμηση με Επιλογή Β. IsertoSort Ταξινόμηση με Εισαγωγή Γ. MergeSort

Διαβάστε περισσότερα

επιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S

επιστρέφει το αμέσως μεγαλύτερο από το x στοιχείο του S επιστρέφει το αμέσως μικρότερο από το x στοιχείο του S Μελετάμε την περίπτωση όπου αποθηκεύουμε ένα (δυναμικό) σύνολο στοιχειών,, τα οποίo είναι υποσύνολο του. Υποστηριζόμενες λειτουργίες αναζήτηση(s,x): εισαγωγή(s,x): διαγραφή(s,x): διάδοχος(s,x): προκάτοχος(s,x):

Διαβάστε περισσότερα

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

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 12 η Αναζήτηση/Ταξινόμηση Πίνακα Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη Θεωρία στην

Διαβάστε περισσότερα

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

Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 20: Αλγόριθμοι ΤαξινόμησηςIII Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Ε. QuickSort Γρήγορη Ταξινόμηση - Έμμεση Ταξινόμηση - Εξωτερική Ταξινόμηση Διδάσκων:

Διαβάστε περισσότερα

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

Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ. Διάλεξη 7 η. Βασίλης Στεφανής Εισ. Στην ΠΛΗΡΟΦΟΡΙΚΗ Διάλεξη 7 η Βασίλης Στεφανής Αλγόριθμοι ταξινόμησης Στην προηγούμενη διάλεξη είδαμε: Binary search Λειτουργεί μόνο σε ταξινομημένους πίνακες Πώς τους ταξινομούμε? Πολλοί τρόποι. Ενδεικτικά:

Διαβάστε περισσότερα

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

1η Σειρά Γραπτών Ασκήσεων 1/20 Ασυμπτωτικός Συμβολισμός, Αναδρομικές Σχέσεις 1η Σειρά Γραπτών Ασκήσεων Αλγόριθμοι και Πολυπλοκότητα ΣΗΜΜΥ, Εθνικό Μετσόβιο Πολυτεχνείο 1 Ασυμπτωτικός Συμβολισμός, Αναδρομικές Σχέσεις 2 3 4 5 2/20

Διαβάστε περισσότερα

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

Πρόβληµα Επιλογής. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Επιλογή 1 Πρόβληµα Επιλογής Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Επιλογή 1 Πρόβληµα Επιλογής Πίνακας Α[ Αριθµός k, 1 k n. ] µε n στοιχεία (όχι ταξινοµηµένος). Υπολογισµός του k-οστού µικρότερου στοιχείου (στοιχείο

Διαβάστε περισσότερα

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Άσκηση 1 α) Η δομή σταθμισμένης ένωσης με συμπίεση διαδρομής μπορεί να τροποποιηθεί πολύ εύκολα ώστε να υποστηρίζει τις

Διαβάστε περισσότερα

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

Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort. Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012 Αλγόριθμοι Ταξινόμησης Bubble Sort Quick Sort Αντρέας Δημοσθένους Καθηγητής Πληροφορικής Ολυμπιάδα 2012 3 5 1 Ταξινόμηση - Sorting Πίνακας Α 1 3 5 5 3 1 Ταξινόμηση (Φθίνουσα) Χωρίς Ταξινόμηση Ταξινόμηση

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

auth Αλγόριθμοι - Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο Σχεδίαση Αλγορίθμων Διαίρει και Βασίλευε http://delab.csd.auth.gr/courses/algorithms/ auth 1 Διαίρει και Βασίλευε Η γνωστότερη ρημέθοδος σχεδιασμού αλγορίθμων: 1. Διαιρούμε το στιγμιότυπο του προβλήματος

Διαβάστε περισσότερα

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1

Διασυνδεδεμένες Δομές. Δυαδικά Δέντρα. Προγραμματισμός II 1 Διασυνδεδεμένες Δομές Δυαδικά Δέντρα Προγραμματισμός II 1 lalis@inf.uth.gr Δέντρα Τα δέντρα είναι κλασικές αναδρομικές δομές Ένα δέντρο αποτελείται από υποδέντρα, καθένα από τα οποία μπορεί να θεωρηθεί

Διαβάστε περισσότερα

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

Επιλογή. ημήτρης Φωτάκης. Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών. Εθνικό Μετσόβιο Πολυτεχνείο Επιλογή ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Πρόβλημα Επιλογής Πίνακας Α[]με n στοιχεία (όχι ταξινομημένος). Αριθμός k, 1 k n. Υπολογισμός

Διαβάστε περισσότερα

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

Αναζήτηση. 1. Σειριακή αναζήτηση 2. Δυαδική Αναζήτηση. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Αναζήτηση. Σειριακή αναζήτηση. Δυαδική Αναζήτηση Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Παραδοχή Στη συνέχεια των διαφανειών (διαλέξεων) η ασυμπτωτική έκφραση (συμβολισμός Ο, Ω, Θ) του χρόνου

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 8 Quick Sort 1 / 11 Ο αλγόριθμος QuickSort 1 Προτάθηκε από τον CAR (Tony) Hoare το 1961 2 Ο αλγόριθμος

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Διάλεξη 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: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις Άσκηση 1 Γράψτε μία αναδρομική συνάρτηση που θα παίρνει ως παράμετρο ένα δείκτη στη ρίζα ενός δυαδικού δένδρου και θα επιστρέφει το βαθμό του

Διαβάστε περισσότερα

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

Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

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

Διαίρει-και-Βασίλευε. Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2 Διαίρει-και-Βασίλευε Αλγόριθµοι & Πολυπλοκότητα (Χειµώνας 2011) Διαίρει-και-Βασίλευε 2 Διαίρει-και-Βασίλευε Γενική µέθοδος σχεδιασµού αλγορίθµων: Διαίρεση σε ( 2) υποπροβλήµατα (σηµαντικά) µικρότερου µεγέθους.

Διαβάστε περισσότερα

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. Δοµές Δεδοµένων ΟΝΟΜΑΤΕΠΩΝΥΜΟ: ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ AM: Δοµές Δεδοµένων Πτυχιακή Εξεταστική Ιούλιος 2014 Διδάσκων : Ευάγγελος Μαρκάκης 09.07.2014 ΥΠΟΓΡΑΦΗ ΕΠΟΠΤΗ: Διάρκεια εξέτασης : 2 ώρες

Διαβάστε περισσότερα

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

ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ 1 ΟΙΚΟΝΟΜΙΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΛΓΟΡΙΘΜΩΝ ΒΟΗΘΟΣ: ΒΑΓΓΕΛΗΣ ΔΟΥΡΟΣ Φροντιστήριο #10: Αλγόριθμοι Διαίρει & Βασίλευε: Master Theorem, Αλγόριθμοι Ταξινόμησης, Πιθανοτικός

Διαβάστε περισσότερα

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1 Εισαγωγή στην Επεξεργασία Ερωτήσεων Βάσεις Δεδομένων 2013-2014 Ευαγγελία Πιτουρά 1 Επεξεργασία Ερωτήσεων Θα δούμε την «πορεία» μιας SQL ερώτησης (πως εκτελείται) Ερώτηση SQL Ερώτηση ΣΒΔ Αποτέλεσμα Βάσεις

Διαβάστε περισσότερα

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

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα Φεβρουαρίου 0 / ένδρα Ενα δένδρο είναι

Διαβάστε περισσότερα

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα). Κ08 Δομές Δεδομένων και Τεχνικές Προγραμματισμού Διδάσκων: Μανόλης Κουμπαράκης Εαρινό Εξάμηνο 2016-2017. Άσκηση 1 (ανακοινώθηκε στις 20 Μαρτίου 2017, προθεσμία παράδοσης: 24 Απριλίου 2017, 12 τα μεσάνυχτα).

Διαβάστε περισσότερα

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

Γ7.5 Αλγόριθμοι Αναζήτησης. Γ Λυκείου Κατεύθυνσης Γ7.5 Αλγόριθμοι Αναζήτησης Γ Λυκείου Κατεύθυνσης Εισαγωγή Αλγόριθμος αναζήτησης θεωρείται ένας αλγόριθμος, ο οποίος προσπαθεί να εντοπίσει ένα στοιχείο με συγκεκριμένες ιδιότητες, μέσα σε μία συλλογή από

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Τι είναι αλγόριθμος; Υποπρογράμματα (υποαλγόριθμοι) Βασικές αλγοριθμικές δομές Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών 2015-16 Αλγόριθμοι και Δομές Δεδομένων (Ι) (εισαγωγικές έννοιες) http://di.ionio.gr/~mistral/tp/csintro/ Μ.Στεφανιδάκης Τι είναι

Διαβάστε περισσότερα

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 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

a 1 a 2 a n. 3. i = j 1 5. A[i + 1] = A[i] 6. i = i 1 Εισαγωγη στον Σχεδιασμο και Αναλυση αλγοριθμων Αλγοριθμοι Ταξινομησης Η ταξινόμηση μιας ακολουθίας αριθμών είναι από τα βασικά αποτελέσματα της θεωρίας αλγορίθμων. Μια ευρεία γκάμα τέτοιων αλγορίθμων έχουν

Διαβάστε περισσότερα

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φ Ρ Ο Ν Τ Ι Σ Τ Η Ρ Ι Ο 1 : ΤΑΞΙΝΟΜΗΣΗ Δ Ρ Ι Τ Σ Α Σ Η Λ Ι Α Σ Υ Π Ο Ψ Η Φ Ι Ο Σ Δ Ι Δ Α Κ Τ Ο Ρ Α Σ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Φ Ρ Ο Ν Τ Ι Σ Τ Η Ρ Ι Ο 1 : ΤΑΞΙΝΟΜΗΣΗ Δ Ρ Ι Τ Σ Α Σ Η Λ Ι Α Σ Υ Π Ο Ψ Η Φ Ι Ο Σ Δ Ι Δ Α Κ Τ Ο Ρ Α Σ ΤΟ ΠΡΟΒΛΗΜΑ ΤΗΣ ΤΑΞΙΝΟΜΗΣΗΣ Ορισμός ταξινόμησης 2 Κατηγορίες αλγορίθμων ταξινόμησης

Διαβάστε περισσότερα

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

Ταξινόμηση. Παύλος Εφραιμίδης. Δομές Δεδομένων Ταξινόμηση 1 Ταξινόμηση Παύλος Εφραιμίδης Δομές Δεδομένων Ταξινόμηση 1 Το πρόβλημα της ταξινόμησης Δομές Δεδομένων Ταξινόμηση 2 Ταξινόμηση Δίνεται πολυ-σύνολο Σ με στοιχεία από κάποιο σύμπαν U (πχ. U = το σύνολο των

Διαβάστε περισσότερα

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

Αλγόριθμοι Ταξινόμησης Μέρος 4 Αλγόριθμοι Ταξινόμησης Μέρος 4 Μανόλης Κουμπαράκης Δομές Δεδομένων και Τεχνικές 1 Μέθοδοι Ταξινόμησης Βασισμένοι σε Συγκρίσεις Κλειδιών Οι αλγόριθμοι ταξινόμησης που είδαμε μέχρι τώρα αποφασίζουν πώς να

Διαβάστε περισσότερα

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

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 4ο Πολλαπλασιασμός μεγάλων ακεραίων (1) Για να πολλαπλασιάσουμε δύο ακεραίους με n 1 και n 2 ψηφία με το χέρι, θα εκτελέσουμε n 1 n 2 πράξεις πολλαπλασιασμού Πρόβλημα ρβημ όταν έχουμε πολλά ψηφία: A = 12345678901357986429

Διαβάστε περισσότερα

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

Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 1 Διάλεξη 10: Αλγόριθμοι Ταξινόμησης II Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Οι αλγόριθμοι ταξινόμησης: Δ. QuickSort Γρήγορη Ταξινόμηση Ε. BucketSort

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 20: Δυαδικό Δέντρο Αναζήτησης Δυαδικό δέντρο Κάθε κόμβος «γονέας» περιέχει δύο δείκτες που δείχνουν σε δύο κόμβους «παιδιά» του ιδίου τύπου. Αν οι δείκτες προς αυτούς

Διαβάστε περισσότερα

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

Αλγόριθμοι Ταξινόμησης Μέρος 1 Αλγόριθμοι Ταξινόμησης Μέρος 1 Μανόλης Κουμπαράκης 1 Το Πρόβλημα της Ταξινόμησης Το πρόβλημα της ταξινόμησης (sorting) μιας ακολουθίας στοιχείων με κλειδιά ενός γνωστού τύπου (π.χ., τους ακέραιους ή τις

Διαβάστε περισσότερα

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

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα 23 Μαρτίου 2017 1 / 20 Επιλογή Το πρόβληµα

Διαβάστε περισσότερα

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

Δομές Δεδομένων & Αλγόριθμοι Σωροί 1 Ορισμοί Ένα δέντρο μεγίστων (δένδρο ελαχίστων) είναι ένα δένδρο, όπου η τιμή κάθε κόμβου είναι μεγαλύτερη (μικρότερη) ή ίση με των τιμών των παιδιών του Ένας σωρός μεγίστων (σωρός ελαχίστων) είναι

Διαβάστε περισσότερα

Διάλεξη 19: Κατανομή Πόρων Κόψιμο Τούρτας. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Διάλεξη 19: Κατανομή Πόρων Κόψιμο Τούρτας. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι Διάλεξη 19: Κατανομή Πόρων Κόψιμο Τούρτας ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι Ορισμός Προβλήματος Τι θα δούμε σήμερα Συνθήκη Δικαιοσύνης Αλγόριθμος 2 επεξεργαστών (Cut & Choose) Αλγόριθμος 3 επεξεργαστών

Διαβάστε περισσότερα

Αλγόριθµοι. Παράδειγµα. ιαίρει και Βασίλευε. Παράδειγµα MergeSort. Τεχνικές Σχεδιασµού Αλγορίθµων

Αλγόριθµοι. Παράδειγµα. ιαίρει και Βασίλευε. Παράδειγµα 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. Ε. Μαρκάκης Επίκουρος Καθηγητής ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ Ουρές προτεραιότητας Κεφάλαιο 9 Ε. Μαρκάκης Επίκουρος Καθηγητής Περίληψη Ουρές προτεραιότητας Στοιχειώδεις υλοποιήσεις Δοµή δεδοµένων σωρού Αλγόριθµοι σε σωρούς Ο αλγόριθµος heapsort Δοµές

Διαβάστε περισσότερα

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 9: ΒΑΣΙΚΕΣ ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΜΟΥ ΚΑΙ ΑΝΑΛΥΣΗΣ ΑΛΓΟΡΙΘΜΩΝ ΕΞΙΣΟΡΡΟΠΗΣΗ, ΔΙΑΙΡΕΙ ΚΑΙ ΒΑΣΙΛΕΥΕ

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 9: ΒΑΣΙΚΕΣ ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΜΟΥ ΚΑΙ ΑΝΑΛΥΣΗΣ ΑΛΓΟΡΙΘΜΩΝ ΕΞΙΣΟΡΡΟΠΗΣΗ, ΔΙΑΙΡΕΙ ΚΑΙ ΒΑΣΙΛΕΥΕ Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 9: ΒΑΣΙΚΕΣ ΤΕΧΝΙΚΕΣ ΣΧΕΔΙΑΣΜΟΥ ΚΑΙ ΑΝΑΛΥΣΗΣ ΑΛΓΟΡΙΘΜΩΝ ΕΞΙΣΟΡΡΟΠΗΣΗ, ΔΙΑΙΡΕΙ ΚΑΙ ΒΑΣΙΛΕΥΕ Δημήτριος Κουκόπουλος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα

Διαβάστε περισσότερα

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής

Δομές Δεδομένων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής. Δομές Δεδομένων. Τμήμα Εφαρμοσμένης Πληροφορικής Ενότητα 8: Γραμμική Αναζήτηση και Δυαδική Αναζήτηση-Εισαγωγή στα Δέντρα και Δυαδικά Δέντρα-Δυαδικά Δέντρα Αναζήτησης & Υλοποίηση ΔΔΑ με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

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

Ταξινόμηση. 1. Ταξινόμηση με Εισαγωγή 2. Ταξινόμηση με Επιλογή. Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Ταξινόμηση. Ταξινόμηση με Εισαγωγή. Ταξινόμηση με Επιλογή Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Ταξινόμηση Η ταξινόμηση sortg τοποθετεί ένα σύνολο κόμβων ή εγγραφών σε μία συγκεκριμένη διάταξη

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Σχεδίαση Αλγορίθμων -Τμήμα Πληροφορικής ΑΠΘ - Εξάμηνο 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 Εργαστηριακή Άσκηση 1 Επανάληψη προγραμματισμού Βασικοί Αλγόριθμοι Είσοδος τιμών από το πληκτρολόγιο Σε όλα τα προγράμματα που θα γράψουμε στην συνέχεια του εξαμήνου θα χρειαστεί να εισάγουμε τιμές σε

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Δέντρα Αναζήτησης. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Δέντρα Αναζήτησης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Το πρόβλημα Αναζήτηση Θέλουμε να διατηρήσουμε αντικείμενα με κλειδιά και να μπορούμε εκτός από

Διαβάστε περισσότερα

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

Αλγόριθμοι Ταξινόμησης Μέρος 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 Κεφάλαιο 2 Η δομή δεδομένων Σωρός και η Ταξινόμηση Σωρού (The Heap data structure and Heapsort) Έκδοση 1.3, 14/11/2014 Χρησιμοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne. 1 Σωρός και Ταξινόμηση

Διαβάστε περισσότερα