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

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

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

Διαίρει-και-Βασίλευε. Διαίρει-και-Βασίλευε. MergeSort. MergeSort. Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1

Αναδρομικές Σχέσεις «ιαίρει-και-βασίλευε»

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

Επιλογή. Πρόβλημα Επιλογής. Μέγιστο / Ελάχιστο. Εφαρμογές

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

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

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

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

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

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

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

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

Διάλεξη 19: Αλγόριθμοι ΤαξινόμησηςII. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

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

Αλγόριθμοι ταξινόμησης

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

(Γραμμικές) Αναδρομικές Σχέσεις

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

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

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

Ασυμπτωτικός Συμβολισμός

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

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

(Γραμμικές) Αναδρομικές Σχέσεις

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

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

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

Ουρά Προτεραιότητας: Heap

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

ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι 4. Παραδείγματα Ανάλυσης Πολυπλοκότητας Ανάλυση Αναδρομικών Αλγόριθμων

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

Διάλεξη 04: Παραδείγματα Ανάλυσης

(Γραμμικές) Αναδρομικές Σχέσεις

Διάλεξη 04: Παραδείγματα Ανάλυσης Πολυπλοκότητας/Ανάλυση Αναδρομικών Αλγόριθμων

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΕΙΡΑΙΩΣ ΤΜΗΜΑ ΨΗΦΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

ΠΟΛΛΑΠΛΑΣΙΑΣΜΟΣ (συνέχεια)

Πολλαπλασιασμός: αλγόριθμος

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

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

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

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

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

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

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

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

Αλγόριθμοι Αναζήτησης

Αλγόριθµοι Divide-and- Conquer

υναμικός Προγραμματισμός

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

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

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

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

Εισαγωγή στην Ανάλυση Αλγορίθμων (2-3)

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

Ουρά Προτεραιότητας: Heap

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

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

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

υναμικός Προγραμματισμός

Τεχνικές Σχεδιασμού Αλγορίθμων

Εργαστήριο 6: Αναζήτηση, Ανάλυση Πολυπλοκότητας

Ασυμπτωτικός Συμβολισμός

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

Merge Sort (Ταξινόμηση με συγχώνευση) 6/14/2007 3:04 AM Merge Sort 1

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

Εργαστηριακή Άσκηση 1

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

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

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

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

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

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

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

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

Προχωρημένες έννοιες προγραμματισμού σε C

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

οµές εδοµένων 3 ο Εξάµηνο Τµήµα Πανεπιστήµιο Πληροφορικής Ιωαννίνων ΟΜΕΣ Ε ΟΜΕΝΩΝ

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

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

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

Ορισµός. Εστω συναρτήσεις: f : N R και g : N R. η f(n) είναι fi( g(n) ) αν υπάρχουν σταθερές C 1, C 2 και n 0, τέτοιες ώστε:

Αλγόριθµοι Ταξινόµησης

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ. ΘΕΩΡΗΤΙΚΗ ΑΣΚΗΣΗ 1 ΛΥΣΕΙΣ Ανάλυση Πολυπλοκότητας

Ουρές Προτεραιότητας: Υπενθύμιση. Σωροί / Αναδρομή / Ταξινόμηση. Υλοποίηση Σωρού. Σωρός (Εισαγωγή) Ορέστης Τελέλης

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

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

Ασυμπτωτικός Συμβολισμός

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

1o Φροντιστήριο ΗΥ240

Ουρά Προτεραιότητας: Heap

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

Ουρά Προτεραιότητας: Heap

Transcript:

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

Διαίρει-και-Βασίλευε Γενική μέθοδος σχεδιασμού αλγορίθμων: Διαίρεση σε ( 2) υποπροβλήματα (σημαντικά) μικρότερου μεγέθους. Ανεξάρτητη επίλυση υπο-προβλημάτων (αναδρομικά) (επίλυση μικρών υποπροβλημάτων: με στοιχειώδεις αλγόριθμους, συνήθως σταθερού χρόνου). Σύνθεση λύσης αρχικού προβλήματος από λύσεις υποπροβλημάτων. Ισχυρή μέθοδος, με πολλές σημαντικές εφαρμογές! Ταξινόμηση: MergeSort, QuickSort. Πολλαπλασιασμός αριθμών, πινάκων, FFT. «Εκλέπτυνση»: Δυαδική αναζήτηση, QuickSelect, ύψωση σε δύναμη. (Εύκολη) ανάλυση με αναδρομικές σχέσεις. Μη γραμμικές, συγκεκριμένης μορφής. Διαίρει-και-Βασίλευε 2

Πρόβλημα Ταξινόμησης Πρόβλημα Ταξινόμησης: Είσοδος : ακολουθία n αριθμών (α 1, α 2,..., α n ). Έξοδος : αναδιάταξη (α 1, α 2,..., α n ) με αριθμούς σε αύξουσα σειρά (i α i α i+1 ). Στατική συλλογή δεδομένων (όχι εισαγωγή και διαγραφή). Θεμελιώδες αλγοριθμικό πρόβλημα. Πολλές εφαρμογές (περ. 25% υπολογιστικού χρόνου). Ταχύτατη αναζήτηση σε ταξινομημένα δεδομένα. Σημαντικές αλγοριθμικές ιδέες και τεχνικές. Διαίρει-και-Βασίλευε 3

Μέθοδοι Ταξινόμησης Αντιμετάθεση διαδοχικών στοιχείων εκτός διάταξης (bubble sort). Εισαγωγή στοιχείου σε κατάλληλη θέση ταξινομημένου πίνακα (insertion sort). Επιλογή μεγαλύτερου στοιχείου και τοποθέτηση στο τέλος (selection sort, heapsort). Συγχώνευση ταξινομημένων πινάκων : Διαίρεση στη μέση, ταξινόμηση, συγχώνευση (mergesort). Διαίρεση σε μικρότερα και μεγαλύτερα από στοιχείο-διαχωρισμού και ταξινόμηση (quicksort). Διαίρει-και-Βασίλευε 4

Συγκριτικοί Αλγόριθμοι Ταξινόμηση αποκλειστικά με συγκρίσεις και αντιμεταθέσεις στοιχείων. Δεν εκμεταλλεύονται τύπο δεδομένων (π.χ. αριθμούς, συμβολοσειρές) : γενική εφαρμογή. Ανάλυση : πλήθος συγκρίσεων. πλήθος αντιμεταθέσεων. Κάτω φράγμα #συγκρίσεων : Ω(n log n). Ταξινόμηση (με αλγόριθμους που δεν είναι συγκριτικοί) σε χρόνο Θ( n ) για n φυσικούς αριθμούς με τιμές Ο( n ) (π.χ. counting sort, radix sort). Διαίρει-και-Βασίλευε 5

MergeSort MergeSort (ταξινόμηση με συγχώνευση): Διαίρεση ακολουθίας εισόδου (n στοιχεία) σε δύο υπο-ακολουθίες ίδιου μήκους (n / 2 στοιχεία). Ταξινόμηση υπο-ακολουθιών αναδρομικά. Συγχώνευση (merge) δύο ταξινομημένων υπο-ακολουθιών σε μία ταξινομημένη ακολουθία. mergesort(int A[], int left, int right) { if (left >= right) return; mid = (left + right) / 2; mergesort(a, left, mid); mergesort(a, mid+1, right); merge(a, left, mid, right); } Διαίρει-και-Βασίλευε 6

MergeSort 51 72 23 14 85 36 67 48 5 1 7 2 2 5 1 7 83 34 6 48 5 7 21 12 8 3 3 8 64 46 5 7 2 1 8 3 6 4 Διαίρει-και-Βασίλευε 7

Διαίρει-και-Βασίλευε 8 Συγχώνευση Συγχώνευση ταξινομημένων Α[left...mid] και A[mid+1...right] σε ταξινομημένο A[left...right]. 2 1 5 7 4 3 6 8 2 5 7 4 3 6 8 5 7 4 3 6 8 5 7 4 6 8 5 7 6 8 7 6 8 7 8 1 2 3 4 5 6 7 8

Συγχώνευση Συγχώνευση ταξινομημένων Α[low...mid] και A[mid+1...up] σε ταξινομημένο A[low...up]. X[up low+1] A[low...up]; // προσωρινή αποθήκευση i : 0 <= i <= xmid // δείκτης αριστερό τμήμα j : xmid+1 <= j <= xup // δείκτης δεξιό τμήμα k : low <= k <= up // δείκτης στο συγχωνευμένο πίνακα Χ[i] : μικρότερο διαθέσιμο στοιχείο στο αριστερό τμήμα. Χ[j] : μικρότερο διαθέσιμο στοιχείο στο δεξιό τμήμα. while ((i <= xmid) && (j <= xup)) if (X[i] <= X[j]) A[k++] = X[i++]; else A[k++] =X[j++]; Όταν ένα τμήμα εξαντληθεί, αντιγράφουμε όλα τα στοιχεία του άλλου στο Α[ ]. Διαίρει-και-Βασίλευε 9

Συγχώνευση merge(int A[], int low, int mid, int up) { int xmid = mid-low, xup = up low; int i = 0, // δείκτης στο αριστερό τμήμα j = xmid+1, // δείκτης στο δεξιό τμήμα k = low; // δείκτης στο αποτέλεσμα X[up low+1] A[low...up]; // συγχώνευση μέχρι ένα τμήμα να εξαντληθεί while ((i <= xmid) && (j <= xup)) if (X[i] <= X[j]) A[k++] = X[i++]; else A[k++] = X[j++]; // αντέγραψε υπόλοιπα στοιχεία άλλου τμήματος if (i > xmid) for (int q = j; q <= xup; q++) A[k++] = X[q]; else for (int q = i; q <= xmid; q++) A[k++] = X[q]; Διαίρει-και-Βασίλευε 10

MergeSort: Ορθότητα Ορθότητα merge επειδή τα τμήματα είναι ταξινομημένα. Όταν ένα στοιχείο μεταφέρεται στον Α[ ], δεν υπάρχει μικρότερο διαθέσιμο στοιχείο στα δύο τμήματα. Ορθότητα mergesort αποδεικνύεται επαγωγικά : Βάση (ένα στοιχείο) τετριμμένη. Δύο τμήματα σωστά ταξινομημένα (επαγωγική υποθ.) και συγχωνεύονται σωστά (ορθότητα merge) Σωστά ταξινομημένος πίνακας Α[ ]. mergesort(int A[], int left, int right) { if (left >= right) return; mid = (left + right) / 2; mergesort(a, left, mid); mergesort(a, mid+1, right); merge(a, left, mid, right); } Διαίρει-και-Βασίλευε 11

Χρόνος Εκτέλεσης Χρόνος εκτέλεσης merge (για n στοιχεία) : Θ(n) (γραμμικός) Θ(1) λειτουργίες για κάθε στοιχείο. Χρόνος εκτέλεσης αλγόριθμων «διαίρει-και-βασίλευε» με διατύπωση και λύση αναδρομικής εξίσωσης λειτουργίας. Τ(n) : χρόνος (χ.π.) για ταξινόμηση n στοιχείων. T(n / 2) : ταξινόμηση αριστερού τμήματος (n / 2 στοιχεία). T(n / 2) : ταξινόμηση δεξιού τμήματος (n / 2 στοιχεία). Θ(n) : συγχώνευση ταξινομημένων τμημάτων. T(n) = 2 T(n / 2) + Θ(n), T(1) = Θ(1) Χρόνος εκτέλεσης ΜergeSort: T(n) =??? Διαίρει-και-Βασίλευε 12

Δέντρο Αναδρομής T(n) = 2 T(n / 2) + Θ(n), Τ(1) = Θ(1) Δέντρο αναδρομής : Ύψος : Θ(log n) #κορυφών : Θ(n) Χρόνος merge / επίπεδο : Θ(n) Συνολικός χρόνος merge: Θ(n log n) Συν. χρόνος υπ/σμού φύλλων : Θ(n) Συν. χρόνος κλήσεων : log 2 n Θ(n) Συνολικός χρόνος : Θ(n log n) T(n / 2) cn/2 T(n) cn T(n / 2) cn/2 T(n / 4) T(n / 4) T(n / 4) T(n / 4) cn/4 cn/4 cn/4 cn/4. cn + cn + cn +. Θ(n log n) Διαίρει-και-Βασίλευε 13

Επίλυση T(n) = 3 T(n/2)+Θ(n) (βλ. πολλ/σμός Gauss-Karatsuba) Τ(n) cn Ύψος T(n/4) δένδρου T(n/2) T(n/4) T(n/2)........................................................... T(2).. T(n/4).... T(n/2)... 3 cn/2 9 cn/4. 3 (k-1) cn/2 (k-1).. χρόνος Merge = Θ(n log3 ) T(1) T(1).................. Συνολικά: Θ(n log3 ) Θ(3 k ) κόμβοι, χρόνος υπ/σμού Θ(3 k ) = Θ(3 logn ) = Θ(n log3 )

Γενίκευση: T(n) = a T(n/b)+Θ(n) Τ(n) cn Ύψος T(n/b 2 ) δένδρου T(1) T(n/b)...................................................... T(1).. a... T(n/b 2 ).. T(n/b)..... a............... T(n/b)....................... a cn/b a 2 cn/b 2. a (k-1) cn/b (k-1).. Συνολικά: χρόνος σύνθεσης Θ(n log b a ) = αν a>b Θ(n logn) αν a=b Θ(n) Θ(n log ba ), αν a<b a>b Θ(n logn), a=b Θ(n), a<b Θ(a k ) κόμβοι, χρόνος υπ/σμού Θ(a k ) = Θ(a log bn ) = Θ(n log ba )

Εξήγηση Χρόνος επίλυσης στοιχειωδών προβλήμάτων: Θ(n log ba ) #φύλλων δένδρου: Θ(a log bn ) = Θ(n log ba ) Χρόνος αναδρομικών κλήσεων: Θ(n log ba ) #εσωτ. κόμβων δένδρου: Θ(a log bn ) = Θ(n log ba ) (γιατί;) Χρόνος σύνθεσης υποπροβλημάτων ανά επίπεδο δένδρου γεωμετρική σειρά με λόγο a /b : Αύξουσα αν a>b, άθροισμα σειράς Θ(n log a b ) Σταθερή αν a=b, άθροισμα σειράς Θ(n logn) Φθίνουσα αν a<b, άθροισμα σειράς Θ(n) Πρώτος όρος σειράς Θ(n), τελευταίος Θ(n log ba ), άθροισμα σειράς καθορίζει συνολικό χρόνο Άθροισμα γεωμ. σειράς = Θ(μέγιστου όρου) ή...... #όρων x (πρώτο/τελευταίο) αν σταθερή Διαίρει-και-Βασίλευε 16

Master Theorem Ανάλυση χρόνου εκτέλεσης αλγορίθμων «διαίρει-και-βασίλευε» με αναδρομικές σχέσεις της μορφής όπου α, b σταθερές και f(n) θετική συνάρτηση. Επίλυση με Θεώρημα Κυρίαρχου Όρου (Master Theorem) Ασυμπτωτικά μεγαλύτερος από f(n) και καθορίζει λύση. Διαίρει-και-Βασίλευε 17

Απόδειξη (σκιαγράφηση) Εκλέπτυνση επιχειρημάτων περίπτωσης T(n) = a T(n/b)+Θ(n) Χρόνος επίλυσης στοιχειωδών προβλήμάτων και αναδρομικών κλήσεων: Θ(n log ba ) #κόμβων δένδρου: Θ(a logbn ) = Θ(n log ba ) κόστος υπολογισμού ή κλήσεων / κόμβο: Θ(1) Χρόνος σύνθεσης υποπροβλημάτων ανά επίπεδο δένδρου φράσσεται (άνω ή κάτω) από γεωμετρική σειρά: Αύξουσα αν f(n)= Ο(n log b a-ε ), άθροισμα σειράς Θ(n log a b ) Σταθερή αν f(n)= Θ(n log a b ), άθροισμα σειράς Θ(f(n) logn) Φθίνουσα αν f(n)= Ω(n log b a+ε ), άθροισμα σειράς Θ(f(n)) Πρώτος όρος σειράς f(n), τελευταίος Θ(n log ba ) «Κυρίαρχος» όρος καθορίζει συνολική χρονική πολυπλοκότητα Διαίρει-και-Βασίλευε 18

Master Theorem: ειδικές μορφές Όταν f(n) = Θ(n), δηλ. Αν με γ 1 + γ 2 < 1 ε, τότε Όταν f(n) = Θ(n d ), δηλ. Διαίρει-και-Βασίλευε 19

Παραδείγματα Τ(n) = 9 T(n / 3) + Θ(n) Τ(n) = T(2n / 3) + Θ(1) Τ(n) = 3 T(n / 4) + Θ(n log n) Τ(n) = 2 T(n / 2) + Θ(n) Τ(n) = 2 T(n / 2) + Θ(n log n) Δεν εμπίπτει! Με δέντρο αναδρομής βρίσκουμε ότι T(n) = Θ(n log 2 n). Διαίρει-και-Βασίλευε 20

Πολλαπλασιασμός Αριθμών Υπολογισμός αθροίσματος x + y, x και y αριθμοί n-bits. Κλασσικός αλγόριθμος πρόσθεσης, χρόνος Θ(n). Υπολογισμός γινομένου x y, x και y αριθμοί με n-bits. Κλασσικός αλγόριθμος πολ/μού, χρόνος Θ(n 2 ). Καλύτερος αλγόριθμος; Διαίρει-και-Βασίλευε: Διαίρεση: 4 πολλαπλασιασμοί (n / 2)-bits, 2 ολισθήσεις, 3 προσθέσεις. Χρόνος: Διαίρει-και-Βασίλευε 21

Αλγόριθμος Karatsuba (1960) Ιδέα Gauss-Karatsuba: z m υπολογίζεται με 1 μόνο πολ/μο (n / 2)-bits: 3 πολλαπλασιασμοί (n / 2)-bits, 2 ολισθήσεις, 6 προσθέσεις. Χρόνος: Παράδειγμα: 2576 7935 = 20440560 Διαίρει-και-Βασίλευε 22

Πολλαπλασιασμός Πινάκων Υπολογισμός γινομένου C = A B. A, B τετραγωνικοί πίνακες n n. Εφαρμογή ορισμού: Χρόνος Θ(n 3 ) (n 2 στοιχεία, χρόνος Θ(n) για καθένα). Διαίρει-και-Βασίλευε: 8 πολ/μοι και 4 προσθέσεις πινάκων Χρόνος: Διαίρει-και-Βασίλευε 23

Αλγόριθμος Strassen (1969) 7 πολ/μοι και 24 προσθέσεις πινάκων Χρόνος: Διαίρει-και-Βασίλευε 24

Ανταλλαγή κλειδιού [Diffie-Hellman, 1976] Μέθοδος ανταλλαγής κρυπτογραφικού κλειδιού μεταξύ Αλίκης και Βασίλη. Εύα παρακολουθεί για να το «κλέψει». Α, Β συμφωνούν δημόσια σε πρώτο p και γεννήτορα q < p. Ε γνωρίζει p, q. Εμπλεκόμενοι αριθμοί είναι πολυψήφιοι (π.χ. 512 ψηφία). Α διαλέγει τυχαία και υπολογίζει Β διαλέγει τυχαία και υπολογίζει Α, Β ανταλλάσσουν q α, q b και τα μαθαίνει Ε. Α, B υπολογίζουν Κ (ιδιωτικά). Ε δεν ξέρει Κ. Για Κ, Ε χρειάζεται α, b (δεν μεταδόθηκαν). Επίλυση διακριτού λογαρίθμου ή DHP (δύσκολο). Διαίρει-και-Βασίλευε 25

Υπολογισμός Δύναμης Εφαρμογή υποθέτει αποδοτικό αλγόριθμο υπολογισμού, x, n, p πολυψήφιοι ακέραιοι. Υπολογισμός δυνάμεων με τη σειρά (1, 2, 3, ): για μήκος 512 bits, χρειάζεται περίπου 2 512 πολ/μους!!! Διαίρει-και-Βασίλευε (έστω n δύναμη του 2): Υπολογίζουμε αναδρομικά και #πολλαπλασιασμών: p με μήκος 512 bits: περίπου 2 10 πολ/μους. Διαίρει-και-Βασίλευε 26

Προϋποθέσεις Εφαρμογής Διαίρεση υπολογιστικά εύκολη. Σύνθεση σημαντικά ευκολότερη από επίλυση αρχικού. Υπο-στιγμιότυπα σημαντικά μικρότερα από αρχικό (π.χ. αρχικό μέγεθος n, υπο-στιγμ. μεγέθους n / c, c > 1). Ανεξάρτητα υπο-στιγμιότυπα που λύνονται από ανεξάρτητες αναδρομικές κλήσεις. Ίδια ή επικαλυπτόμενα υπο-στιγμιότυπα : σημαντική και αδικαιολόγητη αύξηση χρόνου εκτέλεσης. Επικαλυπτόμενα υπο-στιγμιότυπα : Δυναμικός Προγραμματισμός (ή και Greedy σε λίγες "καλές" περιπτώσεις) Διαίρει-και-Βασίλευε 27

(Αντι)παράδειγμα Υπολογισμός n-οστού όρου ακολουθίας Fibonacci. Χρόνος εκτέλεσης: long fibrec(long n) { if (n <= 1) return(n); return(fibrec(n-1) + fibrec(n-2)); } Λύση: Επικαλυπτόμενα στιγμ.: Εκθετικός χρόνος! Αλγόριθμος γραμμικού χρόνου; Καλύτερος αλγόριθμος; long fib(long n) { long cur = 1, prev = 0; for (i = 2; i <= n; i++) { cur = cur + prev; prev = cur prev; } return(cur); } Διαίρει-και-Βασίλευε 28

Ακολουθία Fibonacci Ακολουθία Fibonacci: Θεωρούμε πίνακα και Παρατηρούμε ότι Με επαγωγή αποδεικνύουμε ότι Διαίρει-και-Βασίλευε: Υπολογισμός σε χρόνο Ο(log n) (όπως με αριθμούς). Υπολογίζω αναδρομικά το και Χρόνος: Διαίρει-και-Βασίλευε 29

Ακολουθία Fibonacci Ακολουθία Fibonacci: Είναι ο αλγόριθμος του πίνακα αποδοτικός; Μέχρι ποιον αριθμό Fibonacci μπορούμε να υπολογίσουμε; Μπορούμε να υπολογίσουμε τον 10 100 -οστό όρο; Τελικά ανήκει το πρόβλημα Fibonacci στην κλάση P; Το πρόβλημα FibonacciMod; Δίνονται φυσικοί n,p, να υπολογιστεί F n mod p Διαίρει-και-Βασίλευε 30

Συνοψίζοντας Divide-and-Conquer: μια ισχυρή και εύχρηστη μέθοδος σχεδιασμού αλγορίθμων. Μεγάλο πλήθος εφαρμογών. Συνήθως αναδρομική υλοποίηση, αλλά όχι απαραίτητα! Εύκολη ανάλυση με Master Theorem, αλλά όχι πάντα! Προσοχή στην ανεξαρτησία υπο-στιγμιοτύπων, στο μέγεθος και στο πλήθος τους! Διαίρει-και-Βασίλευε 31