You are on page 1of 9

Bucket-Sort και Radix-Sort

1, c 3, a 3, b 7, d 7, g 7, e

B       
0 1 2 3 4 5 6 7 8 9

Οι διαφάνειες είναι βασισμένες στο βιβλίο "Data Structures and Algorithms in C++" των Michael T. Goodrich, Roberto Tamassia και David M. Mount

Bucket-Sort and Radix-Sort 1


Bucket-Sort (§10.5.1)
Έστω S ακολουθία n (κλειδιών και Αλγόριθμος bucketSort(S, N)
στοιχείων) αντικειμένων με κλειδιά
στο σύνολο [0, N 1] Είσοδος ακολουθία S (key,
Ο Bucket-sort χρησιμοποιεί τα element) αντικειμένων με κλειδιά
κλειδιά ως δείκτες σε ένα εντός του συνόλου [0, N 1]
βοηθητικό array B από ακολουθίες Έξοδος ακολουθία S
(buckets - κάδοι) ταξινομημένη με αύξουσα σειρά
Φάση 1: Άδειασε την ακολουθία S με κλειδιών
τη μετακίνηση κάθε αντικειμένου
(k, o) στο bucket του B[k] B  array N κενών ακολουθιών
Φάση 2: For i  0, …, N  1, while S.isEmpty()
μετακίνησε τα αντικείμενα του f  S.first()
κάδου B[i] στο τέλος της
ακολουθίας S (k, o)  S.remove(f)
Ανάλυση: B[k].insertLast((k, o))
 Η φάση 1 παίρνει χρόνο O(n) for i  0 to N  1
 Η φάση 2 παίρνει χρόνο O(n N)
while B[i].isEmpty()
Ο Bucket-sort χρειάζεται χρόνο O(n
N) f  B[i].first()
(k, o)  B[i].remove(f)
S.insertLast((k, o))
Bucket-Sort and Radix-Sort 2
Παράδειγμα
Ακτίνα κλειδιών [0, 9]

7, d 1, c 3, a 7, g 3, b 7, e
Φάση 1

1, c 3, a 3, b 7, d 7, g 7, e

B       
0 1 2 3 4 5 6 7 8 9

Φάση 2

1, c 3, a 3, b 7, d 7, g 7, e
Bucket-Sort and Radix-Sort 3
Ιδιότητες και Επεκτάσεις
Key-type Ιδιότητα Επεκτάσεις
 Τα κλειδιά  Ακέραια κλειδιά εντός της ακτίνας
χρησιμοποιούνται σαν [a, b]
δείκτες σε ένα array και  Βάλε το αντικείμενο (k, o) σε κάδο
δεν μπορούν να είναι B[k  a]
αυθαίρετα αντικείμενα  Κλειδιά Strings από ε΄να σύνολο
 Δεν υπάρχει εξωτερικός D πιθανών strings, όπου το D έχει
συγκριτής σταθερό μήκος (πχ. Τα ονόματα
Ιδιότητα Ευσταθούς των 50 πολιτειών των ΗΠΑ)
 Ταξινόμησς το D και υπολόγισε το
Ταξινόμησης
βαθμό r(k) κάθε string k του D
 Η σχετική σειρά κάθε 2 στην ταξινομημένη ακολουθία
αντικειμένων με το ίδιο  Βάλε το αντικείμενο (k, o) σε κάδο
κλειδί διατηρείται μετά
την εκτέλεση του B[r(k)]
αλγορίθμου

Bucket-Sort and Radix-Sort 4


Λεξικογραφική Σειρά
Ένα d-tuple είναι μια ακολουθία d κλειδιών (k1, k2, …,
kd), όπου το κλειδί ki λέγεται ότι είναι η i-στη
διάσταση του tuple
Παράδειγμα:
 Οι Καρτεσιανές συντεταγμένες ενός σημείου στο χώρο είναι
ένα 3-tuple
Η λεξικογραφική σειρά 2 d-tuples ορίζεται αναδρομικά
ως εξής:
(x1, x2, …, xd)  (y1, y2, …, yd)

x1  y1  x1 y1  (x2, …, xd)  (y2, …, yd)
Τα tuples συγκρίνονται με βάση την πρώτη
διάσταση, μετά με βάση τη δεύτερη, κοκ.

Bucket-Sort and Radix-Sort 5


Lexicographic-Sort
Έστω Ci ο συγκριτής που Αλγόριθμος lexicographicSort(S)
συγκρίνει 2 tuples με βάση Είσοδος ακολουθία S από
την i-στη διάσταση d-tuples
‘Εστω stableSort(S, C) ένας Έξοδος ακολουθία S
sorting αλγόριθμος που ταξινομημένη σε λεξικογραφική
χρησιμοποιεί το συγκριτή C σειρά
Ο Lexicographic-sort for i  d downto 1
ταξινομεί μια ακολουθία d- stableSort(S, Ci)
tuples σε λεξικογραφική Παράδειγμα:
σειρά εκτελώντας d φορές
τον αλγόριθμο stableSort, (7,4,6) (5,1,5) (2,4,6) (2, 1, 4) (3, 2, 4)
μια για κάθε διάσταση
(2, 1, 4) (3, 2, 4) (5,1,5) (7,4,6) (2,4,6)
Ο Lexicographic-sort τρέχει
σε χρόνο O(dT(n)), όπου (2, 1, 4) (5,1,5) (3, 2, 4) (7,4,6) (2,4,6)
T(n) είναι ο χρόνος
εκτέλεσης του stableSort (2, 1, 4) (2,4,6) (3, 2, 4) (5,1,5) (7,4,6)
Bucket-Sort and Radix-Sort 6
Radix-Sort (§10.5.2)
Ο Radix-sort είναι μια
εξειδίκευση του
lexicographic-sort που
χρησιμοποιεί bucket-
sort ως ευσταθή
αλγόριθμο ταξινόμησης
σε κάθε διάσταση Αλγόριθμος radixSort(S, N)
Ο Radix-sort είναι Είσοδος ακολουθία S από d-
εφαρμόσιμος σε tuples tuples τέτοια ώστε:
όπου τα κλειδιά σε κάθε (0, …, 0)  (x1, …, xd) και
διάσταση i είναι ακέραιοι (x1, …, xd)  (N 1, …, N 1)
στο σύνολο [0, N 1] για κάθε tuple (x1, …, xd) στο S
Ο Radix-sort τρέχει σε
χρόνο O(d( n N)) Έξοδος ακολουθία S
ταξινομημένη σε λεξικογραφική
σειρά
for i  d downto 1
Bucket-Sort and Radix-Sort 7
bucketSort(S, N)
Radix-Sort για
Δυαδικούς Αριθμούς
Σκεφτείτε μια ακολουθία από n
ακεραίους των b-bit
x  xb … x1x0
Αναπαριστούμε κάθε στοιχείο ως Αλγόριθμος binaryRadixSort(S)
b-tuple ακεραίων στο σύνολο [0, Είσοδος ακολουθία S από
1] και εφαρμόζουμε radix-sort με ακεραίους των b-bit
N2 Έξοδος ακολουθία S
Αυτή η εφαρμογή του radix-sort ταξινομημένη
αλγορίθμου τρέχει σε χρόνο Αντικατάστησε κάθε στοιχείο
O(bn) x του S με το αντικείμενο
Πχ, μπορούμε να ταξινομήσουμε (0, x)
μια ακολουθία ακεραίων των 32- for i  0 to b1
bit σε γραμμικό χρόνο
replace the key k of
each item (k, x) of S
με bit xi of x
Bucket-Sort and Radix-Sort bucketSort(S, 2) 8
Παράδειγμα
Ταξινομώντας μια ακολουθία 4-μπιτων ακεραίων

1001 0010 1001 1001 0001

0010 1110 1101 0001 0010

1101 1001 0001 0010 1001

0001 1101 0010 1101 1101

1110 0001 1110 1110 1110

Bucket-Sort and Radix-Sort 9

You might also like