Αλγόριθμοι Επανάληψη για πρόοδο Προτεινόμενη βιβλιογραφία: S. Dasgupta, C.H. Papadimitriou, ad U.V. Vazirai «Αλγόριθμοι» Κλειδάριθμος 2009 Κεφάλαια 0,3,4,5. http://www.cs.berkeley.edu/~vazirai/algorithms/chap0.pdf / i/ l ith / h df http://www.cs.berkeley.edu/~vazirai/algorithms/chap3.pdf http://www.cs.berkeley.edu/~vazirai/algorithms/chap4.pdf http://www.cs.berkeley.edu/~vazirai/algorithms/chap5.pdf ] epl333 2011 διάλεξη 10 1 είτε στο e-class Ύλη προόδων και τελικών εξετάσεων Επιτρέπεται σκονάκι στην πρόοδο Αύριο ώρα 5-7, Αίθουσες: A, X, οικ, 11, 21, 22,, A31 Προτεινόμενη βιβλιογραφία: S. Dasgupta, C.H. Papadimitriou, ad U.V. Vazirai «Αλγόριθμοι» Κλειδάριθμος 2009 Κεφάλαια 2 0,3,4,5.(sectio 5.1). 1
Ύλη έως τώρα Ασυμπτωτικό συμβολισμό Αλγόριθμους γραφημάτων: π.χ. ίδεται γράφημα (με κατεύθυνση) είναι ο κόμβος y προσιτός από τον x? έχει κύκλο? βρες τις ισχυρά συνεκτικές συνιστώσες. Αλγόριθμους βελτιστοποίησης : π.χ. ίδεται γράφημα με βάρη ποιο είναι το μικρότερο μονοπάτι από τον x προς όλους τους κόμβους? epl333 2011 διάλεξη 10 3 Ο ασυμπτωτικός συμβολισμός είναι τρόπος να συγκρίνουμε (..χοντροειδώς) συναρτήσεις για να δούμε ποία έχει μεγαλύτερες τιμές. Τι χρειάζεται? Ο χρόνος (υπολογιστικά βήματα) αλγορίθμου είναι συνάρτηση του μήκους της εισόδου. Αν υπολογίσουμε τα βήματα ενός αλγορίθμου είναι πολύπλοκη συνάρτηση, χρειάζεται να την συγκρίνουμε με μια πιο απλή. epl333 2011 διάλεξη 10 4 2
Τα ελάχιστα που πρέπει να θυμάστε είναι: 1. Για να δούμε πόσο γρήγορος είναι ένας αλγόριθμος: Μετράμε βήματα Παραλείπουμε σταθερές Από τα πολυώνυμα κρατάμε τον όρο με το μεγαλύτερο βαθμό 2. Οι κύριες ομάδες αλγορίθμων είναι: a ( ), 1 2 log... a πολυωνυμικοί, γρήγοροι ( a ): a 1 εκθετικοί 3. Ιεραρχία συναρτήσεων epl333 2011 διάλεξη 10 5 Σχέση μεταξύ, O, epl333 2011 διάλεξη 10 6 3
Μερικοί ακόμα κανόνες, που χρησιμεύουν συχνά: Κάθε λογάριθμος αυξάνεται αργότερα ρ από κάθε πολυώνυμο ανεξάρτητα βάσης και εκθέτη x b 0, x 0: log O( ) Εκθέτες μικρότεροι θετικοί μικρότεροι από 1 b Γιατί? epl333 2011 διάλεξη 10 7 Μερικοί ακόμα κανόνες, που χρησιμεύουν συχνά: Κάθε εκθετική συνάρτηση αυξάνεται γρηγορότερα από κάθε πολυωνυμική, ανεξάρτητα εκθέτη και βάσης d r 1, d 0 : O( r ) epl333 2011 διάλεξη 10 8 4
Μερικοί ακόμα κανόνες, που χρησιμεύουν συχνά: Όσο μεγαλύτερη είναι η βάση της εκθετικής συνάρτησης, τόσο γρηγορότερα αυξάνεται r s 1: s O ( r ) s ( r ) epl333 2011 διάλεξη 10 9 2 ( ) 2! Προσέγγιση Stirlig 1! 2 ( ) (1 ( )) e epl333 2011 διάλεξη 10 10 5
Σχετικά ερωτήματα από παλιά θέματα: Σωστή Λάθος Σύντομη αιτιολογία a b ( ) ( ab ) : a, b Θετικές ακέραιες σταθερές! O( ) log O( log ) 1 2 2 2 (2 ) O epl333 2011 διάλεξη 10 11 Στο μάθημα των Αλγορίθμων μάθατε(???): Αλγόριθμους γραφημάτων: π.χ. ίδεται γράφημα (με κατεύθυνση) είναι ο κόμβος y προσιτός από τον x? έχει κύκλο? βρες τις ισχυρά συνεκτικές συνιστώσες. epl333 2011 διάλεξη 10 12 6
DFS Tree edges (δενδρικές ακμές, ακμές δένδρου) Back edges (ανιούσες ακμές) Forward edges (κατιούσες ακμές) Cross edges (εγκάρσιες ακμές) epl333 2011 διάλεξη 10 13 Σχετικά ερωτήματα από παλιά θέματα: Κατά την αναζήτηση σε βάθος (Depth First Search) ενός γραφήματος με κατεύθυνση είναι δυνατόν να έχουμε μια ακμή (u,v) μεταξύ δύο κόμβων u και v τέτοια που pre(u )=5, post( u )=10, pre( v )=15, post( v )=20. Σωστή Λάθος Αιτιολογία epl333 2011 διάλεξη 10 14 7
Έλεγχος κύκλων και γραφήματα δίχως κύκλους Ενα γράφημα έχει κύκλο αν και μόνο αν κατα την εξερεύνηση σε βάθος βρεθούν ανιούσες ακμές (back)?? Αν: εύκολο Μόνο αν: έστω ότι υπάρχει κύκλος, v ο κόμβος του κύκλου με το μικρότερο post. Υπάρχει (v, u) και post(v)<post(u). Αρα (v, u) back. Τα γραφήματα με κατεύθυνση που δεν έχουν κύκλους λέγονται DAGs: Directed Acyclic Graphs epl333 2011 διάλεξη 10 15 Ναι! 1 2 Έχει κύκλο??? 3 4 5 epl333 2011 διάλεξη 10 16 8
Αλγόριθμος τοπολογικής ταξινόμησης Αν κατά την εκτέλεση του DFS δεν παρουσιαστούν ανιούσες ακμές (Back), τοπολογική ταξινόμηση είναι η σειρά των κόμβων κατά φθίνουσα σειρά αριθμού post. epl333 2011 διάλεξη 10 17 Αποσύνθεση γραφημάτων ίχως κατεύθυνση: Συνεκτικές συνιστώσες Με κατεύθυνση : Ισχυρά συνεκτικές συνιστώσες epl333 2011 διάλεξη 10 18 9
Strolgy coected compoets(g=(v, E): graph) 1. Υπολόγισε το ανάστροφο γράφημα G T. (Tο G T περιλαμβάνει την ακμή (u, v) ανν το G περιλαμβάνει την (v, u)) 2. Κάνε DFS στο G T 3. ιάταξε τους κόμβους του G κατά φθίνουσα σειρά post από το βήμα 2. 4. Κάνε DFS στο G. Οι κόμβοι εξετάζονται με τη σειρά, ηοποία καθορίστηκε στο βήμα 3. Κάθε φορά που καλείται η explore() από το DFS γράψε: «νέα ισχυρά συνεκτική συνιστώσα». Κάθε φορά που καλείται η previsit για κάποιο κόμβο v γράψε: «κόμβος» v. epl333 2011 διάλεξη 10 19 Αλγόριθμος για ισχυρά συνεκτικές συνιστώσες: απόδειξη ορθότητας Κάθε DAG έχει τουλάχιστον μια καταβόθρα (sik). Αν η explore() κληθεί για οποιοδήποτε κόμβο μιας ισχυρά συνεκτικής συνιστώσας που είναι καταβόθρα, θα εξερευνήσει αναδρομικά όλους τους κόμβους της συνιστώσας και θα επιστρέψει. 1 procedure explore(v: vertex) 2 {previsit(v); 3 for each edge (v, w) out of v do 4 {if ot visited(w) the explore(w);} 5 postvisit(v);} epl333 2011 διάλεξη 10 20 10
Σχετικά ερωτήματα από παλιά θέματα: Μετά την εκτέλεση του DFS, ο κόμβος με το μικρότερο αριθμό post (ο κόμβος δηλαδή που βγήκε πρώτος από τη στοίβα) ανήκει αναγκαστικά σε συνεκτική συνιστώσα που είναι καταβόθρα (sik). Σωστή Λάθος!! Αιτιολογία epl333 2011 διάλεξη 10 21 A,B,D, E C,F K G,H,I,J L epl333 2011 διάλεξη 10 22 11
algorithm Dijkstra(G=(V, E) γράφημα με θετικά βάρη, s: κόμβος) {H: ουρά προτεραιότητας με κλειδί το πεδίο dist; for each v i V do {dist(v) = ; prev(v) = il;} dist(s)=0; H= makequeue(v); φορές isert while H oempty do {v=deletemi(h); φορές deletemi for each edge (v, w) out of v do if dist(w) > dist(v) + legth(v, w) the {dist(w) = dist(v) + legth(v, w); prev(w) = v; decreasekey(w, H);} e φορές decreasekey } } isert deletemi e decreasekey ( e) isert deletemi epl333 2011 διάλεξη 10 23 Πολυπλοκότητα αλγορίθμου Dijkstra.deletemi()+(e+).isert(), όπου = V, e= E Υλοποίηση heap deletemi isert.deletemi + (e+).isert συνδ. λίστα, πίνακας O() 1 O( 2 ) σωρός: biary heap O(log) O(log) O((e+).log) d-αδική heap O(dlog/logd) O(log/logd) O((d+e).(log/logd)) O((d+e)(log/logd)) Fiboacci heap O(log) O(1) O(log +e) epl333 2011 διάλεξη 10 24 12
Πολυπλοκότητα αλγορίθμου Dijkstra.deletemi()+(e+).isert(), όπου = V, e= E Υλοποίηση heap deletemi isert.deletemi + (e+v).isert d-αδική heap O(dlog/logd) O(log/logd) O((d+e).(log/logd)) (log/logd)) Έστω ότι παίρνουμε τη μέση πυκνότητα d=e/ του γραφήματος και δίνουμε τιμή στο d. Έχουμε τα καλύτερα αποτελέσματα!! 2 Για πυκνά γραφήματα: Για αραιά γραφήματα log Για ενδιάμεσα γραφήματα e epl333 2011 διάλεξη 10 25 Σχετικά ερωτήματα από παλιά θέματα: Έστω ότι T είναι το δένδρο ελάχιστων μονοπατιών που υπολογίζει ο αλγόριθμος Dijkstra. Αν προσθέσουμε τη σταθερά c > 0 σε κάθε ακμή του γραφήματος, το T εξακολουθεί να είναι το δένδρο ελάχιστων μονοπατιών του τροποποιημένου γραφήματος. Σωστή Λάθος Αιτιολογία Ο αλγόριθμος Dijktra μπορεί να εφαρμοστεί και σε γραφήματα, στα οποία μερικές ακμές έχουν αρνητικά βάρη. Σωστή Λάθος Αιτιολογία epl333 2011 διάλεξη 10 26 13
Ελάχιστα μονοπάτια από ένα κόμβο σε γραφήματα με θετικά ή αρνητικά βάρη στις ακμές procedure update((v, w): edge) {if dist(w) > dist(v) + legth(v, w) the {dist(w) = dist(v) + legth(v, w); prev(w) = v;} } Update (v, w), Relax (v, w, weight), Χαλάρωση (v, w, weight) epl333 2011 διάλεξη 10 27 Αλγόριθμος Bellma-Ford Είσοδος : Graph(V,E), κόμβος s {for each v i V do {dist(v) = if ; prev(v) = il;} dist(s)= 0; for i=1 to V -1 1 do } for each edge (v, w) i E do update(v, w); epl333 2011 διάλεξη 10 28 14
Άπληστοι (κοντόφθαλμοι) αλγόριθμοι Greedy Εργάζονται σε στάδια και σε κάθε στάδιο κάνουν την επιλογή που φαίνεται καλύτερη εκείνη τη στιγμή. Με άπληστες τοπικές επιλογές φτάνουν σε σφαιρικά βέλτιστη λύση. epl333 2011 διάλεξη 10 29 Είναι ορθός ο αλγόριθμος Kruskal? Βρίσκει πάντα το ελάχιστο δενδρο? Γιατί? Για ΤΟΝ Ι ΙΟ ΛΟΓΟ που είναι ορθοί όλοι oι αλγόριθμοι συνδετικών δένδρων που...θα πούμε! Επειδή όλοι εφαρμόζουν..με μικρές παραλλαγές το θεώρημα της τομής epl333 2011 διάλεξη 10 30 15
Ιδιότητα της τομής (Cut Property) C ένδρο ημιτελές! Αποτελείται από 9 κομμάτια... ιαλέγω ένα κομμάτι, έστω το C Βρίσκω τη μικρότερη ακμή e στην τομή C, V-C Η e ανήκει σίγουρα στο ελάχιστο συνδετικό δένδρο. epl333 2011 διάλεξη 10 31 Γενικός αλγόριθμος Algorithm mi spaig tree(g=(v (V, E): γράφημα με βάρη) {/* Χ οι ακμές του δένδρου που κατασκευάζουμε*/; Χ: σύνολο ακμών αρχικά κενό repeat *** {διάλεξε μια συνεκτική συνιστώσα S του (V, X); έστω [u, v] η ακμή με το μικρότερο βάρος που συνδέει το S με το V-S; πρόσθεσε την [u, v] στο Χ;} util X = V -1; } epl333 2011 διάλεξη 10 32 16
Ποια συνεκτική συνιστώσα διαλέγουμε για να προσθέσουμε την επόμενη ακμή στο δένδρο που κατασκευάζουμε. Ποιο κομμάτι του ημιτελούς δένδρου? Αλγόριθμος Prim αρχίζει από τον κόμβο που παίρνει ως παράμετρο...και συνεχώς επεκτείνει την ίδια συνιστώσα. Αλγόριθμος Kruskal...δεν παίρνει ως παράμετρο τον κόμβο αρχή.. διαλέγει αυτόν από τον οποίο φεύγει η μικρότερη ακμή epl333 2011 διάλεξη 10 33 [0] 3 e [3] [ ] Prim s ru d [12] [3] [ ] b 12 4 3 a 7 1 f c [ ] [4] [1] [ ] [2] [7] 10 2 4 1 [ ] [1] Total cost 10 epl333 2011 διάλεξη 10 34 17
Υλοποίηση heap συνδ. λίστα, πίνακας deletemi isert. deletemi + e.isert O() O(1) O( 2 ) σωρός: O(log) O(log) O(e.log) biary heap d-αδική heap d=e/, πυκνά: 2, αραιά: log, ενδιάμεσα (e= 1+δ δ ): e O(dlog/logd) O(log/logd) O(d+e). (log/logd) Fiboacci heap O(log) O(1) O(log +e) epl333 2011 διάλεξη 10 35 Κλασσικό παράδειγμα άπληστου (κοντόφθαλμου) αλγορίθμου Kruskal s ru b 12 4 3 a 7 1 f 3 10 2 e 4 1 d c Total cost 10 epl333 2011 διάλεξη 10 36 18
Πολυπλοκότητα αλγορίθμου Kruskal Kruskal: O(e.log + e.find +.UNION), όπου = V και e= E Worst case FIND: O(log ) Η UNION εξαρτάται μόνο από τη FIND (επειδή το LINK απαιτεί σταθερό αριθμό βημάτων) ) Άρα ο Kruskal: Oe ( log ) epl333 lect9 2011 37 Αλγόριθμος Kruskal για ελαφρύτατα συνδετικά δένδρα. Είναι ένας απλός άπληστος (greedy) αλγόριθμος Χρησιμοποιεί μια δομή UNION FIND για να ελέγχει αν κάποια ακμή μπορεί να προστεθεί στο δένδρο (αν δεν κάνει κύκλο). Η πολυπλοκότητα του Κruskal εξαρτάται από την υλοποίηση της δομής ως εξής O(e log + e. FIND +. UNION), Είδαμε διάφορα ενδιαφέροντα κόλπα στην υλοποίηση της δομής που τελικά κάνουν τον Kruskal O( elog elog * ) Sortig ακμών Υπόλοιπη δουλειά epl333 lect9 2011 38 19
Στη δομή Uio-Fid όταν χρησιμοποιoούται και οι δύο ευριστικοί κανόνες Συμπίεση Μονοπατιού (path compressio) και Ένωση ανάλογα με το Βαθμό (uio by rak) όλες οι λειτουργίες έχουν στη χειρότερη περίπτωση χρόνο O(log*). Σωστή Λάθος Αιτιολογία Στη δομή Uio-Fid όταν δεν χρησιμοποιείται ο ευριστικός κανόνας Συμπίεση Μονοπατιού (path compressio) --αλλά χρησιμοποιείται ο κανόνας Ένωση ανάλογα με το Βαθμό (uio by rak) όλες οι λειτουργίες έχουν στη χειρότερη περίπτωση χρόνο O(log ). Σωστή Λάθος epl333 2011 διάλεξη 10 39 20