Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 3.0 Σταύρος Δ. Νικολόπουλος 0-7 Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros Διαίρει και Βασίλευε Quick-sort και Merge-sort Μέτρηση Αντιστρόφων Πλησιέστερο Ζεύγος Σημείων Αλγόριθμος Strassen
Γενικές Αρχές Γενική Αρχή Τεχνικών Σχεδίασης και Ανάλυσης Αλγορίθμων Καθορισμός ενδιάμεσων μικρότερων στόχων που μπορούν να επιτευχθούν πιο εύκολα και συμβάλουν στην επίτευξη του τελικού στόχου!!! Ενδιάμεσοι μικρότεροι στόχοι Λύση μικρότερων προβλημάτων!!! Τελικός στόχος Λύση αρχικού προβλήματος!!!
Γενικές Αρχές Αρχή της Εξισορρόπησης Ισορροπία μεταξύ των μεγεθών των μικρότερων προβλημάτων??????
Γενικές Αρχές Αρχή της Εξισορρόπησης Γενικός Κανόνας: Η διατήρηση μια ισορροπίας, ή και ισότητας, μεταξύ των μεγεθών n, n,, nk των υπο-προβλημάτων Π, Π,, Πk που προκύπτουν από τη διάσπαση ενός προβλήματος Π μεγέθους n!!! Επιχειρήματα υπέρ της εξισορρόπησης Πρέπει να υπάρχει ίση μεταχείριση!!! Ο χρόνος εκτέλεσης ενός έργου είναι αύξουσα συνάρτηση κάποιου μεγέθους που αντιστοιχεί στο έργο. Αν έχουμε να εκτελέσουμε δυο έργα είναι προτιμότερο να έχουν το ίδιο μέγεθος είτε τα εκτελέσουμε παράλληλα είτε ακολουθιακά.
Γενικές Αρχές Εξισορρόπηση - Θεώρημα Θεώρημα: Έστω Τ(n) ο χρόνος επίλυσης ενός προβλήματος Π μεγέθους n, όπου οι συναρτήσεις Τ και Τ είναι αυστηρά αύξουσες, και έστω n, n τα μεγέθη δύο υποπροβλημάτων Π και Π του Π με n + n = n. Τότε, ο ελάχιστος χρόνος για την ακολουθιακή λύση και των δύο υποπροβλημάτων Π, Π επιτυγχάνεται όταν n = n = n/. Απόδειξη: Συνολικός χρόνος επίλυσης T(n) + T(n) = T(n) + T(n-n) = f(n). Για να υπάρχει ελάχιστο πρέπει f (n) = 0. Δηλαδή, Τ (n) - Τ (n-n) = 0. Οπότε, Τ (n) = T (n-n). Επειδή η συνάρτηση Τ είναι αυστηρά αύξουσα, η παραπάνω ισότητα ισχύει όταν n = n-n, δηλαδή n = n = n/. Ακόμη ισχύει f (n) = T (n) + T (n-n) > 0. Άρα, για n = n = n/ η συνάρτηση f(n) εμφανίζει ελάχιστο.
Γενικές Αρχές Εξισορρόπηση - Παράδειγμα Έστω το πρόβλημα της αναζήτησης σε ακολουθία n στοιχείων. Στη σειριακή αναζήτηση η σύγκριση με το ο στοιχείο ανάγει την επίλυση του προβλήματος σε μικρότερο στιγμιότυπο μεγέθους n- στοιχείων. n- o Η σειριακή αναζήτηση δεν εφαρμόζει την τεχνική της εξισορρόπησης! Στη δυαδική αναζήτηση η πρώτη διάσπαση παράγει δύο στιγμιότυπα μισού περίπου μεγέθους n/ από το αρχικό. Το ίδιο συμβαίνει και σε κάθε επόμενη διάσπαση. o Η δυαδική αναζήτηση εφαρμόζει την τεχνική της εξισορρόπησης! Αυτό την κάνει να είναι αποτελεσματικότερη από τη σειριακή αναζήτηση!!! n/ n/
Γενικές Αρχές Εξισορρόπηση - Παράδειγμα Αναδρομικοί Αλγόριθμοι!!!
Γενικές Αρχές Εξισορρόπηση - Παράδειγμα Αναδρομικοί Αλγόριθμοι!!! Μέγεθος n n- O(n) n- n-3
Γενικές Αρχές Εξισορρόπηση - Παράδειγμα Αναδρομικοί Αλγόριθμοι!!! Μέγεθος n n/ n/ O(logn) n/ n/ n/ n/
Τεχνική Διαίρει-και-Βασίλευε Αλγοριθμικές Τεχνικές
Αλγοριθμικές Τεχνικές Τεχνική Διαίρει-και-Βασίλευε Αρκετά παλιά ιδέα... Divide et impera. Veni, vidi, vici. Διαίρει και βασίλευε. Ήλθον, είδον, νίκησον. Ιούλιος Καίσαρας (00 - πχ) Προσφιλής πολεμική του τακτική: διαίρεση του αντίπαλου στρατεύματος σε δύο μισά και επίθεση στο ένα μισό με ολόκληρο τον στρατό του!!!
Διαίρει-και-Βασίλευε Γενικός Κανόνας της Τεχνικής Αντί να λύσουμε άμεσα ένα πρόβλημα Π με μεγάλο μέγεθος εισόδου, κάνουμε τα εξής: διασπάμε την είσοδο σε τμήματα μικρότερου μεγέθους, λύνουμε το πρόβλημα για κάθε μικρό τμήμα ξεχωριστά, και κατόπιν συνδυάζουμε τις επιμέρους λύσεις, πληρώνοντας ένα επιπλέον κόστος, για να δώσουμε λύση στο αρχικό πρόβλημα. Μέθοδος που ανάγει ένα αρχικό πρόβλημα σε όλο και μικρότερα προβλήματα με την αναδρομική εφαρμογή τους!!! Σύμφωνα με την αρχή της εξισορρόπησης τα μικρότερα τμήματα πρέπει να είναι ισομεγέθη!!!
Διαίρει-και-Βασίλευε Διαδικασίες της Τεχνικής Divide and Conquer Διαίρει (divide): Διαίρεσε το προβλήματος Π σε b (συνήθως b=) υποπροβλήματα Π, Π,, Πb (στιγμιότυπα ίδιου τύπου με το Π, όσο δυνατόν ιδίου μεγέθους ή δυσκολίας). Κατάκτησε (conquer): Αναδρομική επίλυση όλων των υποπροβλημάτων Π, Π,, Πb. Εάν τα υποπροβλήματα είναι μικρού μεγέθους, απλώς επίλυσέ τα άμεσα (direct_solve). 3 Συνδύασε (combine): Κατάλληλος συνδυασμός των επιμέρους λύσεων των υποπροβλημάτων Π, Π,, Πb για τη λύση του αρχικού προβλήματος Π.
Διαίρει-και-Βασίλευε Χαρακτηριστικά της Τεχνικής Divide and Conquer Διαίρει (divide) Συνήθως, σε έναν αλγόριθμο Δ-και-Β είναι εύκολη: είτε η διαδικασία divide 3 Επίλυσε (direct_solve) είτε η διαδικασία combine Συνδύασε (combine) Η διαδικασία direct_solve είναι πάντα εύκολη, απαιτεί απλούς υπολογισμούς!!!
Διαίρει-και-Βασίλευε Αναδρομική Σχέση Έστω k το πλήθος των υπο-προβλημάτων Π, Π,, Πk της αρχικής εισόδου (προβλήματος) μήκους n, και έστω: D(n) το πλήθος των βημάτων της divide S(n) >> >> direct_solve C(n) >> >> combine Τότε
Διαίρει-και-Βασίλευε Αναδρομικό Σχήμα Διάσπαση προβλήματος πρόβλημα μεγέθους n διάσπαση υποπρόβλημα μεγέθους k υποπρόβλημα μεγέθους n - k
Διαίρει-και-Βασίλευε Αναδρομικό Σχήμα Διάσπαση προβλήματος πρόβλημα μεγέθους n υποπρόβλημα μεγέθους k διάσπαση υποπρόβλημα μεγέθους n - k διάσπαση
Διαίρει-και-Βασίλευε Αναδρομικό Σχήμα Διάσπαση προβλήματος πρόβλημα μεγέθους n υποπρόβλημα μεγέθους k διάσπαση διάσπαση υποπρόβλημα μεγέθους n - k διάσπαση διάσπαση
Διαίρει-και-Βασίλευε Αναδρομικό Σχήμα Διάσπαση προβλήματος Αναδρομική επίλυση των υποπροβλημάτων πρόβλημα μεγέθους n υποπρόβλημα μεγέθους k υποπρόβλημα μεγέθους n - k
Διαίρει-και-Βασίλευε Αναδρομικό Σχήμα Διάσπαση προβλήματος Αναδρομική επίλυση των υποπροβλημάτων πρόβλημα μεγέθους n Σύνθεση (συνδυασμός) λύσεων υποπρόβλημα μεγέθους k σύνθεση σύνθεση υποπρόβλημα μεγέθους n - k σύνθεση σύνθεση
Διαίρει-και-Βασίλευε Αναδρομικό Σχήμα Διάσπαση προβλήματος Αναδρομική επίλυση των υποπροβλημάτων πρόβλημα μεγέθους n Σύνθεση (συνδυασμός) λύσεων υποπρόβλημα μεγέθους k υποπρόβλημα μεγέθους n - k σύνθεση σύνθεση
Διαίρει-και-Βασίλευε Αναδρομικό Σχήμα Διάσπαση προβλήματος Αναδρομική επίλυση των υποπροβλημάτων πρόβλημα μεγέθους n Σύνθεση (συνδυασμός) λύσεων σύνθεση υποπρόβλημα μεγέθους k υποπρόβλημα μεγέθους n - k
Διαίρει-και-Βασίλευε Αναδρομικό Σχήμα Διάσπαση προβλήματος Αναδρομική επίλυση των υποπροβλημάτων πρόβλημα μεγέθους n Σύνθεση (συνδυασμός) λύσεων υποπρόβλημα μεγέθους k Χρόνος εκτέλεσης υποπρόβλημα μεγέθους n - k Χρόνος διάσπασης Χρόνος σύνθεσης
Το Πρόβλημα της Ταξινόμησης Ταξινόμηση
Ταξινόμηση Το Πρόβλημα της Ταξινόμησης Ορισμός Προβλήματος Είσοδος : ακολουθία n στοιχείων S = (α, α,..., αn). Έξοδος : αναδιάταξη (α, α,..., α n) των στοιχείων της S σε αύξουσα τάξη ( i, i n-, α i α i+). Θεμελιώδες αλγοριθμικό πρόβλημα Πολλές εφαρμογές (~0-5% του υπολογιστικού χρόνου). Ταχύτατη αναζήτηση σε ταξινομημένα δεδομένα. Σημαντικές αλγοριθμικές ιδέες και τεχνικές!!!
Αλγόριθμοι Ταξινόμησης Αλγόριθμοι και Μέθοδοι Ταξινόμησης Αντιμετάθεση κάθε ζεύγους μη-ταξινομημένων στοιχείων. Bubble-sort bubble sort Εισαγωγή στοιχείου σε κατάλληλη θέση σε έναν ταξινομημένο πίνακα. Insertion-sort insertion sort Επιλογή μεγαλύτερου (μικρότερου) στοιχείου και τοποθέτηση στο τέλος (αρχή). Max(Min)-sort Heap-sort Διαμέριση σε μικρότερα και μεγαλύτερα από στοιχείο-διαχωρισμού και ταξινόμηση. Quick-sort mergesort Συγχώνευση ταξινομημένων ακολουθιών: Ισομερή διαίρεση, ταξινόμηση, συγχώνευση. Merge-sort
Αλγόριθμοι Ταξινόμησης Αλγόριθμοι Quick-sort και Merge-sort Αντιμετάθεση κάθε ζεύγους μη-ταξινομημένων στοιχείων. Bubble-sort bubble sort Εισαγωγή στοιχείου σε κατάλληλη θέση σε έναν ταξινομημένο πίνακα. Insertion-sort insertion sort Επιλογή μεγαλύτερου (μικρότερου) στοιχείου και τοποθέτηση στο τέλος (αρχή). Max(Min)-sort Heap-sort Διαμέριση σε μικρότερα και μεγαλύτερα από στοιχείο-διαχωρισμού και ταξινόμηση. Quick-sort mergesort Συγχώνευση ταξινομημένων ακολουθιών: Ισομερή διαίρεση, ταξινόμηση, συγχώνευση. Merge-sort
Αλγόριθμοι Ταξινόμησης Αλγόριθμοι Quick-sort και Merge-sort Δύο ταχύτατοι (βέλτιστοι?) αλγόριθμοι ταξινόμησης οι οποίοι βασίζονται στην αλγοριθμική τεχνική του Δ-και-Β!!! Βασικές Διαφορές (Ι) (ΙΙ) Quick-sort δύσκολη Διαίρεση εύκολη Συνένωση Merge-sort εύκολη Διαίρεση δύσκολη Συνένωση Quick-sort διαφορετικού μήκους υπο-προβλήματα Merge-sort ίδιου περίπου μήκους υπο-προβλήματα
Αλγόριθμος Quick-Sort Αλγόριθμος Ταξινόμησης Quick-Sort Τεχνική Διαίρει-και-Βασίλευε Δύσκολη διαίρεση - Εύκολη συνένωση Υπο-προβλήματα Διαφορετικού μήκους Χειρίστη Πολυπλοκότητα O(n) Μέση Πολυπλοκότητα O(nlogn)
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Ιδέα Αλγόριθμου!!! x = pivot x < x o τμήμα Χρόνος διάσπασης x x o τμήμα Χρόνος σύνθεσης
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Ιδέα Αλγόριθμου!!! Αρχικό x βήμα i-στης επανάληψης pivot Ενδιάμεσο x x < x Διάσπαση βήμα i-στης επανάληψης i sp Τελικό Εφαρμογή της διαδικασίας < x x o τμήμα sp split x βήμα i-στης επανάληψης o τμήμα
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] pivot = 5 S 5 8 splitpt first split for i first+ to last do if S[i] < pivot then x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; < x x aux x Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end i j
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] pivot = 5 S 5 8 splitpt first split for i first+ to last do if S[i] < pivot then x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; < x x aux x Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end i j
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] pivot = 5 S 5 aux 8 splitpt first split for i first+ to last do if S[i] < pivot then x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; < x x x Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end i j
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] pivot = 5 S 5 aux 8 splitpt first split for i first+ to last do if S[i] < pivot then x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; < x x x Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end i j
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] pivot = 5 S 5 aux 8 splitpt first split for i first+ to last do if S[i] < pivot then x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; < x x x Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end i j
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] pivot = 5 S 5 aux 8 8 splitpt first split for i first+ to last do if S[i] < pivot then x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; < x x x Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end i j
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] pivot = 5 S 5 aux 8 8 splitpt first split for i first+ to last do if S[i] < pivot then x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; < x x x Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end ij
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] pivot = 5 S 5 8 aux 5 8 splitpt first split for i first+ to last do if S[i] < pivot then x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; < x x x Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end ij
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] pivot = 5 S 5 8 splitpt first split for i first+ to last do if S[i] < pivot then x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; < x x x Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end 5 8
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] pivot = 5 S 5 8 splitpt first split for i first+ to last do if S[i] < pivot then x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; < x x x Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end 5 8
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] pivot = 5 S 5 8 splitpt first split for i first+ to last do if S[i] < pivot then x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; < x x 5 8 x Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end 5 8
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) end; sp : splitpt end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) end; end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) end; end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) end; end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) end; end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) end; end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) end; end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) end; end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp i Swap(S[splitpt], S[i]) end; end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + sp Swap(S[splitpt], S[i]) end; end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + Swap(S[splitpt], S[i]) end; end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + Swap(S[splitpt], S[i]) end; 5 8 end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + Swap(S[splitpt], S[i]) end; 5 8 end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Αλγόριθμος Quick-Sort Algorithm Quick-Sort(S, first, last) begin ()if first < last then pivot S[first] splitpt first pivot = 5 S 5 8 split for i first+ to last do if S[i] < pivot then splitpt splitpt + Swap(S[splitpt], S[i]) end; 5 8 end; Swap (S[first], S[splitpt]) end () Quick-Sort(S, first, splitpt-) (3) Quick-Sort(S, splitpt+, last) return S end 5 8 Split : επί τόπου διάσπαση
Αλγόριθμος Quick-Sort Ορθότητα Αλγόριθμου Quick-Sort Απόδειξη με επαγωγή: Ισχυρισμός P(n): Ο αλγόριθμος Quick-Sort ταξινομεί σωστά κάθε ακολουθία εισόδου S μήκους n. Βάση επαγωγής: Κάθε ακολουθία εισόδου S μήκους είναι ταξινομημένη, δηλ. ισχύει P(). Επαγωγική υπόθεση: Έστω S μήκους n, για την οποία ισχύει P(k) k < n. Επαγωγικό βήμα : Δείχνουμε ότι ισχύει P(n). n < x o τμήμα x x o τμήμα
Αλγόριθμος Quick-Sort Ορθότητα Αλγόριθμου Quick-Sort Απόδειξη με επαγωγή: Θεωρούμε pivot x και τη διαμέριση του S ως προς x (έστω i η θέση του pivot, i n). i- < n i n-i < n < x x x Έστω k = i- το μήκος του ou τμήματος των στοιχείων της S που είναι < x και k = n-i του ou τμήματος που είναι x. o τμήμα o τμήμα Από την ορθότητα της διαδικασίας split (εύκολη απόδειξη), το στοιχείο pivot x καταλαμβάνει τη σωστή θέση στην ακολουθία εξόδου S. Από επαγωγική υπόθεση: Ισχύει P(k) και Ρ(k) επειδή k < n και k < n, δηλ., ο αλγόριθμος Quick-Sort ταξινομεί σωστά το ο και ο τμήμα της S. Άρα, ταξινομεί σωστά ολόκληρη την ακολουθία S. QED
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Χειρίστη Πολυπλοκότητα Βασική Πράξη: S[i] < pivot W(n) = O(n) Στη διαδικασία split το στοιχείο pivot συγκρίνεται με κάθε στοιχείο της ακολουθίας S. split splitpt first for i first+ to last do if S[i] < pivot then Επομένως, εάν k είναι το μήκος της ακολουθίας εισόδου σε κάποια επανάληψη της διαδικασίας split, τότε στη διαδικασία αυτή εκτελούνται k- συγκρίσεις (ΒΠ). k < x x x splitpt splitpt + Swap(S[splitpt], S[i]) end; end; Swap (S[first], S[splitpt]) S 5 8 k= Πλήθος συγκρίσεων = 5
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Χειρίστη Πολυπλοκότητα Εάν το pivot = S[first] είναι το μικρότερο στοιχείο της ακολουθίας σε κάποια επανάληψη, τότε μετά την εκτέλεση της split θα ισχύει splitpoint = first. Επομένως, η πρώτη αναδρομική κλήση του Quίck-Sort δεν θα εκτελεστεί, ενώ η δεύτερη κλήση θα εκτελεστεί με ακολουθία μήκους k = n-, n-,,. S 3 5 8 x 3 n n- pivot 3 5 3 8 () Quick-Sort(S, first, splitpt-) (3) Ouick-Sort(S, splitpt+, last) 5 8 Quick-Sort(S,, 0) Quick-Sort(S,, n)
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Χειρίστη Πολυπλοκότητα Εάν το pivot = S[first] είναι το μεγαλύτερο στοιχείο της ακολουθίας σε κάποια επανάληψη, τότε μετά την εκτέλεση της split θα ισχύει splitpoint = last. Eπομένως, η δεύτερη αναδρομική κλήση του Quίck-Sort δεν θα εκτελεστεί, ενώ η πρώτη κλήση θα εκτελεστεί με ακολουθία μήκους k = n-, n-,,. S 8 5 3 5 3 x 3 n n- pivot 8 () Quick-Sort(S, first, splitpt-) (3) Ouick-Sort(S, splitpt+, last) 5 3 Quick-Sort(S,, n-) Quick-Sort(S, n+, n)
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Χειρίστη Πολυπλοκότητα Άρα, στην χειρίστη περίπτωσή για την πολυπλοκότητα τον αλγόριθμου Quick-Sort ισχύει: Επιλύουμε την αναδρομική σχέση: Ισχύει :
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Μέση Πολυπλοκότητα Βασική Πράξη: S[i] < pivot Έστω k το μήκος της ακολουθίας εισόδου σε κάποια εκτέλεση της διαδικασίας split. Τότε στη διαδικασία αυτή εκτελούνται k- συγκρίσεις (βασικές πράξεις). A(n) = O(n lοgn) split splitpoint first for i first+ to last do if S[i] < pivot then splitpoint splitpoint + Swap(S[splitpoint], S[i]) end; end; Swap (S[first], S[splitpoint]) i < x x k x S 5 8 k= Πλήθος συγκρίσεων = 5
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Μέση Πολυπλοκότητα Θεωρούμε τη γενική περίπτωση κατά την οποία μετά την εκτέλεση της διαδικασία split με μήκος ακολουθίας k, το στοιχείο pivot καταλαμβάνει την i-στη θέση. Άρα, i- στοιχεία είναι μικρότερα του pivot και φυσικά k-i μεγαλύτερα από αυτό. Δεχόμαστε ότι το στοιχείο pivot έχει την ίδια πιθανότητα /k να καταλάβει οποιαδήποτε θέση μεταξύ και k: το pivot καταλαμβάνει τη θέση i με πιθανότητα /k. i < x i- x k x k-i Μήκος oυ τμήματος Θέση pivot Μήκος oυ τμήματος (0) () ().. (k-) (k-) 3.. k- k (k-) (k-) (k-3).. () (0)
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Μέση Πολυπλοκότητα Ορίζουμε: Α(k) μέσος όρος συγκρίσεων σε ακολουθία μήκους k. = Έτσι, παίρνοντας k = n καταλήγουμε στην αναδρομική σχέση: i < x i- x n x n-i
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Μέση Πολυπλοκότητα Μπορούμε εύκολα να απλοποιήσουμε την αναδρομική σχέση παρατηρώντας ότι: Μια υποακολουθία με μήκος i- ( i n) εμφανίζεται φορές: όταν το pivot καταλάβει την i και n-i- θέση!!! i x i- i n-i- n x i- Μήκος oυ τμήματος Θέση pivot Μήκος oυ τμήματος (0) () ().. (n-) (n-) 3.. n- n (n-) (n-) (n-3).. () (0)
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Μέση Πολυπλοκότητα Μπορούμε εύκολα να απλοποιήσουμε την αναδρομική σχέση και να πάρουμε: Αυτή είναι μια πιο περίπλοκη αναδρομική σχέση σε σχέση με αυτές που έχουμε δει μέχρι τώρα, διότι η τιμή A(n) εξαρτάται από όλες τις προηγούμενες τιμές!!!
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Μέση Πολυπλοκότητα Μπορούμε να χρησιμοποιήσουμε κάποιο ευφυή τρόπο για τη λύση της ή να εικάσουμε τη λύση της και να την αποδείξουμε με επαγωγή! Η τεχνική της εικασίας είναι μια καλή προσέγγιση για αναδρομικούς αλγορίθμους! Θα ακολουθήσουμε αυτό την προσέγγιση θα εικάσουμε την τιμή της A(n) και θα την αποδείξουμε με επαγωγή Για να σχηματίσουμε μια εικασία για την τιμή της A(n), εξετάζουμε αρχικά την περίπτωση που ο αλγόριθμος Quick-sort εργάζεται ιδανικά!!!... Ισομερής Ανάλυση
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Μέση Πολυπλοκότητα Ισομερής Ανάλυση Θεωρούμε την περίπτωση κατά την οποία σε κάθε επανάληψη της διαδικασίας split τα μισά στοιχεία (~n / ) της S είναι μικρότερα του στοιχείου pivot. i < x n/ x n x S 9 5 8 n/ Θα θεωρήσουμε το μέγεθος των δύο υποακολουθιών να είναι n/, χωρίς να υπάρχει ανησυχία για το εάν το n/ είναι ακέραιος!!! 5 5 8 8 9 9
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Μέση Πολυπλοκότητα Ισομερής Ανάλυση Θεωρούμε την περίπτωση κατά την οποία σε κάθε επανάληψη της διαδικασίας split τα μισά στοιχεία (n / ) της S είναι μικρότερα του στοιχείου pivot. Άρα, καταλήγουμε στην παρακάτω αναδρομική σχέση: Ισχύει :
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Μέση Πολυπλοκότητα Συμπέρασμα Εάν σε κάθε επανάληψη η αναμενόμενη τιμή E[first] του pivot είναι κοντά στη διάμεσο (ισομερής ανάλυση) τότε το πλήθος των συγκρίσεων (Βασικών Πράξεων) είναι Θ(n logn), σημαντικά μικρότερο από Θ(n)!!! Άρα, ισχύει : Θ(n logn) Α(n) Θ(n) Ερώτημα!!!... εάν όλες οι μεταθέσεις έχουν την ίδια πιθανότητα εμφάνισης, τότε μήπως υπάρχουν πολλές «καλές» μεταθέσεις (ακολουθίες εισόδου) που επηρεάσουν θετικά τη μέση πολυπλοκότητα A(n) του Quick-Sort ώστε A(n) = Θ(n logn); Αποδεικνύουμε : ΝΑΙ αυτό ισχύει!!!
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Μέση Πολυπλοκότητα Πρόταση. A(n) = c n ln n για n, όπου c σταθερά. Απόδειξη: Με επαγωγή στο πλήθος n των στοιχείων εισόδου. Βάση επαγωγής: Για n =, A() = 0 και c n ln n = 0. Επαγωγική υπόθεση: Έστω ότι ισχύει A(i) c i ln i για i < n, όπου n >. Επαγωγικό βήμα : A(n) c n ln n, όπου n >.
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Από επαγωγική υπόθεση: Ισχύει: Μέση Πολυπλοκότητα
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Άρα, έχουμε: Μέση Πολυπλοκότητα
Αλγόριθμος Quick-Sort Πολυπλοκότητα Αλγόριθμου Quick-Sort Άρα, για Μέση Πολυπλοκότητα ισχύει : QED Επειδή, Ισχύει :
Αλγόριθμος Merge-Sort Αλγόριθμος Ταξινόμησης Merge-Sort Τεχνική Διαίρει-και-Βασίλευε Εύκολη διαίρεση Δύσκολη συνένωση Υπο-προβλήματα Ίδιου μήκους Χειρίστη Πολυπλοκότητα O(nlogn) Μέση Πολυπλοκότητα O(nlogn)
Αλγόριθμος Merge-Sort Αλγόριθμος Merge-Sort Ιδέα Αλγόριθμου!!!... Ταξινόμηση με Συγχώνευση
Αλγόριθμος Merge-Sort Αλγόριθμος Merge-Sort Ιδέα Αλγόριθμου!!! ιαίρεση ακολουθίας εισόδου μήκους n σε δύο υποακολουθίες μήκους n/. Ταξινόμηση των δύο υποακολουθιών (μισού μεγέθους) αναδρομικά. Συγχώνευση των δύο ταξινομημένων υποακολουθιών σε μία ταξινομημένη ακολουθία. ιαίρεσε (divide) Ταξινόμησε (conquer) Συγχώνευσε 3 (combine)
Αλγόριθμος Merge-Sort Αλγόριθμος Merge-Sort Ιδέα Αλγόριθμου!!! ιαίρεση ακολουθίας εισόδου μήκους n σε δύο υποακολουθίες μήκους n/. Ταξινόμηση των δύο υποακολουθιών (μισού μεγέθους) αναδρομικά. Συγχώνευση των δύο ταξινομημένων υποακολουθιών σε μία ταξινομημένη ακολουθία. ιαίρεσε (divide) Ταξινόμησε (conquer) Συγχώνευσε 3 (combine)
Αλγόριθμος Merge-Sort Αλγόριθμος Merge-Sort Αλγόριθμος ιαίρεση ακολουθίας εισόδου μήκους n σε δύο υποακολουθίες μήκους n/. Ταξινόμηση των δύο υποακολουθιών (μισού μεγέθους) αναδρομικά. Συγχώνευση των δύο ταξινομημένων υποακολουθιών σε μία ταξινομημένη ακολουθία. Algorithm Merge-Sort(A, left, right) begin if (left right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) end
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) Συγχώνευση δύο ταξινομημένων ακολουθιών A = a, a,, an B = b, b,, bn σε μία μόνο ταξινομημένη ακολουθία C (πίνακα ή λίστα)!!! Algorithm Merge() i j while (A B ) if (ai bj) προσάρτηση του ai στη C και i i+ else{ai > bj}προσάρτηση του bj στη C και j j+ end προσάρτηση των υπόλοιπων στοιχείων της μη-άδειας ακολουθίας A ή B στη C
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) Παράδειγμα Συγχώνευση δύο ταξινομημένων ακολουθιών A 7 5 0 3 75 88 B 5 9 3 50 9
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) A i 7 5 0 3 75 88 Παράδειγμα B 5 9 3 50 9 j Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) A i C 7 5 0 3 75 88 Παράδειγμα B 5 9 3 50 9 j Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) A 7 5 0 3 75 88 i C Παράδειγμα B 5 9 3 50 9 j Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) A 7 5 0 3 75 88 i C Παράδειγμα B 5 9 3 50 9 j Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) A 7 5 0 3 75 88 i C Παράδειγμα B 5 9 3 50 9 j 7 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) A 7 5 0 3 75 88 Παράδειγμα B 5 9 3 50 9 i C j 7 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) A 7 5 0 3 75 88 Παράδειγμα B 5 9 3 50 9 i C j 7 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) A 7 5 0 3 75 88 i C 7 5 Παράδειγμα B 5 9 3 50 9 Συγχώνευση δύο ταξινομημένων ακολουθιών j
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) A Παράδειγμα 7 5 0 3 75 88 B 5 9 3 50 9 i C 7 5 5 0 9 3 3 50 75 Συγχώνευση δύο ταξινομημένων ακολουθιών j
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) A 7 5 0 3 75 88 Παράδειγμα B 5 9 3 50 9 j C 7 5 5 0 9 3 3 50 75 88 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) A C 7 5 0 3 75 88 Παράδειγμα B 5 9 3 50 9 7 5 5 0 9 3 3 50 75 88 9 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) Συγχώνευση δύο ταξινομημένων ακολουθιών A C 7 5 0 3 75 88 B Απαιτεί 3 ξεχωριστούς πίνακες 5 9 3 50 9 7 5 5 0 9 3 3 50 75 88 9
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) a k k Συγχώνευση με πίνακες m m+ r 7 5 0 3 75 88 5 9 3 50 9 m m+ aux Συγχώνευση δύο ταξινομημένων ακολουθιών r
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) k Συγχώνευση με πίνακες m m+ r 5 9 3 50 9 a αντιστροφή της ης ακολουθίας aux k m m+ 7 5 0 3 75 88 Συγχώνευση δύο ταξινομημένων ακολουθιών r
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) k Συγχώνευση με πίνακες m m+ r a aux k r m m+ 7 5 0 3 75 88 9 50 3 9 5 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) k Συγχώνευση με πίνακες m m+ r a aux k r m m+ 7 5 0 3 75 88 9 50 3 9 5 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) a k aux k Συγχώνευση με πίνακες m m+ r r m m+ 7 5 0 3 75 88 9 50 3 9 5 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) a k aux k Συγχώνευση με πίνακες m m+ r r m m+ 7 5 0 3 75 88 9 50 3 9 5 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) a k Συγχώνευση με πίνακες m m+ r aux k r m m+ 7 5 0 3 75 88 9 50 3 9 5 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) a k aux k m m+ 7 5 5 0 9 3 3 50 Συγχώνευση με πίνακες r r m m+ 7 5 0 3 75 88 9 50 3 9 5 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) a k aux k m m+ 7 5 5 0 9 3 3 50 75 Συγχώνευση με πίνακες r r m m+ 7 5 0 3 75 88 9 50 3 9 5 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) a k aux k Συγχώνευση με πίνακες m m+ r 7 5 5 0 9 3 3 50 75 88 9 r m m+ 7 5 0 3 75 88 9 50 3 9 5 Συγχώνευση δύο ταξινομημένων ακολουθιών
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) Συγχώνευση δύο ταξινομημένων ακολουθιών Απαιτεί βοηθητικό πίνακα a aux 7 5 0 3 75 88 9 50 3 9 5 7 5 5 0 9 3 3 50 75 88 9
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) Συγχώνευση δύο ταξινομημένων ακολουθιών a Απαιτεί βοηθητικό πίνακα 7 5 5 0 9 3 3 50 75 88 9 Μπορούμε χωρίς Βοηθητικό Πίνακα Πρόκληση για αυτούς που ενδιαφέρονται!... Επί τόπου συγχώνευση [Kronrud, 99] Χρησιμοποιώντας επιπλέον μόνο ένα σταθερό ποσό μνήμης!!!
Αλγόριθμος Merge-Sort Συγχώνευση (Merge) Συγχώνευση δύο ταξινομημένων ακολουθιών A = a, a,, an B = b, b,, bn σε μία μόνο ταξινομημένη ακολουθία C (πίνακα ή λίστα)!!! Algorithm Merge() Ισχυρισμός. Η συγχώνευση δύο ταξινομημένων ακολουθιών A και B μήκους n απαιτεί χρόνο O(n). Απόδειξη: Μετά από κάθε σύγκριση, το μέγεθος της ακολουθίας εξόδου C αυξάνεται κατά.
Αλγόριθμος Merge-Sort Αλγόριθμος Merge-Sort Παράδειγμα εφαρμογής Αλγόριθμου Algorithm Merge-Sort(A, left, right) begin if (left >= right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) end 9 9 9 5 5 8 8 5 8 ιαίρεση 3 3 3
Αλγόριθμος Merge-Sort Αλγόριθμος Merge-Sort Παράδειγμα εφαρμογής Αλγόριθμου Algorithm Merge-Sort(A, left, right) begin if (left >= right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) end 9 5 8 Ταξινόμηση 3
Αλγόριθμος Merge-Sort Αλγόριθμος Merge-Sort Παράδειγμα εφαρμογής Αλγόριθμου Algorithm Merge-Sort(A, left, right) begin if (left >= right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) end 9 5 Ταξινόμηση 8 3
Αλγόριθμος Merge-Sort Αλγόριθμος Merge-Sort Παράδειγμα εφαρμογής Αλγόριθμου Algorithm Merge-Sort(A, left, right) begin if (left >= right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) end 9 3 5 9 5 8 5 Συγχώνευση 3 8 9 8 3
Αλγόριθμος Merge-Sort Ορθότητα Αλγόριθμου Merge-Sort Ορθότητα αλγόριθμου Μerge: Οι δύο υποακολουθίες Α και Β είναι ταξινομημένες. Όταν ένα στοιχείο μεταφέρεται στον (βοηθητικό) πίνακα C, δεν υπάρχει μικρότερο διαθέσιμο στοιχείο στις Α και Β. Η ορθότητα του αλγορίθμου Μerge-Sort αποδεικνύεται επαγωγικά: Βάση επαγωγής (ένα στοιχείο) τετριμμένη. Οι δύο υποακολουθίες ταξινομούνται σωστά (επαγωγική υπόθεση), και συγχωνεύονται σωστά (ορθότητα merge). Άρα, η ακολουθία Α είναι σωστά ταξινομημένη.
Αλγόριθμος Merge-Sort Πολυπλοκότητα Αλγόριθμου Merge-Sort Πολυπλοκότητα Αλγόριθμου Merge Χειρίστη Πολυπλοκότητα m m+ a 7 5 0 3 75 88 9 50 3 9 5 m m+ aux n n 7 5 5 0 9 3 3 50 75 88 9 Algorithm Merge-Sort(A, left, right) begin if (left >= right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) end Κάθε φορά συγκρίνονται δύο στοιχεία και ένα μόνο στοιχείο x μεταφέρεται στον βοηθητικό πίνακα aux μήκους n και ποτέ δεν ξανασυγκρίνεται!!! Στην τελευταία σύγκριση δύο στοιχεία x και y δεν έχουν μεταφερθεί στον aux : το min(x,y) μεταφέρεται άμεσα και το max(x,y) αντιγράφεται.
Αλγόριθμος Merge-Sort Πολυπλοκότητα Αλγόριθμου Merge-Sort Πολυπλοκότητα Αλγόριθμου Merge Χειρίστη Πολυπλοκότητα m m+ a 7 5 0 3 75 88 9 50 3 9 5 m m+ aux n n 7 5 5 0 9 3 3 50 75 88 9 Algorithm Merge-Sort(A, left, right) begin if (left >= right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) end Άρα, απαιτούνται το πολύ n- συγκρίσεις για τη συγχώνευση n στοιχείων (δύο ταξινομημένων ακολουθιών με m και n-m στοιχεία). Χειρίστη Πολυπλοκότητα Merge : W(n) = n- Ασυμπωτική πολυπλοκότητα χειρίστης περίπτωσης Merge :
Αλγόριθμος Merge-Sort Πολυπλοκότητα Αλγόριθμου Merge-Sort Χειρίστη Πολυπλοκότητα Merge-Sort Η αναδρομική σχέση της πολυπλοκότητας του αλγόριθμου Merge-Sort είναι η εξής: Algorithm Merge-Sort(A, left, right) begin if (left >= right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) end Έχουμε Κύριο Θεώρημα (η περίπτωση c = log = ) : W(n) = Ο(n log n) (πολυπλοκότητα συγχώνευσης αλγόριθμος Merge) Ασυμπωτική πολυπλοκότητα χειρίστης περίπτωσης Merge-Sort :
Αλγόριθμος Merge-Sort Πολυπλοκότητα Αλγόριθμου Merge-Sort Μέση Πολυπλοκότητα Merge-Sort?????? Algorithm Merge-Sort(A, left, right) begin if (left >= right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) end Αντί να έρθουμε άμεσα να υπολογίσουμε τη μέση περίπτωση της πολυπλοκότητας του Merge-Sort, ας περιμένουμε έως να ελέγξουμε ένα κάτω-φράγμα για το πρόβλημα της ταξινόμησης με σύγκριση στοιχείων. πολυπλοκότητα μέσης Ασυμπωτική Κύριο Θεώρημα (η περίπτωση c = περίπτωσης log = ) : Merge-Sort W(n) = Ο(n: log n)
Άνω Φράγματα Ταξινόμησης Άνω Φράγμα Ταξινόμησης Αλγόριθμος : Merge-Sort.. begin max = S[]; posmax = ; Άνω φράγμα για το πρόβλημα της Ταξινόμησης!!! for i = to n do if S[i] > max then Έχει ο Merge-Sort καλύτερη πολυπλοκότητα στη Merge-Sort max = S[i]; posmax = i ; μέση περίπτωση ; end; Υπάρχει καλύτερος αλγόριθμος ταξινόμησης return (max, posmax) ; end; από τον Merge-Sort;...??????
Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Υπολόγισε ένα ελάχιστο πλήθος Βασικών Πράξεων (συγκρίσεων) που απαιτούνται για την επίλυση του Προβλήματος SORTING Είσοδος (x, x,..., xn) Αρχικά n! περιπτώσεις: x < x < x3 <... < xn x < x < x3 <... < xn x3 < x < x <... < xn... xn < xn- <... < x Σε κάθε σύγκριση το πλήθος των περιπτώσεων υποδιπλασιάζεται (στην καλύτερη περίπτωση) Θα δείξουμε: Πλήθος συγκρίσεων log(n!) (n logn)/ Οποιοσδήποτε αλγόριθμος ταξινόμησης n στοιχείων χρειάζεται Ω(n logn) συγκρίσεις Κάτω φράγμα για ταξινόμηση που χρησιμοποιεί μόνο συγκρίσεις
Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Είσοδος (x, x,..., xn )...., xk <? xj xk < xj xk > xj...., (...,xm,..., xk,, xj,..., xt,.. ), (...,xr,..., xk,, xj,..., xm,.. ), (...,xm,..., xj,, xk,..., xt,.. ), (...,xr,..., xj,, xk,..., xm,.. ),........ xk <? xm...., xk < xm xj <? xm xk > xm...., (..., xm,..., xk,, xj,..., xt,.. ), (..., xr,..., xk,, xj,..., xm,.. ), (..., xm,..., xk,, xj,..., xt,.. ), (..., xr,..., xk,, xj,..., xm,.. ),........
Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Δένδρο απόφασης Το δένδρο έχει n! φύλλα x[i] <? x[j] x[b] <? x[c] x[f] <? x[g] (μετάθεση-) x[h] <? x[i] (μετάθεση-) (μετάθεση-3) Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό x[d] <? x[e] φύλλο x[j] <? x[k] x[l] <? x[m] (μετάθεση-(n-)!) (μετάθεση-n!)
Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Δένδρο απόφασης για n=3 Παράδειγμα Για a = [,,3] a[] <? a[] ναι a[] <? a[3] ναι ναι a[] <? a[3] όχι a[] <? a[3] όχι Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο a[3]<a[]<a[] όχι a[]<a[]<a[3] a[]<a[3]<a[] όχι ναι a[]<a[]<a[3] a[] <? a[3] ναι όχι a[]<a[3]<a[] a[3]<a[]<a[]
Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Δένδρο απόφασης για n=3 Παράδειγμα Για a = [,,3] a[] <? a[] ναι a[] <? a[3] ναι ναι a[] <? a[3] όχι a[] <? a[3] όχι Η εκτέλεση του αλγόριθμου ακολουθεί ένα μονοπάτι από τη ρίζα προς κάποιο φύλλο a[3]<a[]<a[] όχι a[]<a[]<a[3] a[]<a[3]<a[] όχι ναι a[]<a[]<a[3] a[] <? a[3] ναι όχι a[]<a[3]<a[] a[3]<a[]<a[]
Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Δένδρο απόφασης Το δένδρο έχει n! φύλλα x[i] <? x[j] x[b] <? x[c] x[f] <? x[g] x[h] <? x[i] x[d] <? x[e] x[j] <? x[k] Κάθε μετάθεση της ακολουθίας εισόδου αντιστοιχεί σε διαφορετικό φύλλο x[l] <? x[m] Το πλήθος των συγκρίσεων που πραγματοποιεί μια εκτέλεση ενός οποιουδήποτε αλγόριθμου στη χειρίστη περίπτωση είναι ίσος με το ύψος του δένδρου!!!
Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Δένδρο απόφασης x[i] <? x[j] Το δένδρο έχει n! φύλλα x[b] <? x[c] x[f] <? x[g]?????? x[h] <? x[i] x[d] <? x[e] x[j] <? x[k] x[l] <? x[m] n! Ύψος δένδρου? Το πλήθος των συγκρίσεων που πραγματοποιεί μια εκτέλεση ενός οποιουδήποτε αλγόριθμου στη χειρίστη περίπτωση είναι ίσος με το ύψος του δένδρου!!!
Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Δένδρο απόφασης x[i] <? x[j] Λήμμα. Έστω L το πλήθος των φύλλων ενός δυαδικού δένδρου και έστω h το ύψος του. Τότε ισχύει L h. Λήμμα. Έστω L και h του Λήμματος. Τότε ισχύει h log L. x[b] <? x[c] x[f] <? x[g] x[h] <? x[i] x[d] <? x[e] x[j] <? x[k] x[l] <? x[m] n! Ύψος δένδρου? Λήμμα 3. Για δεδομένο n, το δένδρο απόφασης για οποιοδήποτε αλγόριθμο ταξινόμησης με συγκρίσεις των στοιχείων του έχει ύψος τουλάχιστον log(n!).
Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Δένδρο απόφασης n/ n/ n! Log(n!) n/ = ακέραιοι με τιμή n/ 3 n / n nn n/ log(n/ ) n ακέραιοι με τιμή N log(n!) n logn log(n!) = Ω(n logn) Το δένδρο έχει n! φύλλα και ύψος log(n!)
Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Δένδρο απόφασης Οποιοσδήποτε αλγόριθμος ταξινόμησης με συγκρίσεις, ταξινομεί n στοιχεία απαιτώντας τουλάχιστον n logn συγκρίσεις. x[i] <? x[j] x[b] <? x[c] x[f] <? x[g] x[h] <? x[i] x[d] <? x[e] x[j] <? x[k] Ω(n logn) x[l] <? x[m] n! Ύψος δυαδικού δένδρου με n! φύλλα Λήμμα 3. Για δεδομένο n, το δένδρο απόφασης για οποιοδήποτε αλγόριθμο ταξινόμησης με συγκρίσεις των στοιχείων του έχει ύψος τουλάχιστον n log n.
Κάτω Φράγματα Ταξινόμησης Κάτω Φράγμα Ταξινόμησης Δένδρο απόφασης Οποιοσδήποτε αλγόριθμος ταξινόμησης με συγκρίσεις, ταξινομεί n στοιχεία απαιτώντας τουλάχιστον n logn συγκρίσεις. x[i] <? x[j] x[b] <? x[c] x[f] <? x[g] x[h] <? x[i] x[d] <? x[e] x[j] <? x[k] Ω(n logn) x[l] <? x[m] n! Ύψος δυαδικού δένδρου με n! φύλλα Κάτω φράγμα ταξινόμησης:
Άνω και Κάτω Φράγματα Ταξινόμησης Πρόβλημα Ταξινόμησης Η πολυπλοκότητα του Αλγόριθμου Merge-Sort είναι Ο(n logn) To ελάχιστο πλήθος Βασικών Πράξεων που απαιτούνται για την επίλυση του Προβλήματος της Ταξινόμησης είναι Ω(n logn) Άνω Φράγμα Ο(n logn) Κάτω Φράγμα Ω(n logn) Δεν θα σταματήσω εάν δεν βρω έναν Θ(n) αλγόριθμο SORTING
Αλγόριθμος Merge-Sort Πολυπλοκότητα Αλγόριθμου Merge-Sort Μέση Πολυπλοκότητα Merge-Sort Τώρα Γνωρίζω!!!!!! Algorithm Merge-Sort(A, left, right) begin if (left >= right) return mid = (left + right) / Merge-Sort(A, left, mid) Merge-Sort(A, mid+, right) Merge(A, left, mid, right) end!!! Ασυμπωτική πολυπλοκότητα μέσης περίπτωσης Merge-Sort :
Μέτρηση Αντιστροφών Αντιστροφές
Αντιστροφές Μέτρηση Αντιστροφών Έστω μια μετάθεση A = (a, a,, an) του συνόλου Nn = {,,, n}. Ένα ζεύγος στοιχείων (ak, am) της μετάθεσης A ονομάζεται αντιστροφή (inversion) εάν για τις θέσεις τους ισχύει k < m και για τις τιμές του ak > am. k<m Το ζεύγος (3, ) είναι μια αντιστροφή ak > am
Αντιστροφές Μέτρηση Αντιστροφών Έστω μια μετάθεση A = (a, a,, an) του συνόλου Nn = {,,, n}. Ένα ζεύγος στοιχείων (ak, am) της μετάθεσης A ονομάζεται αντιστροφή (inversion) εάν για τις θέσεις τους ισχύει k < m και για τις τιμές του ak > am. Για παράδειγμα, οι αντιστροφές της μετάθεσης A = (, 3, 5,,, ) είναι τα ζεύγη (, 3) (, ) (, ) (3, ) (3, ) (5, ) (5, ) (, )
Αντιστροφές Μέτρηση Αντιστροφών Έστω μια μετάθεση A = (a, a,, an) του συνόλου Nn = {,,, n}. Ένα ζεύγος στοιχείων (ak, am) της μετάθεσης A ονομάζεται αντιστροφή (inversion) εάν για τις θέσεις τους ισχύει k < m και για τις τιμές του ak > am. Αλγόριθμος Σχεδιάστε αλγόριθμο ο οποίος θα δέχεται ως είσοδο μία μετάθεση A του συνόλου Nn και θα υπολογίζει το πλήθος των αντιστροφών της. Προφανής αλγόριθμος: Θέλουμε αλγόριθμο με πολυπλοκότητα :
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 9 3 0 Κ = πλήθος αντιστροφών Α 8 5 Κ = πλήθος αντιστροφών Α Κ = πλήθος αντιστροφών (x, y) με x Α και το y Α Πλήθος αντιστροφών Κ + Κ + Κ 7
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 9 A 3 3 0 9 0 Κ = 0 Πλήθος αντιστροφών Κ + Κ + Κ 8 5 A 5 7 8 Κ = 8 7
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 9 A 3 3 0 9 0 8 5 A 5 7 8 7 αντιστροφές όταν A[] > A[] Κ = 0 Κ = 8 0 >> A[3] < A[3] >> A[5] > A[3]
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 9 A 3 3 0 9 0 8 5 A 5 7 8 7 αντιστροφές όταν A[] > A[] Κ = 0 Κ = 8 0 >> A[3] < A[3] >> A[5] > A[3]
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 9 A 3 3 0 9 0 8 5 A 5 7 8 7 αντιστροφές όταν A[] > A[] Κ = 0 Κ = 8 0 >> A[3] < A[3] >> A[5] > A[3]
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 i= Κ = 0 Κ = 8 Κ =? 0 5 7 8
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 i= Κ = 0 Κ = 8 Κ = 5 7 8
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 i=5 Κ = 0 Κ = 8 Κ = 5 7 8
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 i= Κ = 0 Κ = 8 3 Κ = 5 7 8
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 i=3 Κ = 0 Κ = 8 3 Κ = 5 7 8
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 i=3 Κ = 0 Κ = 8 3 5 Κ = + 3 5 3 7 8
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 i= Κ = 0 Κ = 8 3 5 Κ = + 3 5 3 7 8
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 i= Κ = 0 Κ = 8 3 5 Κ = + 3 + 7 5 7 3 8
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 5 7 8 3 i= Κ = 0 Κ = 8 3 5 7 Κ = + 3 + + 8
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 5 7 8 3 i= Κ = 0 Κ = 8 3 5 7 Κ = + 3 + + 8 9
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 Ο πίνακας Α εξαντλήθηκε Κ = 0 Κ = 8 3 5 7 8 3 i=0 5 7 Κ = + 3 + + 8 9 0
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 Ο πίνακας Α εξαντλήθηκε Κ = 0 Κ = 8 3 5 7 8 3 0 i=0 5 7 Κ = + 3 + + 8 9 0
Αντιστροφές Μέτρηση Αντιστροφών Παρουσίαση της ιδέας του Αλγόριθμου με ένα παράδειγμα 3 9 0 Ο πίνακας Α εξαντλήθηκε Κ = 0 Κ = 8 3 5 7 8 3 0 0 i=0 5 7 8 9 Κ = + 3 + + = 3 Πολυπλοκότητα υπολογισμού των Κ αντιστροφών : 0
Αντιστροφές Μέτρηση Αντιστροφών Αλγόριθμος Διαίρει-και-Βασίλευε 9 3 3 0 8 5 9 0 Κ = 3 5 7 8 Κ = 0 Πλήθος αντιστροφών 3 Πολυπλοκότητα αλγόριθμου: Κ = 8 7
Αντιστροφές Μέτρηση Αντιστροφών Παράδειγμα Εκτέλεσης του αλγόριθμου 3 3 3 3 Πλήθος αντιστροφών? 8 5 8 7 8 8 5 7 5 5 7 7
Αντιστροφές Μέτρηση Αντιστροφών Παράδειγμα Εκτέλεσης του αλγόριθμου 3 3 3 3 0 0 0 Πλήθος αντιστροφών? 8 5 0 7 8 0 8 8 0 0 5 7 5 5 0 0 7 0 7 0
Αντιστροφές Μέτρηση Αντιστροφών Παράδειγμα Εκτέλεσης του αλγόριθμου 3 3 3 3 0 Πλήθος αντιστροφών? 8 5 8 0 5 8 7 5 3 7 7 0
Αντιστροφές Μέτρηση Αντιστροφών Παράδειγμα Εκτέλεσης του αλγόριθμου 3 3 3 Πλήθος αντιστροφών? 8 5 5 7 5 7 8
Αντιστροφές Μέτρηση Αντιστροφών Παράδειγμα Εκτέλεσης του αλγόριθμου 3 Πράγματι : o (3, ) (3, ) o (, ) (, ) (, 5) (, ) o (, ) o (, ) o (8, 5) (8, ) (8, 7) o (5, ) Πλήθος αντιστροφών 8 5 7
Αντιστροφές Μέτρηση Αντιστροφών Παράδειγμα Εκτέλεσης του αλγόριθμου 3 Τεχνική Διαίρει-και-Βασίλευε Χρήση Ταξινόμησης (Merge-Sort) Ορθότητα εύκολη Πολυπλοκότητα Merge-Sort Πολυπλοκότητα αλγόριθμου: 8 5 7
Αντιστροφές Μέτρηση Αντιστροφών Αλγόριθμος Ο(n) σε σχέση με έναν Ο(n logn) n logn n n logn 5 0 0.08.57 0.0 08.9.30.58 09.777. 9.5 0857 0.099.5.7.77 0.97.50 33553 5.5.899.90.8. 838.80.800 Πολυπλοκότητα αλγόριθμου:
Πλησιέστερο Ζεύγος Σημείων Πλησιέστερο Ζεύγος
Πλησιέστερο Ζεύγος Σημείων H εταιρεία MS-Control H εταιρεία ΜS-Control με κύρια δραστηριότητα σε υπηρεσίες «παγκόσμιας ασφαλούς πλοήγησης», διαθέτει ένα ισχυρό δορυφορικό σύστημα το οποίο σε σταθερό χρόνο μπορεί να εντοπίσει όλα τα μέσα πολιτικής αερομεταφοράς και πλεύσης S, S,, Sn (n ) τα οποία βρίσκονται σε οπουδήποτε σημείο του κόσμου και να υπολογίσει τις συντεταγμένες Si = (xi, yi) της θέσης τους.
Πλησιέστερο Ζεύγος Σημείων H εταιρεία MS-Control Η εταιρεία θέλει να δημιουργήσει ένα σύστημα το οποίο να εντοπίζει γρήγορα ένα ζεύγος αντικείμενων (δύο αεροπλάνα ή πλοία) (Sp, Sq) τα οποία στο χρονικό διάστημα [t, t] απέχουν μεταξύ τους την μικρότερη απόσταση d(sp, Sq) = min {d(si, Sj) i, j n} μεταξύ όλων των ζευγών των n αντικειμένων που εντοπίζει, έτσι ώστε εάν d(sp, Sq) < Dmin να στέλνει «SOS» για αποφυγή πιθανής σύγκρουσης!!!
Πλησιέστερο Ζεύγος Σημείων H εταιρεία MS-Control Στο λογισμικό του συστήματος πλοήγησης πρέπει να ενσωματωθεί αλγόριθμος ο οποίος «πολύ γρήγορα» θα υπολογίζει το πλησιέστερο ζεύγος αεροσκαφών ή πλοίων (Sp, Sq) σε οποιοδήποτε σημείο του κόσμου!!! Καλείστε να τον σχεδιάσετε!!! Ο αλγόριθμός σας θα πρέπει να είναι : Σωστός Πολύ γρήγορος!!!
Πλησιέστερο Ζεύγος Σημείων H εταιρεία MS-Control Δεν θα θέλατε να σχεδιάσετε!!! έναν αλγόριθμο πολυπλοκότητας Ο(n), O(n3) ή μεγαλύτερης, για τη συγκεκριμένη εφαρμογή????? Γιατί? Δεν θα θέλατε να συμβεί αυτό!!!
Πλησιέστερο Ζεύγος Σημείων H εταιρεία MS-Control Δεν θα θέλατε να σχεδιάσετε!!! έναν αλγόριθμο πολυπλοκότητας Ο(n), O(n3) ή μεγαλύτερης, για τη συγκεκριμένη εφαρμογή????? Δεν θα θέλατε να συμβεί αυτό!!!
Πλησιέστερο Ζεύγος Σημείων H εταιρεία MS-Control Δεν θα θέλατε να σχεδιάσετε!!! έναν αλγόριθμο πολυπλοκότητας Ο(n), O(n3) ή μεγαλύτερης, για τη συγκεκριμένη εφαρμογή Ούτε φυσικά αυτό!!!????? Δεν θα θέλατε να συμβεί αυτό!!!
Πλησιέστερο Ζεύγος Σημείων H εταιρεία MS-Control Θέλω έναν αλγόριθμο Σωστό και «Ταχύτατο»!!! Μελέτη Προβλήματος και Επινόηση Καλής Τεχνικής και Ιδέας!!!!!!!! Δεν θα θέλατε να συμβεί αυτό!!!
Ορισμός του Προβλήματος Πλησιέστερο Ζεύγος Σημείων
Ορισμός του Προβλήματος Πλησιέστερο Ζεύγος Σημείων
Ορισμός του Προβλήματος Πλησιέστερο Ζεύγος Σημείων
Πλησιέστερο Ζεύγος Σημείων Ορισμός του Προβλήματος q y p y p q p x q x
Πλησιέστερο Ζεύγος Σημείων Σχεδίαση Αλγόριθμου Είσοδος : Οι συντεταμένες n σημείων pi στο επίπεδο και οι μεταξύ τους αποστάσεις d(pi, pj), i, j n Έξοδος : Το ζεύγος σημείων (pk, pm) με τη μικρότερη μεταξύ τους απόσταση D!!! Υπάρχει προφανής και εύκολος αλγόριθμος πολυπλοκότητας Ο(n) Θέλουμε καλύτερο!!! πολυπλοκότητας Ο(nlogn) Μπορούμε να σχεδιάσουμε καλύτερο?
Πλησιέστερο Ζεύγος Σημείων Αλγόριθμος Ο(n ) Τετριμμένος δυσκολίας Λυκείου!!! Max από τα n ζεύγη σημείων Πολυπλοκότητα Αλγόριθμου Ο(n )
Πλησιέστερο Ζεύγος Σημείων Αλγόριθμος Ο(n log n) Επινόηση Καλής Τεχνικής και Ιδέας!!!
Πλησιέστερο Ζεύγος Σημείων Αλγόριθμος Ο(n log n) Τεχνική Διαίρει-και-Βασίλευε!!!
Πλησιέστερο Ζεύγος Σημείων Αλγόριθμος Ο(n log n) Τεχνική Διαίρει-και-Βασίλευε!!! D = min{δ, δ } δ δ
Πλησιέστερο Ζεύγος Σημείων Αλγόριθμος Ο(n log n) Τεχνική Διαίρει-και-Βασίλευε!!! D = min{δ, δ, δ } δ δ δ
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Τεχνική Διαίρει-και-Βασίλευε! Αλγόριθμος Closest-Pair. Ταξινόμησε τα σημεία σύμφωνα με τις x-συντεταγμένες τους.. Χωρίστε το σύνολο των σημείων σε δύο ίσου μεγέθους υποσύνολα με μια κάθετη γραμμή x = xmid. 3. Λύσε το πρόβλημα αναδρομικά στα αριστερά και δεξιά υποσύνολα και υπολόγισε τις ελάχιστες αποστάσεις δ και δ στο αριστερό και δεξιό υποσύνολο, αντίστοιχα.. Υπολόγισε την ελάχιστη απόσταση δ μεταξύ των σημείων εκατέρωθεν της καθέτου x = xmid και τα οποία βρίσκονται σε απόσταση δ = min{δ, δ} από αυτήν. 5. Επίστρεψε τη λύση D ως το ελάχιστο μεταξύ των δ, δ και δ.
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) δ δ
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ δ δ = min (δ, δ) δ δ
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ δ δ = min (δ, δ)
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ δ δ = min (δ, δ) Πόσα σημεία p υπάρχουν? p
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ δ δ = min (δ, δ) Πόσα σημεία p υπάρχουν? O(n) O(n) συγκρίσεις! Τ(n) = T( n/ ) + T( n/ ) + O(n) Τ(n) = O(n) p
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ δ Δεν αρκεί μόνο η καλή Αλγοριθμική Τεχνική!!! Χρειάζεται και Καλή Ιδέα!!! p!!!!!!
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ δ δ = min (δ, δ) Το σημείο p με πόσα το λιγότερο σημεία μπορεί να συγκριθεί? δ p
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ δ δ = min (δ, δ) Το σημείο p με πόσα το λιγότερο σημεία μπορεί να συγκριθεί? Εντός του παραλληλογράμμου διαστάσεων δ x δ υπάρχουν το πολύ 8 σημεία δ p
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ δ = min (δ, δ) δ Το σημείο p με πόσα το λιγότερο σημεία μπορεί να συγκριθεί? Εντός του παραλληλογράμμου διαστάσεων δ x δ υπάρχουν το πολύ 8 σημεία δ/ δ p δ/ Ένα σημείο σε κάθε παραλληλόγραμμο διαστάσεων δ/ x δ/
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ δ = min (δ, δ) δ Το σημείο p με πόσα το λιγότερο σημεία μπορεί να συγκριθεί? Εντός του παραλληλογράμμου διαστάσεων δ x δ υπάρχουν το πολύ 8 σημεία δ/ δ p Ένα σημείο σε κάθε παραλληλόγραμμο διαστάσεων δ/ x δ/ Άρα το σημείο p θα συγκριθεί με 7 το πολύ σημεία!!! δ/
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ δ = min (δ, δ) δ Το σημείο p με πόσα το λιγότερο σημεία μπορεί να συγκριθεί? m σημεία 7 m συγκρίσεις! δ/ δ p δ/ O(n) σημεία O(n) συγκρίσεις!
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) Να πως θα δουλέψει ο αλγόριθμος! Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) Να πως θα δουλέψει ο αλγόριθμος! Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη p Παίρνω το p στη «Λωρίδας» με την min y-συντεταγμένη
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) Να πως θα δουλέψει ο αλγόριθμος! Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη p Παίρνω το p στη «Λωρίδας» με την min y-συντεταγμένη και υπολογίζω την απόσταση του από τα 7 πλησιέστερα
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) Να πως θα δουλέψει ο αλγόριθμος! Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη p Παίρνω το p με την αμέσως min y-συντεταγμένη και υπολογίζω την απόσταση του από τα 7 πλησιέστερα
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) Να πως θα δουλέψει ο αλγόριθμος! Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη 3 p Παίρνω το αμέσως επόμενο με min y-συντεταγμένη και υπολογίζω την απόσταση του από τα 7 πλησιέστερα
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) Να πως θα δουλέψει ο αλγόριθμος! Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη p Συνεχίζω έως ότου εξαντληθούν όλα τα στοιχεία της «Λωρίδας»!
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) Να πως θα δουλέψει ο αλγόριθμος! 5 Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη p Συνεχίζω έως ότου εξαντληθούν όλα τα στοιχεία της «Λωρίδας»!
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) Να πως θα δουλέψει ο αλγόριθμος! p Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη Συνεχίζω έως ότου εξαντληθούν όλα τα στοιχεία της «Λωρίδας»!
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) Να πως θα δουλέψει ο αλγόριθμος! 7 p Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη Συνεχίζω έως ότου εξαντληθούν όλα τα στοιχεία της «Λωρίδας»!
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) 8 p Να πως θα δουλέψει ο αλγόριθμος! Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη Συνεχίζω έως ότου εξαντληθούν όλα τα στοιχεία της «Λωρίδας»!
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) 9 p Να πως θα δουλέψει ο αλγόριθμος! Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη Συνεχίζω έως ότου εξαντληθούν όλα τα στοιχεία της «Λωρίδας»! Στο τέλος υπολογίζω το δ να είναι το min όλων αυτών των αποστάσεων!
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Closest-Pair δ = min (δ, δ) Να πως θα δουλέψει ο αλγόριθμος! Ταξινομώ τα στοιχεία της «λωρίδας» ως προς την y-συντεταγμένη Συνεχίζω έως ότου εξαντληθούν όλα τα στοιχεία της «Λωρίδας»! Στο τέλος υπολογίζω το δ να είναι το min όλων αυτών των αποστάσεων! D = min (δ, δ, δ)
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Ορθότητα αλγόριθμου Η απόδειξη της ορθότητας του αλγόριθμου Closest-Pair είναι σχεδόν προφανής. Χρειάζεται λίγη μόνο προσοχή στο να δειχθεί ότι για τον υπολογισμό της απόστασης δ είναι αρκετές οι 7 συγκρίσεις για κάθε σημείο στη «λωρίδα». Ορθότητα αλγόριθμου: Σωστό αποτέλεσμα για κάθε είσοδο!!!
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Πολυπλοκότητα αλγόριθμου Η αναδρομική σχέση που εκφράζει το χρόνο εκτέλεσης του αλγόριθμου: Τ(n) = T( n/ ) + T( n/ ) + cn Τ(n) = T( n/ ) + T( n/ ) + O(n) Από Κύριο Θεώρημα: Τ(n) = Ο(n log n) Πολυπλοκότητα αλγόριθμου: c σταθερά (με τιμή c = 7)
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Ένα πολύ ενδιαφέρον Σενάριο!!! Θέλω «γρηγορότερο» αλγόριθμο!!! Εντάξει θα προσπαθήσω!!! Πολυπλοκότητα αλγόριθμου:
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Ένα πολύ ενδιαφέρον Σενάριο!!! Προσπαθώ!!! αλλά δεν μπορώ να σχεδιάσω κάποιον «γρηγορότερο» από Ο(n logn) Χμμ δεν θα αποφύγω την απόλυση!!! Πολυπλοκότητα αλγόριθμου:
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Ένα πολύ ενδιαφέρον Σενάριο!!! Tο πρόβλημα της διακριτότητας στοιχείων (element distinctness problem ) ή της μοναδικότητας στοιχείων (element uniqueness problem) είναι το πρόβλημα του καθορισμού αν όλα τα στοιχεία μιας ακολουθίας είναι διαφορετικά. Για πρόσεχε λίγο αυτό το πρόβλημα!!! Πολυπλοκότητα αλγόριθμου:
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Ένα πολύ ενδιαφέρον Σενάριο!!! Διακριτότητα Στοιχείων Απέδειξα ότι το πρόβλημα αυτό έχει κάτω φράγμα επίλυσης Ω(n logn) Και λοιπόν εγώ ασχολούμαι με το πρόβλημα Πλησιέστερου Ζεύγους Σημείων Πολυπλοκότητα αλγόριθμου:
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Ένα πολύ ενδιαφέρον Σενάριο!!! Αναγωγές!!! Tο πρόβλημα Διακριτότητα Στοιχείων Ανάγεται στο πρόβλημα Πλησιέστερου Ζεύγους Σημείων Αν αποδείξεις αυτό, έχεις αποφύγει την απόλυση! Πολυπλοκότητα αλγόριθμου:
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αναγωγές!!! Λέμε ότι το πρόβλημα Α ανάγεται στο πρόβλημα Β και το συμβολίζουμε Α Β, εάν μπορούμε να σχεδιάσουμε έναν αλγόριθμο πολυωνυμικού χρόνου για την επίλυση του Α χρησιμοποιώντας έναν αλγόριθμο για την επίλυση του Β!!! Αλγόριθμος για το Α x προεπεξεργασία y Αλγόριθμος για το Β Β(y) μετεπεξεργασία Α(x)
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Γιατί Αναγωγές? Αυξάνουν την ισχύ των αλγορίθμων μας : Εάν Α Β και έχουμε έναν αλγόριθμο για το Β, τότε μπορούμε να χρησιμοποιήσουμε τον αλγόριθμο Β για να λύσουμε το πρόβλημα Α!!! Επιτρέπουν συγκρίσεις και κατηγοριοποιήσεις: Μια αναγωγή Α Β μας επιτρέπει να συγκρίνουμε τις πολυπλοκότητες των προβλημάτων Α και Β και να κατηγοριοποιήσουμε αυτά ανάλογα με τη δυσκολία τους!!! Αλγόριθμος για το Α x y προεπεξεργασία Αλγόριθμος για το Β Β(y) μετεπεξεργασία Α(x)
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αναγωγή : Διακριτότητα Στοιχείων Πλησιέστερο Ζεύγος Σημείων Τι σημαίνει αυτό!!! Να πως!!! Μπορώ να λύσω το πρόβλημα Algorithm Element-Distinctness(A) begin Διακριτότητα Στοιχείων χρησιμοποιώντας έναν αλγόριθμο για το πρόβλημα Πλησιέστερο Ζεύγος Σημείων Για παράδειγμα, τον Closest-Pair Algorithm Closest-Pair (A) Return D if (D > 0) then return Yes else return No end
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αναγωγή : Διακριτότητα Στοιχείων Πλησιέστερο Ζεύγος Σημείων Τότε, έχουμε αυτό που θέλουμε!!! Εάν μπορούσα να σχεδιάσω ένα αλγόριθμο για το «Πλησιέστερο Ζεύγος Σημείων» πολυπλοκότητα ο(nlogn), δηλ. «γρηγορότερο» από O(nlogn), τότε θα μπορούσα να λύσω το πρόβλημα «Διακριτότητα Στοιχείων» σε χρόνο ο(nlogn)
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αναγωγή : Διακριτότητα Στοιχείων Πλησιέστερο Ζεύγος Σημείων Τότε, έχουμε αυτό που θέλουμε!!! Εάν μπορούσα να σχεδιάσω ένα αλγόριθμο για το «Πλησιέστερο Ζεύγος Σημείων» πολυπλοκότητα ο(nlogn), δηλ. «γρηγορότερο» από O(nlogn), τότε θα μπορούσα να λύσω το πρόβλημα «Διακριτότητα Στοιχείων» σε χρόνο ο(nlogn) Αυτό είναι αδύνατον να συμβεί, διότι O(nlogn) είναι το κάτω φράγμα επίλυσης του προβλήματος «Διακριτότητα Στοιχείων»!!!
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Ένα πολύ ενδιαφέρον Σενάριο!!! Τώρα γνωρίζω Πολυπλοκότητα αλγόριθμου:
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Ένα πολύ ενδιαφέρον Σενάριο!!! Τώρα γνωρίζω Κανένας δεν μπορεί να σχεδιάσει «γρηγορότερο» αλγόριθμο από εμένα!!! Και μπορώ να στο αποδείξω!!! Πολυπλοκότητα αλγόριθμου:
Πλησιέστερο Ζεύγος Σημείων Εύρεση Πλησιέστερου Ζεύγους Σημείων Αλγόριθμος Ο(n) σε σχέση με έναν Ο(n logn) n logn n n logn 5 0 0.08.57 0.0 08.9.30.58 09.777. 9.5 0857 0.099.5.7.77 0.97.50 33553 5.5.899.90.8. 838.80.800 Πολυπλοκότητα αλγόριθμου:
Πολλαπλασιασμός Πινάκων Αλγόριθμος Strassen
Πολλαπλασιασμός Πινάκων Αλγόριθμος Λυκείου!!! Πολλαπλασιασμός Πινάκων Έστω Α = (aij) και Β=(bij) δύο τετραγωνικοί n n πίνακες. Υπάρχει ο κλασσικός μας αλγόριθμος πολλαπλασιασμού των δύο πινάκων C = Α Β που βασίζεται στον ορισμό: όπου cij το στοιχείο του πίνακα C στην ij θέση, i, j =,,, n.
Πολλαπλασιασμός Πινάκων Αλγόριθμος Λυκείου!!! Πολλαπλασιασμός Πινάκων Ο κλασσικός μας αλγόριθμος πολλαπλασιασμού : όπου cij είναι το στοιχείο του πίνακα C στην ij θέση, i, j =,,, n. Το στοιχείο cij του πίνακα C υπολογίζεται σε χρόνο O(n), θεωρώντας βασικές πράξεις την πρόσθεση και τον πολλαπλασιασμό. Επομένως, ο κλασσικός αλγόριθμος πολλαπλασιασμού δύο n n πινάκων έχει πολυπλοκότητα O(n3).
Πολλαπλασιασμός Πινάκων Αλγόριθμος Λυκείου!!! Πολλαπλασιασμός Πινάκων Μπορώ να χρησιμοποιήσω την τεχνική του Διαίρει-και-Βασίλευε??????? Δεν ξεχνώ!!! Κάθε αλγόριθμος Διαίρει-και-Βασίλευε περιλαμβάνει τρείς φάσεις: NAI!!!. Διαίρεσε το πρόβλημα σε μικρότερα υποπροβλήματα.. Κατάκτησε τα υποπροβλήματα, επιλύοντάς τα αναδρομικά. Εάν τα υποπροβλήματα είναι μικρού μεγέθους, απλώς επίλυσέ τα άμεσα. 3. Συνδύασε τις λύσεις των υποπροβλημάτων για να βρεις τη λύση του αρχικού προβλήματος.
Αλγόριθμος Strassen Αλγόριθμος Διαίρει-και-Βασίλευε Αναδρομικός Πολλαπλασιασμός Πινάκων Παρουσιάζουμε έναν απλό αναδρομικό αλγόριθμο για τον υπολογισμό του γινομένου C = A B δύο τετραγωνικών n n πινάκων. Υποθέτουμε, για απλότητα, ότι το n είναι δύναμη του n/ ακέραιος. Διαμερίζουμε καθένα από τους A, B, και C σε τέσσερις n/ n/ πίνακες:
Αλγόριθμος Strassen Αλγόριθμος Διαίρει-και-Βασίλευε Αναδρομικός Πολλαπλασιασμός Πινάκων Οι πίνακες Aιj, Bij, και Cij είναι διαστάσεων n/ n/. Οπότε, η εξίσωση C = A B μπορεί να γραφεί :
Αλγόριθμος Strassen Αλγόριθμος Διαίρει-και-Βασίλευε Αναδρομικός Πολλαπλασιασμός Πινάκων H εξίσωση : αντιστοιχεί στις εξισώσεις : Κάθε μία από τις εξισώσεις περιγράφει πολλαπλασιασμούς n/ n/ πινάκων και την πρόσθεση των n/ n/ γινομένων τους!!!
Αλγόριθμος Strassen Αλγόριθμος Διαίρει-και-Βασίλευε Αναδρομικός Πολλαπλασιασμός Πινάκων Algorithm RM(Α,Β) Αλγόριθμος Simple-RMM begin n A.rows let C a new n*n matrix if n == c = a + b else divide A,B,C in n/*n/ submx C = RM(A,B) + RM(A,B) C = RM(A,B) + RM(A,B) C = RM(A,B) + RM(A,B) C = RM(A,B) + RM(A,B) end return C end Με βάση τις αυτές εξισώσεις σχεδιάζουμε έναν απλό αναδρομικό αλγόριθμο Διαίρει-και-Βασίλευε!!! 8 πολλαπλασιασμοί n/ n/ πινάκων προσθέσεις των γινομένων τους
Αλγόριθμος Strassen Αλγόριθμος Διαίρει-και-Βασίλευε Αναδρομικός Πολλαπλασιασμός Πινάκων Algorithm RM(Α,Β) Αλγόριθμος Simple-RMM begin n A.rows let C a new n*n matrix if n == c = a + b else divide A,B,C in n/*n/ submx C = RM(A,B) + RM(A,B) C = RM(A,B) + RM(A,B) C = RM(A,B) + RM(A,B) C = RM(A,B) + RM(A,B) end return C end Πολυπλοκότητα αλγόριθμου RM
Αλγόριθμος Strassen Αλγόριθμος Διαίρει-και-Βασίλευε Αναδρομικός Πολλαπλασιασμός Πινάκων Θυμηθείτε!!! Πολυπλοκότητα αλγόριθμου RM εάν εάν εάν 3 Από Κύριο Θεώρημα: Καμία βελτίωση ως προς τον κλασσικό μας αλγόριθμο!!!??????
Αλγόριθμος Strassen Αλγόριθμος Διαίρει-και-Βασίλευε Αναδρομικός Πολλαπλασιασμός Πινάκων Algorithm RM(Α,Β) Αλγόριθμος Simple-RMM begin n A.rows let C a new n*n matrix if n == c = a + b else partite A, B, C c = RMM(A,B) + RMM(A,B) c = RMM(A,B) + RMM(A,B) c = RMM(A,B) + RMM(A,B) c = RMM(A,B) + RMM(A,B) end return C end Δεν αρκεί μόνο η καλή Αλγοριθμική Τεχνική!!! Χρειάζεται και Ευφυΐα!!!!!!!!!
Αλγόριθμος Strassen Αλγόριθμος Strassen Αναδρομικός Πολλαπλασιασμός Πινάκων Παρουσιάζουμε τον αλγόριθμο του Strassen για τον υπολογισμό του γινομένου C = A B δύο τετραγωνικών n n πινάκων A και B, που εκτελείται σε χρόνο : Δεδομένου ότι η τιμή log 7 είναι μεταξύ.80 και.8, ο αλγόριθμος του Strassen έχει χρόνο εκτέλεσης : και, επομένως, είναι ασυμπτωτικά ταχύτερος από τον κλασσικό αλγόριθμο του Λυκείου μας!!!
Αλγόριθμος Strassen Αλγόριθμος Strassen Ιδέα Αλγόριθμου!!!... Είναι αλγόριθμος τεχνικής Διαίρει-και-Βασίλευε!!! Η ιδέα κλειδί του αλγόριθμου βασίζεται στην εξής επινόηση του Strassen : Ο πολλαπλασιασμός δύο πινάκων A και B μπορεί να εκτελεστεί μόνο με 7 πολλαπλασιασμούς αντί για 8 (και 8 προσθέσεις/αφαιρέσεις αντί για )!!! Πόσο σημαντική είναι η εξάλειψη ενός πολλαπλασιασμού? Ας δούμε πρώτα την ιδέα του!!! και μετά δείχνουμε εάν είναι σημαντική και πόσο!!!??????
Αλγόριθμος Strassen Αλγόριθμος Strassen Ιδέα Αλγόριθμου!!!... Ο πολλαπλασιασμός δύο πινάκων A και B μπορεί να εκτελεστεί μόνο με 7 πολλαπλασιασμούς αντί για 8 (και 8 προσθέσεις/αφαιρέσεις αντί για )!!! Να η ιδέα του Strassen!!! Όρισε τις ποσότητες P, P,, P7 και στη συνέχεια
Αλγόριθμος Strassen Αλγόριθμος Strassen Ιδέα Αλγόριθμου!!!... Ο πολλαπλασιασμός δύο πινάκων A και B μπορεί να εκτελεστεί μόνο με 7 πολλαπλασιασμούς αντί για 8 (και 8 προσθέσεις/αφαιρέσεις αντί για )!!! Να η ιδέα του Strassen!!! Πράγματι η ιδέα του Strassen είναι σωστή!!! Επαλήθευση της τιμής του r!!!
Αλγόριθμος Strassen Αλγόριθμος Strassen Ιδέα Αλγόριθμου!!!... Ο πολλαπλασιασμός δύο πινάκων A και B μπορεί να εκτελεστεί μόνο με 7 πολλαπλασιασμούς αντί για 8 (και 8 προσθέσεις/αφαιρέσεις αντί για )!!! Να η ιδέα του Strassen!!! Πράγματι η ιδέα του Strassen είναι σωστή!!! Εύκολα μπορούμε να επαληθεύουμε τις τιμές των s, t και u!!!
Αλγόριθμος Strassen Αλγόριθμος Strassen Ιδέα Αλγόριθμου!!!... Ο πολλαπλασιασμός δύο πινάκων A και B μπορεί να εκτελεστεί μόνο με 7 πολλαπλασιασμούς αντί για 8 (και 8 προσθέσεις/αφαιρέσεις αντί για )!!! Η ιδέα του Strassen είναι σωστή!!! Πόσο καλή όμως είναι η ιδέα ; Μας γλιτώνει ένα πολλαπλασιασμό! Όμως μας κοστίζει επιπρόσθετες προσθέσεις/αφαιρέσεις!! Δεν θα είχε καμία αξία εάν η χρησιμότητά της περιοριζόταν μόνο σε πολλαπλασιασμό πινάκων!!!
Αλγόριθμος Strassen Αλγόριθμος Strassen Ιδέα Αλγόριθμου!!!... Ο πολλαπλασιασμός δύο πινάκων A και B μπορεί να εκτελεστεί μόνο με 7 πολλαπλασιασμούς αντί για 8 (και 8 προσθέσεις/αφαιρέσεις αντί για )!!! Έχει γενικότερη χρησιμότητα!!! Γιατί? Κρίσιμο σημείο της Ιδέας!!! Η αντιμεταθετικότητα της πράξης του πολλαπλασιασμού δεν χρησιμοποιείται στους τύπους υπολογισμού των ποσοτήτων P, P,, P7 Άρα, μπορεί να εφαρμοστεί όταν τα a, b, c, d, e, f, g και h είναι πίνακες!!!
Αλγόριθμος Strassen Αλγόριθμος Strassen Ιδέα Αλγόριθμου!!!... Ο πολλαπλασιασμός δύο n n πινάκων A και B μπορεί να εκτελεστεί μόνο με 7 αναδρομικούς πολλαπλασιασμούς n/ n/ πινάκων αντί για 8!!! Αναδρομική εφαρμογή της μεθόδου του Strassen σε πίνακες!!! Η εξάλειψη ενός πολλαπλασιασμού πινάκων κοστίζει μερικές επιπλέον νέες προσθέσεις n/ n/ πινάκων!!! Όμως, το πλήθος αυτών των προσθέσεων είναι σταθερό!!! και θα απορροφηθεί στον όρο Ο( ) της αναδρομικής σχέσης που εκφράζει το χρόνο εκτέλεσης του αλγόριθμου.
Αλγόριθμος Strassen Αλγόριθμος Strassen Ιδέα Αλγόριθμου!!!... Ο πολλαπλασιασμός δύο n n πινάκων A και B μπορεί να εκτελεστεί μόνο με 7 αναδρομικούς πολλαπλασιασμούς n/ n/ πινάκων αντί για 8!!! Γενίκευση της ιδέας!!! όπου S, S,, S0 πίνακες διαστάσεων n/ n/ :
Αλγόριθμος Strassen Αλγόριθμος Strassen Ιδέα Αλγόριθμου!!!... Ο πολλαπλασιασμός δύο n n πινάκων A και B μπορεί να εκτελεστεί μόνο με 7 αναδρομικούς πολλαπλασιασμούς n/ n/ πινάκων αντί για 8!!! Γενίκευση της ιδέας!!! Αναδρομικός υπολογισμός P, P,, P7 και έξοδος ο C :
Αλγόριθμος Strassen Αλγόριθμος Strassen Γενική περιγραφή Αλγόριθμος Η ιδέα αυτή υπαγορεύει τον παρακάτω αναδρομικό αλγόριθμο του Strassen για τον πολλαπλασιασμό δύο n n πινάκων:. Διαίρεσε τους πίνακες Α και Β σε υποπίνακες Α, Α, Α, Α και Β, Β, Β, Β τον καθένα διαστάσεων n/ x n/.. Κατέκτησε τους πίνακες P, P,, P7 κάνοντας 7 πολλαπλασιασμούς n/ x n/ πινάκων αναδρομικά (για τον υπολογισμό των πινάκων P, P,, P7 χρησιμοποίησε συνολικά n/ x n/ πίνακες - τους 8 πίνακες Α, Α, Α, Α, Β, Β, Β, Β και τους 0 πίνακες S, S,, S0). 3. Συνδύασε τα επιμέρους αποτελέσματα και υπολόγισε τον πίνακα C = A B χρησιμοποιώντας προσθέσεις/αφαιρέσεις πάνω στους 7 πίνακες P, P,, P7.
Αλγόριθμος Strassen Αλγόριθμος Strassen Αναλυτική περιγραφή Αλγόριθμος. Διαίρεσε τούς πίνακες Α και Β και τον πίνακα εξόδου C σε n/ n/ υποπίνακες. Χρόνος Θ(). Δημιούργησε 0 πίνακες S, S,, S0 διαστάσεων n/ n/ που είναι το άθροισμα ή η διαφορά δύο πινάκων που δημιουργήθηκαν στο βήμα. Χρόνος Θ(n).
Αλγόριθμος Strassen Αλγόριθμος Strassen Αναλυτική περιγραφή Αλγόριθμος. Υπολόγισε αναδρομικά επτά γινόμενα πινάκων Ρ, Ρ,, P7 χρησιμοποιώντας τους υποπίνακες των βημάτων και. Κάθε Pi έχει διαστάσεις n/ n/. 3. Υπολόγισε τους ζητούμενους υποπίνακες C, C, C,C του τελικού πίνακα C προσθέτοντας και αφαιρώντας διάφορους συνδυασμούς των πινάκων Pi. Χρόνος Θ(n).
Αλγόριθμος Strassen Αλγόριθμος Strassen Ορθότητα Αλγόριθμου Στο βήμα, υπολογίζει τους πίνακες P, P,, P7 κάνοντας 7 πολλαπλασιασμούς n/ x n/ πινάκων αναδρομικά, όπου καθένας είναι άθροισμα ή διαφορά γινομένων των υποπινάκων Α, Α, Α, Α, Β, Β, Β, Β των Α και Β: Στο βήμα 3, προσθέτει και αφαιρεί τους πίνακες P, P,, P7 και κατασκευάζει τους τέσσερις n/ x n/ υποπίνακες C, C, C, C του γινομένου C = A B.
Αλγόριθμος Strassen Αλγόριθμος Strassen Ορθότητα Αλγόριθμου Ας ξεκινήσουμε από τον όρο C : Αν γράψουμε αναλυτικά το δεξί μέλος, αναπτύσσοντας κάθε Pi σε μία γραμμή και στοιχίζοντας κατακόρυφα όρους που απαλείφονται, βλέπουμε ότι το C ισούται με:
Αλγόριθμος Strassen Αλγόριθμος Strassen Ορθότητα Αλγόριθμου Αντίστοιχα, παίρνουμε τον όρο C : οπότε αυτός ισούται με:
Αλγόριθμος Strassen Αλγόριθμος Strassen Ορθότητα Αλγόριθμου Συνεχίζοντας, παίρνουμε τον όρο C : οπότε αυτός ισούται με:
Αλγόριθμος Strassen Αλγόριθμος Strassen Ορθότητα Αλγόριθμου Τέλος, ο τέταρτος όρος C : ισούται με:
Αλγόριθμος Strassen Αλγόριθμος Strassen Πολυπλοκότητα Αλγόριθμου Η αναδρομική σχέση που εκφράζει το χρόνο εκτέλεσης του αλγόριθμου: Ο αλγόριθμος εκτελεί 7 πολλαπλασιασμούς και 8 προσθέσεις/αφαιρέσεις σε πίνακες διατάσεων n/ n/ Από Κύριο Θεώρημα: Πολυπλοκότητα αλγόριθμου: