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

Σχετικά έγγραφα
ΑΛΓΟΡΙΘΜΟΙ. Ενότητα 4: Διαίρει και Βασίλευε. Ιωάννης Μανωλόπουλος, Καθηγητής Αναστάσιος Γούναρης, Επίκουρος Καθηγητής Τμήμα Πληροφορικής ΑΠΘ

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

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

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

Αλγόριθµοι Τύπου Μείωσης Προβλήµατος

Αλγόριθµοι Brute-Force και Διεξοδική Αναζήτηση

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Discrete Fourier Transforms

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

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

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

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

Κεφάλαιο 4. Διαίρει και Βασίλευε (Divide and Conquer) Χρησιµοποιήθηκε υλικό από τις αγγλικές διαφάνειες του Kevin Wayne.

Διδάσκων: Κωνσταντίνος Κώστα

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

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

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

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

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

ΑΛΓΟΡΙΘΜΟΙ ΜΕ C. ΝΙΚΟΛΑΟΣ ΣΑΜΑΡΑΣ Αναπληρωτής Καθηγητής. CMOR Lab. Computational Methodologies and Operations Research

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

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

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

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

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

Ν!=1*2*3* *(N-1) * N => N! = (Ν-1)! * N έτσι 55! = 54! * 55

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

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

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

Δηµοσθένης Σταµάτης Τµήµα Πληροφορικής ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΔΕΝΤΡΑ (TREES) B C D E F G H I J K L M

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

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

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

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

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

Δένδρα. Μαθηματικά (συνδυαστικά) αντικείμενα. Έχουν κεντρικό ρόλο στην επιστήμη των υπολογιστών :

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

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

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

ΔΥΑΔΙΚΗ ΑΝΑΖΗΤΗΣΗ & ΤΑΞΙΝΟΜΗΣΗ ΜΕ ΣΥΓΧΩΝΕΥΣΗ

Ν. Μ. Μισυρλής. Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών. Καθηγητής: Ν. Μ. Μισυρλής 29 Μαΐου / 18

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

Αλγοριθμικές Τεχνικές

Κεφάλαιο 4. Διαίρει και Βασίλευε (Divide and Conquer) Παύλος Εφραιμίδης V1.1,

Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα:

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

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

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

ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 2-1

Ο αλγόριθμος Quick-Sort. 6/14/2007 3:42 AM Quick-Sort 1

ιαφάνειες παρουσίασης #10 (β)

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

Άπληστοι Αλγόριθµοι (CLR, κεφάλαιο 17)

Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα:

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

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

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

Δυναµικός Προγραµµατισµός (ΔΠ)

ΗΜΥ 325: Επαναληπτικές Μέθοδοι. Διδάσκων: Χρίστος Παναγιώτου

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 1 η

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

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

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

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

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

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

Heapsort Using Multiple Heaps

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

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

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων

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

Αλγόριθμοι και πολυπλοκότητα Συγχωνευτική Ταξινόμηση

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

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

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

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

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

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

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

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

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

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

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

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

Παράλληλοι Αλγόριθμοι: Ανάλυση Εικόνας και Υπολογιστική Γεωμετρία. Πέτρος Ποτίκας CoReLab 4/5/2006

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

Transcript:

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

Περίληψη Αλγόριθµοι Divide-and-Conquer Master Theorem Παραδείγµατα Αναζήτηση Ταξινόµηση Πλησιέστερα σηµεία Convex Hull

Αλγόριθµοι Divide-and-Conquer Γενική Μεθοδολογία Το πρόβληµα διαιρείται (divide) σε δύο ή περισσότερα υπο-προβλήµατα Είναι προτιµότερο τα υπο-προβλήµατα να έχουν περίπου το ίδιο µέγεθος Το κάθε υπο-πρόβληµα λύνεται ξεχωριστά (conquer) Πολλές φορές το πρόβληµα λύνεται αναδροµικά (recursively) Ειδικές λύσεις µπορεί να δοθούν για πολύ µικρά προβλήµατα Εάν χρειάζεται, οι λύσεις των υπο-προβληµάτων συνδυάζονται για να βρεθεί η λύση στο αρχικό πρόβληµα (conquer)

Προβλήµατα Αναζήτησης Είσοδος: Λίστα A[0,,n-1], Κλειδί Κ Έξοδος: Η θέση του κλειδιού στη λίστα (εάν υπάρχει) Srch(A[k l], K) if(k = l) if A[k]= K return k; else return -1; m=floor ((l+k)/2); return max(srch(a[k m],k), Srch(A[m+1 l],k)); Είναι ο Srch() καλύτερος από τον Brute-Force Search(); Divide-and-conquer δεν εγγυάται πιο αποδοτικούς αλγόριθµους!

Αναδροµική Σχέση Αλγορίθµων Divideand-Conquer Ένα πρόβληµα µεγέθους n διαιρείται σε b>1 υποπροβλήµατα µεγέθους n/b. Από τα b >1 υπο-προβλήµατα τα a > 0 θα πρέπει να λυθούν. Για τη διαίρεση (και επανασύνδεση) ενός προβλήµατος n σε b υπο-προβλήµατα χρειάζεται χρόνος f(n) Η αναδροµική σχέση για το χρόνο που χρειάζεται για την ολοκλήρωση του αλγορίθµου T(n) δίνεται από

Master Theorem Δεδοµένης της αναδροµικής σχέσης Εάν ισχύει f(n) Θ(n d ), όπου d 0, τότε

Προβλήµατα Αναζήτησης Srch(A[k l], K) if(k = l) if A[k]= K return k; else return -1; m=floor ((l+k)/2); return max(srch(a[k m],k), Srch(A[m+1 l],k)); Το πρόβληµα διαιρείται σε b=2 υπο-προβλήµατα. Θα πρέπει να λυθούν και τα δύο υπο-προβλήµατα a = 2. Ο χρόνος διαίρεσης είναι σταθερός f(n)= c.

Προβλήµατα Ταξινόµησης Είσοδος: Λίστα A[0,,n-1] Έξοδος: Ταξινοµηµένη λίστα A[0,,n-1] mergesort(a[0,,n-1]) if n=1 return; m= floor(n/2)-1; B[]= A[0,,m]; C[]= A[m+1,,n-1]; mergesort(b); mergesort(c); merge(b,c,a);

Merge: Επανασύνδεση δύο ταξινοµηµένων λιστών Πώς επανασυνδέουµε δύο ταξινοµηµένες λίστες έτσι που η λίστα που θα προκύψει να παραµείνει ταξινοµηµένη merge(b[0 p-1],c[0 q-1],a[]) i=0; j=0; k=0; while i<p and j<q if B[i] <= C[j] A[k]= B[i]; i= i+1; else A[k]= C[j]; j= j+1; k=k+1; if i=p copy C[j,,q-1] to A[k,,p+q-1]; else copy B[i,p-1] to A[k,,p+q-1];

Απόδοση της Merge() και MergeSort() merge(b[0 p-1],c[0 q-1],a[]) i=0; j=0; k=0; while i<p and j<q if B[i] <= C[j] A[k]= B[i]; i= i+1; else A[k]= C[j]; j= j+1; k=k+1; if i=p copy C[j,,q-1] to A[k,,p+q-1]; else copy B[I,p-1] to A[k,,p+q-1];

Παράδειγµα MergeSort() mergesort(a[0,,n-1]) m= floor(n/2)-1; B[]= A[0,,m]; C[]= A[m+1,,n-1]; mergesort(b); mergesort(c); merge(b,c,a);

QuickSort() Ακόµα ένα παράδειγµα αλγόριθµου ταξινόµησης µιας λίστας που είναι βασισµένος σε divide-and-conquer Βασική Ιδέα: Για κάθε στοιχείο της λίστας προσπαθούµε να βρούµε σε πιο ακριβώς σηµείο της λίστας θα πρέπει να τοποθετηθεί A[i]<p p A[i]>p

Προβλήµατα Αναζήτησης σε Ταξινοµηµένη Λίστα Είσοδος: Ταξινοµηµένη Λίστα A[0,,n-1], Κλειδί Κ Έξοδος: Η θέση του κλειδιού στη λίστα (εάν υπάρχει) Α[0] A[n/2] A[n-1] Η διαδικασία αυτή συνεχίζεται µε το ίδιο τρόπο για τη πιο µικρή λίστα.

Προβλήµατα Αναζήτησης σε Ταξινοµηµένη Λίστα Είσοδος: Ταξινοµηµένη Λίστα A[0,,n-1], Κλειδί Κ Έξοδος: Η θέση του κλειδιού στη λίστα (εάν υπάρχει) BinSearch(A[],b,e,K) m= floor((e+b)/2); if A[m]=K return m; if A[m] > K return BinSearch(A, b, m-1, K); return BinSearch(A, m+1, e, K); Είναι ορθός ο πιο πάνω αλγόριθµος ή υπάρχουν περιπτώσεις στις οποίες αποτυγχάνει; Αποτυγχάνει όταν το Κ δεν είναι στη λίστα!

Απόδοση Αλγορίθµου BinSearch(A[],b,e,K) m= floor((e+b)/2); if A[m]=K return m; if A[m] > K return BinSearch(A, b, m-1, K); return BinSearch(A, m+1, e, K); Αριθµός συγκρίσεων

Προβλήµατα «Εξερεύνησης» Δυαδικών Δέντρων (Tree Traversal) Σε ένα δυαδικό δέντρο, ένας κόµβος µπορεί να θεωρηθεί σαν µια ρίζα τα παιδία της οποίας αποτελούν δύο ανεξάρτητα δέντρα. T L T R Για την καλύτερη «οργάνωση» της εξερεύνησης, κάποιος µπορεί να εξερευνήσει πρώτα το ένα από το υπο-δέντρα και στην συνέχεια το άλλο Τρεις τρόποι εξερεύνησης: preorder, inorder, postorder

Πολλαπλασιασµός Ακεραίων Αριθµών Πολλαπλασιάστε δύο διψήφιους αριθµούς Α=ab, D=cd A*D=; Εάν n είναι ο αριθµός ψηφίων του κάθε αριθµού, τότε χρειαζόµαστε n 2 πολλαπλασιασµούς! Μπορείτε να βρείτε πιο αποδοτικό αλγόριθµο;

Πολλαπλασιασµός Ακεραίων Αριθµών Πολλαπλασιάστε δύο αριθµούς µε n ψηφία ο καθένας (υποθέστε πως το n είναι ζυγό). Η πιο πάνω σχέση µπορεί να χρησιµοποιηθεί αναδροµικά έτσι ώστε να υπολογιστεί το γινόµενο δύο µεγάλων αριθµών πιο αποδοτικά. Ένας τέτοιος αλγόριθµος µπορεί να είναι πολύ χρήσιµος στην κρυπτογραφία Πολλαπλασιασµός µεγάλων «κλειδιών» Παρόµοιος αλγόριθµος ισχύει και στην περίπτωση πολλαπλασιασµού πινάκων

Πολλαπλασιασµός Ακεραίων Είσοδος: Οι αριθµοί A[0,,n-1], και B[0,,n-1] Έξοδος: A*B multiply(a[],b[])%n is a power of 2 n=sizeof(a[]); m= n/2; if(n=1) return A[0]*B[0]; Al= A[0 m]; Ah=A[m+1 s]; Bl= B[0 m]; Bh=B[m+1 s]; AA= multiply(ah, Bh); BB= multiply(al, Bl); CC= multiply(al+ah, Bl+Bh)-AA BB; return AA*(10^n)+ CC*(10^n/2) +BB;

Πρόβληµα εύρεσης των δύο πλησιέστερων σηµείων Δεδοµένης µιας λίστας µε n σηµεία {P 0,,P n-1 } βρείτε ποια δύο σηµεία έχουν την µικρότερη απόσταση. Υποθέστε πως η λίστα {P 0,,P n-1 } είναι ταξινοµηµένη µε βάση τη συντεταγµένη x. Χωρίστε τα σηµεία σε δύο «µισές» λίστες Λύστε τα δύο υπο-προβλήµατα «Συνδυάστε» τα δύο αποτελέσµατα

Πρόβληµα εύρεσης των δύο πλησιέστερων σηµείων Επανασύνδεση των αποτελεσµάτων P Απόδοση Αλγορίθµου: Για κάθε σηµείο που βρίσκεται στα αριστερά της διαχωριστικής γραµµής x=c πρέπει να ελέγξουµε εάν υπάρχει σηµείο σε απόσταση µικρότερη από d. Πόσα τέτοια σηµεία µπορεί να υπάρχουν; Πως αλλάζει η απόδοση εάν η λίστα δεν είναι ταξινοµηµένη;

Πρόβληµα Εύρεσης Convex Hull Δεδοµένης µιας λίστας µε n σηµεία {P 1,,P n } βρείτε το µικρότερο κυρτό χώρο που εµπερικλείει όλα τα σηµεία {P 1,,P n } (convex hull). Θεωρείστε πως τα σηµεία είναι ταξινοµηµένα µε βάση τη συντεταγµένη x. Τα σηµεία P 1 και P n είναι κορυφές του convex hull! Το P max είναι επίσης σηµείο του convex hull. Τα σηµεία µέσα στο τρίγωνο P 1 P n P max δεν είναι κορυφές του convex hull. Τα σηµεία αυτά είναι δεξιά της P 1 P max και δεξιά της P max P n!

Πρόβληµα Εύρεσης Convex Hull Ποιο σηµείο είναι πιο µακριά από την ευθεία P 1 P n ; Ποια σηµεία είναι αριστερά ή δεξιά µιας ευθείας; Μπορούµε σε σταθερό χρόνο O(1) να βρούµε την απόσταση ενός σηµείου από την ευθεία και να ελέγξουµε και τη µεριά στην οποία βρίσκεται! Το πρόσηµο της ορίζουσας είναι θετικό µόνο εάν το σηµείο P 3 είναι στα αριστερά της ευθείας P 1 P 2 ;