n - E-class

Αλγόριθμοι
Επανάληψη για πρόοδο
Προτεινόμενη βιβλιογραφία:
S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani
«Αλγόριθμοι» Κλειδάριθμος 2009 Κεφάλαια 0,3,4,5.
http://www.cs.berkeley.edu/~vazirani/algorithms/chap0.pdf
htt
//
b k l
d /
i
i/ l
ith / h 0 df
http://www.cs.berkeley.edu/~vazirani/algorithms/chap3.pdf
http://www.cs.berkeley.edu/~vazirani/algorithms/chap4.pdf
http://www.cs.berkeley.edu/~vazirani/algorithms/chap5.pdf
]
epl333 2011 διάλεξη 10
∆είτε στο e-class
1
Ύλη προόδων και
τελικών εξετάσεων
Επιτρέπεται σκονάκι στην πρόοδο
Αύριο
ώρα 5-7, Αίθουσες: A, X, ∆οικ, ∆11, ∆21,
∆22,, A31
Προτεινόμενη βιβλιογραφία:
S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani
«Αλγόριθμοι» Κλειδάριθμος 2009 Κεφάλαια
2
0,3,4,5.(section 5.1).
1
Ύλη έως τώρα
Ασυμπτωτικό συμβολισμό
Αλ ό θ
Αλγόριθμους
γραφημάτων:
ά
π.χ.
∆ίδεται γράφημα (με κατεύθυνση)
•είναι ο κόμβος y προσιτός από τον x?
•έχει κύκλο?
•βρες τις ισχυρά συνεκτικές συνιστώσες.
Αλγόριθμους βελτιστοποίησης : π.χ.
πχ
∆ίδεται γράφημα με βάρη
•ποιο είναι το μικρότερο μονοπάτι από τον x
προς όλους τους κόμβους?
epl333 2011 διάλεξη 10
3
Ο ασυμπτωτικός συμβολισμός είναι τρόπος να συγκρίνουμε
(..χοντροειδώς) συναρτήσεις για να δούμε ποία έχει
μεγαλύτερες τιμές.
Τι χρειάζεται?
Ο χρόνος (υπολογιστικά βήματα) αλγορίθμου είναι συνάρτηση
του μήκους της εισόδου.
Αν υπολογίσουμε τα βήματα ενός αλγορίθμου είναι πολύπλοκη
συνάρτηση, χρειάζεται να την συγκρίνουμε με μια πιο απλή.
epl333 2011 διάλεξη 10
4
2
Τα ελάχιστα που πρέπει να θυμάστε είναι:
1. Για να δούμε πόσο γρήγορος είναι ένας αλγόριθμος:
•
•
•
Μετράμε βήματα
Παραλείπουμε σταθερές
Από τα πολυώνυμα κρατάμε τον όρο με το μεγαλύτερο βαθμό
2. Οι κύριες ομάδες αλγορίθμων είναι:
πολυωνυμικοί, γρήγοροι
(n a ), n  1
( a n ) : a  1
εκθετικοί
3. Ιεραρχία συναρτήσεων
log n  n  n 2  ... 
an
epl333 2011 διάλεξη 10
5
Σχέση μεταξύ , O, 





epl333 2011 διάλεξη 10

6
3
Μερικοί ακόμα κανόνες, που χρησιμεύουν συχνά:
Κάθε λογάριθμος
γ ρ μ ς αυξάνεται
ξ
αργότερα
ργ ρ
από κάθε πολυώνυμο
ανεξάρτητα βάσης και εκθέτη
b  0, x  0: logb n  O(nx )
Εκθέτες μικρότεροι θετικοί μικρότεροι από 1
Γιατί?
n
epl333 2011 διάλεξη 10
7
Μερικοί ακόμα κανόνες, που χρησιμεύουν συχνά:
Κάθε εκθετική συνάρτηση αυξάνεται γρηγορότερα
από κάθε πολυωνυμική, ανεξάρτητα εκθέτη και βάσης
r  1, d  0 : n d  O ( r n )
epl333 2011 διάλεξη 10
8
4
Μερικοί ακόμα κανόνες, που χρησιμεύουν συχνά:
Όσο μεγαλύτερη είναι η βάση της εκθετικής
συνάρτησης, τόσο γρηγορότερα αυξάνεται
r  s  1: s n  O ( r n )
s n  ( r n )
epl333 2011 διάλεξη 10
n n2
( )  n! n
2
9
n
Προσέγγιση Stirling
n! 
n
1
2  n ( ) n (1   ( ))
e
n
epl333 2011 διάλεξη 10
10
5
Σχετικά ερωτήματα από παλιά θέματα:
Σωστή
Σύντομη αιτιολογία
Λάθος
(n a  n b )  (n ab ) : a, b
Θετικές ακέραιες σταθερές
n !  O(n n )
n log n  O ( n  log n)
n
n 1
22  O(22 )
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 ο κόμβος του
κύκλου με το μικρότερο p
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
Stronlgy connected components(G=(V, E):
graph)
1. Υπολόγισε το ανάστροφο γράφημα GT. (Tο
GT περιλαμβάνει την ακμή (u, v) ανν το G
περιλαμβάνει την (v, u))
2. Κάνε DFS στο GT
3. ∆ιάταξε τους κόμβους του G κατά
φθίνουσα σειρά post από το βήμα 2.
4. Κάνε DFS στο G. Οι κόμβοι εξετάζονται με
τη σειρά,
ά η οποία
ί καθορίστηκε
θ ί
στο βήμα
βή 3.
3
Κάθε φορά που καλείται η explore() από το
DFS γράψε: «νέα ισχυρά συνεκτική
συνιστώσα». Κάθε φορά που καλείται η
previsit για κάποιο κόμβο v γράψε: «κόμβος»
v.
epl333 2011 διάλεξη 10
19
Αλγόριθμος για ισχυρά συνεκτικές
συνιστώσες: απόδειξη ορθότητας
• Κάθε
άθε DAG
G έχει τουλάχιστον μια καταβόθρα
αταβόθρα (s
(sink).
).
• Αν η explore() κληθεί για οποιοδήποτε κόμβο μιας ισχυρά
συνεκτικής συνιστώσας που είναι καταβόθρα, θα
εξερευνήσει αναδρομικά όλους τους κόμβους της
συνιστώσας και θα επιστρέψει.
1 procedure explore(v: vertex)
2 {previsit(v);
3 for each edge (v, w) out of v do
4 {if not visited(w) then explore(w);}
5 postvisit(v);}
epl333 2011 διάλεξη 10
20
10
Σχετικά ερωτήματα από παλιά θέματα:
Μετά την εκτέλεση του DFS, ο κόμβος με το μικρότερο
αριθμό post (ο κόμβος
δηλαδή που βγήκε πρώτος από τη στοίβα) ανήκει
αναγκαστικά σε συνεκτική συνιστώσα
που είναι καταβόθρα (sink).
Σωστή Λάθος!!
Αιτιολογία
epl333 2011 διάλεξη 10
K
21
A,B,D,
E
C,F
G,H,I,J
L
epl333 2011 διάλεξη 10
22
11
algorithm Dijkstra(G=(V, E) γράφημα με θετικά βάρη, s:
κόμβος)
{H: ουρά προτεραιότητας με κλειδί το πεδίο dist;
for each v in V do
n
{dist(v) =
;
prev(v) = nil;}
di t( ) 0;
dist(s)=0;
n φορές insert
H= makequeue(V);
while H nonempty do
n φορές deletemin
{v=deletemin(H);
for each edge (v, w) out of v do
if dist(w) > dist(v) + length(v, w) then
{dist(w) = dist(v) + length(v, w);
prev(w)
p
( ) = v;;
e φορές decreasekey
decreasekey(w, H);}
}
}

n  n  insert  n 
deletemin  e  decreasekey
n  (n  e)  insert  n  deletemin
epl333 2011 διάλεξη 10
23
Πολυπλοκότητα αλγορίθμου Dijkstra
n.deletemin()+(e+n).insert(), όπου n=|V|, e=|E|
• Υλοποίηση heap deletemin
insert
n .deletemin
deletemin + (e+n).insert
(e+n) insert
• συνδ. λίστα,
πίνακας
O(n)
• σωρός:
binary heap
O(logn)
• d-αδική
d αδική heap
O(dlogn/logd) O(logn/logd) O((nd+e).(logn/logd))
O((nd+e) (logn/logd))
• Fibonacci heap
O(logn)
1
O(logn)
O(1)
epl333 2011 διάλεξη 10
O(n2)
O((e+n).logn)
O(nlogn +e)
24
12
Πολυπλοκότητα αλγορίθμου Dijkstra
n.deletemin()+(e+n).insert(), όπου n=|V|, e=|E|
•
Υλοποίηση heap
•
d αδική heap
d-αδική
deletemin
insert
n .deletemin + (e+v).insert
O(dlogn/logd) O(logn/logd) O((nd+e)
O((nd+e).(logn/logd))
(logn/logd))
Έστω ότι παίρνουμε τη μέση πυκνότητα d=e/n του
γραφήματος και δίνουμε τιμή στο d. Έχουμε τα καλύτερα
αποτελέσματα!!
Για πυκνά γραφήματα:
n2
Για αραιά γραφήματα
n log n
Για ενδιάμεσα γραφήματα
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) + length(v, w) then
{dist(w) = dist(v) + length(v, w);
prev(w) = v;}
}
• Update (v, w), Relax (v, w, weight),
• Χαλάρωση (v, w, weight)
epl333 2011 διάλεξη 10
27
Αλγόριθμος Bellman-Ford
Είσοδος : Graph(V,E), κόμβος s
{for each v in V do
{dist(v) = inf ;
prev(v) = nil;}
dist(s)= 0;
for ii=11 to |V|
|V|-11 do
}
for each edge (v, w) in 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 min spanning tree(G
tree(G=(V
(V, E): γράφημα με
βάρη)
• {/* Χ οι ακμές του δένδρου που κατασκευάζουμε*/;
• Χ: σύνολο ακμών αρχικά κενό
• repeat
•
*** {διάλεξε μια συνεκτική συνιστώσα S του (V, X);
•
έστω [u, v] η ακμή με το μικρότερο βάρος που
•
συνδέει το S με το V-S;
•
πρόσθεσε την [u, v] στο Χ;}
• until |X|=|V|-1;
• }
epl333 2011 διάλεξη 10
32
•
16
Ποια συνεκτική συνιστώσα διαλέγουμε για να προσθέσουμε
την επόμενη ακμή στο δένδρο που κατασκευάζουμε. Ποιο
κομμάτι του ημιτελούς δένδρου?
Αλγόριθμος Prim…αρχίζει από τον κόμβο που παίρνει ως
παράμετρο...και συνεχώς επεκτείνει την ίδια συνιστώσα.
Αλγόριθμος
θ
Kruskal...δεν
k l
παίρνει ως παράμετρο τον κόμβο
αρχή..
διαλέγει αυτόν από τον οποίο φεύγει η μικρότερη ακμή
epl333 2011 διάλεξη 10
33
Prim’s run
[12]
[3]
[]
b
12
4
3
[0] a
7
1
3
10
[2]
[7]
[]
Total cost
10
2
4
e
[]
[3]
[4]
[1]
c []
f
1
d
[]
[1]
epl333 2011 διάλεξη 10
34
17
Υλοποίηση
heap
deletemin
insert
n . deletemin +
e.insert
συνδ. λίστα,
πίνακας
O(n)
O(1)
O(n2 )
σωρός:
ρ ς
binary heap
O(logn)
( g )
O(logn)
( g )
O(e.logn)
(
g )
d-αδική heap
d=e/n,
O(dlogn/logd)
O(logn/logd)
O(nd+e).
(logn/logd)
O(logn)
O(1)
O(nlogn +e)
πυκνά: n2,
αραιά: nlogn,
ενδιάμεσα
1 δ):
((e=n1+δ
) e
Fibonacci heap
epl333 2011 διάλεξη 10
35
Κλασσικό παράδειγμα άπληστου (κοντόφθαλμου) αλγορίθμου
Kruskal’s run
b
12
4
3
a
7
Total cost
1
f
3
10
c
10
2
4
e
1
d
epl333 2011 διάλεξη 10
36
18
Πολυπλοκότητα αλγορίθμου Kruskal
• Kruskal: O(e.logn + e.FIND
+n.UNION), όπου n=|V| και e=|E|
• Worst case FIND:
O (log n )
Η UNION εξαρτάται μόνο από τη FIND (επειδή το
LINK απαιτείί σταθερό
θ ό αριθμό
θ ό β
βημάτων)
ά
)
Άρα ο Kruskal: O (e log n )
epl333 lect9 2011
37
Αλγόριθμος Kruskal για ελαφρύτατα συνδετικά δένδρα.
Είναι ένας απλός άπληστος (g
(greedy)
y) αλγόριθμος
Χρησιμοποιεί μια δομή UNION FIND για να ελέγχει αν κάποια ακμή
μπορεί να προστεθεί στο δένδρο (αν δεν κάνει κύκλο).
Η πολυπλοκότητα του Κruskal εξαρτάται από την υλοποίηση της δομής
ως εξής O(e logn + e. FIND + n. UNION),
Είδαμε διάφορα
Εί
ά
ενδιαφέροντα
έ
κόλπα
ό
στην υλοποίηση
ί
της
δομής που τελικά κάνουν τον Kruskal
O(e log n  e log * n)
Sorting ακμών
epl333 lect9 2011
Υπόλοιπη δουλειά
38
19
Στη δομή Union-Find όταν χρησιμοποιoούται και οι δύο
ευριστικοί κανόνες Συμπίεση Μονοπατιού (path compression) και
Ένωση ανάλογα με το Βαθμό (union by rank) όλες οι λειτουργίες
έχουν στη χειρότερη περίπτωση χρόνο O(log*n).
Σωστή Λάθος
Αιτιολογία
Στη δομή Union-Find όταν δεν χρησιμοποιείται ο ευριστικός
κανόνας Συμπίεση Μονοπατιού (path compression) --αλλά
χρησιμοποιείται ο κανόνας Ένωση ανάλογα με το Βαθμό (union by
rank)—όλες οι λειτουργίες έχουν στη χειρότερη περίπτωση
χρόνο O(log n).
Σωστή Λάθος
epl333 2011 διάλεξη 10
39
20