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

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

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

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

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

Δοµές Δεδοµένων. 8η Διάλεξη: Ταξινόµηση. Ε. Μαρκάκης

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

Δοµές Δεδοµένων. 18η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

Δοµές Δεδοµένων. 14η Διάλεξη Δέντρα Δυαδικής Αναζήτησης. Ε. Μαρκάκης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Ουρές προτεραιότητας Κεφάλαιο 9. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

Δοµές Δεδοµένων. 10η Διάλεξη Ταξινόµηση. E. Μαρκάκης

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

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

Δοµές Δεδοµένων. 4η Διάλεξη Στοιχειώδεις Δοµές Δεδοµένων: Πίνακες και Λίστες. Ε. Μαρκάκης

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

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Εξωτερική Αναζήτηση και Β-δέντρα Κεφάλαιο 16. Ε. Μαρκάκης Επίκουρος Καθηγητής

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

Δοµές Δεδοµένων. 16η Διάλεξη Κατακερµατισµός. Ε. Μαρκάκης

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

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

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Πίνακες Συµβόλων Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

Σύνοψη Προηγούμενου. Πίνακες (Arrays) Πίνακες (Arrays): Βασικές Λειτουργίες. Πίνακες (Arrays) Ορέστης Τελέλης

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

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

int Α[] = {4, 16, 22, 12, 9, 15, 10}; { 4, 9, 10, 12, 15, 16, 22 } Α[0]=4, Α[1]=9, Α[2]=10 { 4, 16,22, 12, 9, 15, 10} { 4, 12, 16, 22, 9, 15,16, 22 }

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

Βασικές Έννοιες Δοµών Δεδοµένων

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

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

Συλλογές, Στοίβες και Ουρές

Δοµές Δεδοµένων. 5η Διάλεξη Λίστες και αρχές ανάλυσης αλγορίθµων. Ε. Μαρκάκης

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Λίστες Κεφάλαιο 3 (3.3, 3.4, 3.7) Ε. Μαρκάκης Επικ. Καθηγητής

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

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

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

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

Δοµές Δεδοµένων. 12η Διάλεξη Διάσχιση Δέντρων και Ουρές Προτεραιότητας. Ε. Μαρκάκης

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Λίστες Κεφάλαιο 3 (3.3, 3.4, 3.7) Ε. Μαρκάκης Επικ. Καθηγητής

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

Δοµές Δεδοµένων. 17η Διάλεξη Ισορροπηµένα δέντρα. Ε. Μαρκάκης

Δοµές Δεδοµένων. 2η Διάλεξη Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Ε. Μαρκάκης. Βασίζεται στις διαφάνειες των R. Sedgewick K.

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

Δοµές Δεδοµένων. 6η Διάλεξη Αναδροµικές Εξισώσεις και Αφηρηµένοι Τύποι Δεδοµένων. Ε. Μαρκάκης

Διάλεξη 07: Λίστες Ι Υλοποίηση & Εφαρμογές

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

Η εφαρµογή xsortlab. Οπτικός τρόπος ταξινόµησης

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

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

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

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

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

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

Στοιχειώδεις Δομές Δεδομένων

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

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος

Ταξινόμηση κάδου και ταξινόμηση Ρίζας Bucket-Sort και Radix-Sort

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

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Βασικές Ιδιότητες και Διάσχιση Κεφάλαιο 5 ( και ) Ε. Μαρκάκης Επίκουρος Καθηγητής

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Στοιχειώδεις Δοµές Δεδοµένων Δοµικά Στοιχεία και Πίνακες Κεφάλαιο 3 (3.1 και 3.2) Ε. Μαρκάκης Επικ. Καθηγητής

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Αλγόριθµοι Ένωσης-Εύρεσης (Union-Find) Κεφάλαιο 1. Ε. Μαρκάκης Επικ. Καθηγητής

Δοµές Δεδοµένων. 15η Διάλεξη Δέντρα Δυαδικής Αναζήτησης και Κατακερµατισµός. Ε. Μαρκάκης

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

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

Δοµές Δεδοµένων. 13η Διάλεξη Πίνακες Συµβόλων. Ε. Μαρκάκης

Διάλεξη 12: Δέντρα ΙΙ Δυαδικά Δέντρα

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

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

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

Initialize each person to be free. while (some man is free and hasn't proposed to every woman) { Choose such a man m w = 1 st woman on m's list to

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

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

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ. Δέντρα Δυαδικής Αναζήτησης Κεφάλαιο 12 ( ) Ε. Μαρκάκης Επίκουρος Καθηγητής

Διάλεξη 16: Σωροί. Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: - Ουρές Προτεραιότητας - Ο ΑΤΔ Σωρός, Υλοποίηση και πράξεις

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

Τύποι Δεδομένων και Απλές Δομές Δεδομένων. Παύλος Εφραιμίδης V1.0 ( )

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

Πίνακες. Οι πίνακες αποτελούν ένα σηµαντικό δοµηµένο τύπο δεδοµένων (structured data type) ή πιο απλά µία δοµή δεδοµένων (data structure).

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

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

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

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

i : 0<=i<N-1 => data[i] <= data[i+1] 25/10/2009

Απλές Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες απλές Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλή

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

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

Ταξινόμηση. Ταξινόμηση ευθείας ανταλλαγής (Φυσαλίδα) 1) Να ταξινομηθεί ο πίνακας Α[Ν] σε αύξουσα σειρά με τη μέθοδο της φυσαλίδας.

Επαναληπτικές δοµές. µτ α.τ. Όχι. ! απαγορεύεται µέσα σε µία ΓΙΑ να µεταβάλλουµε τον µετρητή! διότι δεν θα ξέρουµε µετά πόσες επαναλήψεις θα γίνουν

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

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

h/2. Άρα, n 2 h/2-1 h 2log(n+1). Πως υλοποιούµε τη LookUp()? Πολυπλοκότητα?

Transcript:

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

Περίληψη Bubble Sort Selection Sort Insertion Sort Χαρακτηριστικά επιδόσεων Shellsort Ταξινόµηση συνδεδεµένων λιστών Δοµές Δεδοµένων 09-2

Γενικές υλοποιήσεις - Υπενθύµιση Ιδιότητες γενικής υλοποίησης Λειτουργεί µε οποιονδήποτε τύπο αντικειµένων Όχι τόσο αποδοτική για ενσωµατωµένους τύπους Απαιτείται ένα πρόσθετο επίπεδο αναφορών Στην πράξη όµως εργαζόµαστε µε αντικείµενα (π.χ. εγγραφές) και όχι µε στοιχειώδεις τύπους Υλοποιεί ταξινόµηση δεικτών Ταξινόµηση δεικτών Οι πίνακες αντικειµένων περιέχουν αναφορές Η αντιµετάθεση γίνεται σε επίπεδο αναφορών Αποφεύγεται η αντιγραφή των αντικειµένων Το κόστος της αντιµετάθεσης είναι µικρό Ανάλογο µε την αντιµετάθεση ακεραίων Δοµές Δεδοµένων 09-3

Γενικές υλοποιήσεις - Υπενθύµιση µέθοδος sort(): Καλείται από τους πελάτες µε πίνακα τύπου ITEM και δύο όρια για το εύρος του πίνακα class Sort { // βοηθητικές μέθοδοι static boolean less(item v, ITEM w) {...} //κάνει σύγκριση 2 στοιχείων static void exch(item[] a, int i, int j) {... } // αντιμεταθέτει τα στοιχεία στις θέσεις i και j static void compexch(item[] a, int i, int j) {...} //συγκρίνει και αντιμεταθέτει αν χρειάζεται static void sort(item[] a, int p, int r) {...} Δοµές Δεδοµένων 09-4

Ταξινόµηση φυσαλίδας Bubble Sort Λειτουργία αλγορίθµου Από τις πιο παλιές και απλοϊκές µεθόδους Σαρώνουµε από τα δεξιά προς τα αριστερά Αντιµεταθέτουµε γειτονικά στοιχεία όταν χρειάζεται Το µικρότερο στοιχείο φτάνει στο κάτω άκρο Το αριστερό όριο του πίνακα κινείται µία θέση δεξιά Επαναλαµβάνουµε την ίδια διαδικασία Μετά την επανάληψη i: ταξινοµηµένο το τµήµα a[0],,a[i] static void bubble(item[] a, int p, int r) { for (int i = p; i < r; i++) for (int j = r; j > i; j--) compexch(a, j-1, j); } Δοµές Δεδοµένων 09-5

Ταξινόµηση φυσαλίδας Bubble Sort Σχετικά αργή µέθοδος Πολλές αντιµεταθέσεις σε κάθε επανάληψη! Επιδέχεται βελτιστοποίηση Πολυπλοκότητα Worst case: πίνακας σε φθίνουσα σειρά (N-1)+ (N-2) + +1 N 2 /2 = O(N 2 ) συγκρίσεις και αντιµεταθέσεις Average case: πιο πολύπλοκη η ανάλυση για τον ακριβή αριθµό αντιµεταθέσεων αλλά τελικά N 2 /2 = O(N 2 ) Σίγουρα απαιτούνται O(N 2 ) συγκρίσεις Δοµές Δεδοµένων 09-6

Ταξινόµηση µε επιλογή - Selection Sort Λειτουργία αλγορίθµου Εντοπίζουµε το µικρότερο στοιχείο του πίνακα Σαρώνουµε όλα τα στοιχεία µε τη σειρά Το αντιµεταθέτουµε µε αυτό στην πρώτη θέση Επαναλαµβάνουµε από την επόµενη θέση Κάθε πέρασµα µειώνει τη σάρωση κατά µία θέση static void selection(item[] a, int p, int r) { for (int i = p; i < r; i++) { int min = i; for (int j = i+1; j <= r; j++) if (less(a[j], a[min])) min = j;//εύρεση min exch(a, i, min); } } Δοµές Δεδοµένων 09-7

Ταξινόµηση µε επιλογή - Selection Sort Αναπαράσταση αλγορίθµου Ο πίνακας χωρίζεται σε δύο τµήµατα Αριστερός υποπίνακας: ταξινοµηµένος Δεξιός υποπίνακας: µη ταξινοµηµένος Σε κάθε πέρασµα το όριο αλλάζει Εντοπίζουµε το µικρότερο στοιχείο στον δεξιό υποπίνακα Το ενσωµατώνουµε στον αριστερό υποπίνακα Πολυπλοκότητα της Selection Sort Δεν µπορούµε να δούµε αν βρήκαµε ήδη το ελάχιστο στοιχείο Worst case: Ο(Ν) αντιµεταθέσεις, O(N 2 ) συγκρίσεις,, π.χ. φθίνουσα σειρά Average case: επίσης O(N 2 ) (πάντα κάνει O(N 2 ) συγκρίσεις) Δοµές Δεδοµένων 09-8

Ταξινόµηση µε εισαγωγή Insertion Sort Την είδαμε στο προηγούμενο μάθημα: static void sort(item[] a, int p, int r) { Πολυπλοκότητα O(N 2 ) Βελτιστοποιήσεις: for (int i = p+1; i <= r; i++) for (int j = i; j > p; j--) compexch(a, j-1, j); } } Μπορούµε να σταµατήσουµε να εκτελούµε την compexch όταν το κλειδί µπει στη σωστή θέση Διαδοχικές αντιµεταθέσεις που αφορούν το ίδιο στοιχείο δεν είναι αποδοτικές Ο έλεγχος στο 2 ο for µπορεί να αποφευχθεί µε χρήση στοιχείου φρουρού Δοµές Δεδοµένων 09-9

Ταξινόµηση µε εισαγωγή Insertion Sort static void insertion(item[] a, int p, int r) { int i; // τοποθέτηση του ελάχιστου στην πρώτη θέση for (i = r; i > p; i--) compexch(a, i-1, i); for (i = p+2; i <= r; i++) { int j = i; ITEM v = a[i]; // δεν χρειάζεται πρόσθετος έλεγχος while (less(v, a[j-1])) { // μετακίνηση του j-1 και όχι αντιμετάθεση a[j] = a[j-1]; j--; } a[j] = v; } //βάζουμε το v στη σωστή θέση } Δοµές Δεδοµένων 09-10

Ταξινόµηση µε εισαγωγή Insertion Sort Λειτουργία βελτιωµένου αλγορίθµου Πάλι ο πίνακας χωρίζεται σε υποπίνακες Αρχικά ελάχιστο στοιχείο πάει µπροστά Παίρνουµε το πρώτο στοιχείο του δεξιού Το εισάγουµε στο σωστό σηµείο του αριστερού Το όριο των πινάκων κινείται µία θέση δεξιά Δοµές Δεδοµένων 09-11

Ταξινόµηση µε εισαγωγή Insertion Sort Βελτιώσεις ταξινόµησης µε επιλογή Μπορούµε να δούµε αν βρήκαµε τη σωστή θέση Ο αριστερός υποπίνακας είναι ήδη ταξινοµηµένος Δεν χρειάζονται χωριστοί έλεγχοι τερµατισµού Απλά βάζουµε το µικρότερο στοιχείο στην αρχή Παίζει το ρόλο φρουρού Δεν χρειάζονται πλήρεις αντιµεταθέσεις Αρκεί η µετακίνηση των στοιχείων µία θέση δεξιά Στο τέλος αντιγράφεται το αρχικό στοιχείο Πολυπλοκότητα Worst case: παραµένει O(N 2 ) (π.χ. Όταν τα στοιχεία είναι σε φθίνουσα σειρά) Είναι όµως αρκετά πιο γρήγορη από την αρχική υλοποίηση Δοµές Δεδοµένων 09-12

Στοιχειώδεις Ταξινοµήσεις Για περισσότερες λεπτοµέρειες δείτε εδώ: Insertion Sort http://www.youtube.com/watch?v=ejpfmtym8cw Selection Sort http://www.youtube.com/watch?v=tw3_7cd9l1a Bubble Sort http://www.youtube.com/watch?v=p00xjgwzz2c Δοµές Δεδοµένων 09-13

Χαρακτηριστικά επιδόσεων Συγκρίσεις Worst Case Συγκρίσεις Average Case Αντιµεταθέσεις ή µετακινήσεις Worst Case Αντιµεταθέσεις ή µετακινήσεις Average Case Bubble Sort N 2 /2 N 2 /2 N 2 /2 N 2 /2 Selection Sort N 2 /2 N 2 /2 N N Insertion Sort N 2 /2 N 2 /4 N 2 /2 N 2 /4 Δοµές Δεδοµένων 09-14

Χαρακτηριστικά επιδόσεων Όλες οι στοιχειώδεις ταξινοµήσεις είναι O(N 2 ) Αυτό δεν σηµαίνει ότι είναι ίδιες όµως! Παράδειγµα: εισαγωγή και επιλογή Εισαγωγή: δεν κοιτάζει πέρα από τη διαγώνιο Επιλογή: δεν κοιτάζει πίσω από τη διαγώνιο Ταξινόµηση µε επιλογή Κάνει πάντοτε λίγες αντιµεταθέσεις Δεν εξαρτάται καθόλου από την είσοδο Δεν µπορεί να γίνει προσαρµοστική Δοµές Δεδοµένων 09-15

Χαρακτηριστικά επιδόσεων Ταξινόµηση µε εισαγωγή Υποθέτουµε προσαρµοστική έκδοση Οι συγκρίσεις σταµατάνε όταν το στοιχείο µπει στη θέση του Συγκρίσεις και µετακινήσεις πάνε µαζί Worst case έχει διπλάσια πολυπλοκότητα σε σχέση µε average case Ταξινόµηση φυσαλίδας Προσαρµοστική έκδοση: έλεγχος αν έγιναν αντιµεταθέσεις στην προηγούµενη επανάληψη του βρόχου Σταµατάµε όταν το αρχείο είναι ταξινοµηµένο Συγκρίσεις και αντιµεταθέσεις πάνε µαζί Insertion Sort και Bubble Sort αποδίδουν καλά σε πολλά µερικώς ταξινοµηµένα αρχεία που συναντώνται στην πράξη (όχι όµως και η Selection Sort) Δοµές Δεδοµένων 09-16

Χαρακτηριστικά επιδόσεων Αντιστροφή (Inversion): ένα ζεύγος κλειδιών εκτός σειράς Συνολικός αριθµός αντιστροφών: για κάθε στοιχείο µετράµε τα µεγαλύτερα κλειδιά αριστερά του Λίγες αντιστροφές σηµαίνει µερικώς ταξινοµηµένο αρχείο Σταθερό πλήθος αντιστροφών ανά στοιχείο Τα κλειδιά είναι κοντά στις τελικές τους θέσεις Οι ταξινοµήσεις εισαγωγής και φυσαλίδας είναι γραµµικές (Ο(Ν)) Ταξινόµηση µε εισαγωγή είναι πάντα ανάλογη µε το πλήθος των αντιστροφών Για ταξινόµηση φυσαλίδας απόδειξη πιο πολύπλοκη Σταθερό πλήθος στοιχείων µε µη σταθερές αντιστροφές Λίγα κλειδιά βρίσκονται σε λάθος θέσεις Η ταξινόµηση εισαγωγής είναι γραµµική Αρχεία µε πολύ µεγάλα στοιχεία και µικρά κλειδιά Το κόστος των µεταθέσεων κυριαρχεί επί των συγκρίσεων Η ταξινόµηση µε επιλογή είναι γραµµική Δοµές Δεδοµένων 09-17

Πειραµατική Μελέτη Στοιχεία τύπου int Στοιχεία µε κλειδιά τύπου int Στοιχεία µε κλειδιά τύπου string N S I* I B S I B S I B 1000 14 54 8 54 100 55 130 129 65 170 2000 54 218 33 221 436 229 569 563 295 725 4000 212 848 129 871 1757 986 2314 2389 1328 3210 S: Selection Sort I*: Insertion Sort I: βελτιωµένη Insertion Sort B: Bubble Sort Δοµές Δεδοµένων 09-18

Ταξινόµηση Shellsort Προτάθηκε από τον Shell (1959) Επέκταση της Insertion Sort Μειονεκτήµατα προηγούµενων µεθόδων: Συγκρίσεις µόνο µεταξύ γειτονικών στοιχείων Αν το ελάχιστο είναι στο τέλος χρειάζονται πολλές µετακινήσεις ή αντιµεταθέσεις για να πάει στην αρχή Ιδέα: ταξινόµηση ανά h στοιχεία Ένας πίνακας είναι h-sorted αν οι υποπίνακες a[0], a[h], a[2h], a[1], a[h+1], a[2h+1], a[2], a[h+2], a[2h+2], είναι ταξινοµηµένοι Δοµές Δεδοµένων 09-19

Ταξινόµηση Shellsort Λειτουργία του αλγορίθµου: Ξεκινάµε µε κάποια µεγάλη τιµή του h Κάνουµε τον πίνακα h-sorted Ίδιος κώδικας µε Insertion Sort µε τους δείκτες στους βρόχους να αυξοµειώνονται κατά h Μειώνουµε την τιµή του h και επαναλαµβάνουµε Όταν το h γίνει 1, ουσιαστικά καταλήγουµε σε Insertion Sort αλλά µε πολύ µικρότερο αριθµό συγκρίσεων Ερώτηση: τι τιµές πρέπει να διαλέξουµε για το h? Ουσιαστικά χρειαζόµαστε µία ακολουθία τιµών Δοµές Δεδοµένων 09-20

Ταξινόµηση Shellsort Version που χρησιµοποιεί την ακολουθία 1, 4, 13, 40, 121, 364,... δηλαδή h i+1 = 3h i + 1 static void shell(item[] a, int p, int r) { int h; for (h = 1; h <= (r-l)/9; h = 3*h+1); for ( ; h > 0; h /= 3) for (int i = p+h; i <= r; i++) { } } int j = i; ITEM v = a[i]; while (j >= p+h && less(v, a[j-h])) { a[j] = a[j-h]; j -= h; } a[j] = v; Δοµές Δεδοµένων 09-21

Ταξινόµηση Shellsort h = 1, 4, 13, 40, Προτάθηκε από τον Knuth (1969) Πρώτα γίνεται 13-ταξινόµηση Μετά 4-ταξινόµηση Και στο τέλος 1-ταξινόµηση, δηλαδή Insertion Sort Πολύ µικρότερος αριθµός συγκρίσεων κατά την Insertion Sort Μακρινές µετακινήσεις γίνονται στις µεγάλες τιµές του h Δοµές Δεδοµένων 09-22

Ταξινόµηση Shellsort - Πολυπλοκότητα Η πολυπλοκότητα εξαρτάται από την ακολουθία {h i } Δεν έχει βρεθεί ακόµα αποδεδειγµένα η καλύτερη ακολουθία (ανοιχτό ερευνητικό πρόβληµα) Στην πράξη χρησιµοποιούνται ακολουθίες που µειώνονται γεωµετρικά Με κατάλληλες ακολουθίες, η shellsort είναι αρκετά πιο γρήγορη από τις στοιχειώδεις ταξινοµήσεις Δοµές Δεδοµένων 09-23

Ταξινόµηση Shellsort - Πολυπλοκότητα Τι γνωρίζουµε µέχρι σήµερα: Ιδιότητα 1: Η shellsort µε την ακολουθία του Knuth 1, 4, 13, 40, εκτελεί λιγότερες από Ο(Ν 3/2 ) συγκρίσεις Ιδιότητα 2: Η shellsort µε την ακολουθία 1, 8, 23, 77, 281 (h i = 4 i+1 + 3 2 i +1 ) εκτελεί λιγότερες από Ο(Ν 4/3 ) συγκρίσεις Ιδιότητα 3: Η shellsort µε την ακολουθία 1, 2, 3, 4, 6, 9, 8, 12, 18, 27, 16, 24, 36, 54, 81, εκτελεί λιγότερες από Ο(Ν (logn) 2 ) συγκρίσεις (Pratt 1971) Δοµές Δεδοµένων 09-24

Ταξινόµηση συνδεδεµένων λιστών Προσαρµογή ταξινοµήσεων πινάκων Βασικός κανόνας: τροποποιούµε δείκτες και όχι κόµβους Οι κόµβοι µπορεί να έχουν και εξωτερικούς δείκτες Αλλάζουµε τη δοµή και όχι το περιεχόµενο της λίστας Selection Sort: προαρµογή σε λίστες Λίστα εισόδου: µη ταξινοµηµένη Λίστα εξόδου: ταξινοµηµένη Εντοπισµός µέγιστου στοιχείου Το µέγιστο από όσα έχουν µείνει Αποσύνδεση από λίστα εισόδου Σύνδεση στην αρχή της εξόδου Μικρότερο από τα επόµενα Λίστα εξόδου σε αύξουσα σειρά Δοµές Δεδοµένων 09-25

Ταξινόµηση συνδεδεµένων λιστών Χρήση κόµβου φρουρού στην αρχή της λίστας εισόδου private static Node findmax(node h) { for (Node t = h; t.next!= null; t = t.next) if (h.next.item < t.next.item) h = t; return h; } static Node sort(node h) { Node head = new Node(-1, h), out = null; while (head.next!= null) { Node max = findmax(head); Node t = max.next; max.next = t.next; t.next = out; out = t; } return out; } Δοµές Δεδοµένων 09-26