Τεχνολογίες Υλοποίησης Αλγορίθµων

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Τεχνολογίες Υλοποίησης Αλγορίθµων"

Transcript

1 Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών Ενότητα 7 1 / 42

2 Ενότητα 7 - Συντοµότερες ιαδροµές ΙΙ Αλγόριθµοι Συντοµότερων ιαδροµών και Υλοποιήσεις Γενικά κόστη ακµών Αλγόριθµος Bellman-Ford Ελεγκτής Ορθότητας Αλγορίθµων Συντοµότερων ιαδροµών Αρχέτυπα για Αλγορίθµους Γραφηµάτων 2 / 42

3 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ 3 / 42

4 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ for all { v V d(v) = ; π(v) = nil; } d(s) = 0; while e = (u, v) E : d(v) > d(u) + c(e) { d(v) = d(u) + c(e); π(v) = e; } 3 / 42

5 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ for all { v V d(v) = ; π(v) = nil; } d(s) = 0; while e = (u, v) E : d(v) > d(u) + c(e) { d(v) = d(u) + c(e); π(v) = e; } Γράφηµα προκατόχων (οριζόµενο από τους δείκτες π): P = {e : e = π(v) E, v V} 3 / 42

6 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Ιδιότητες 4 / 42

7 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Ιδιότητες 1 d(s) = 0 ανν π(s) = nil, και d(v) < ανν π(v) nil, για v s 4 / 42

8 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Ιδιότητες 1 d(s) = 0 ανν π(s) = nil, και d(v) < ανν π(v) nil, για v s 2 Αν π(v) = e = (u, v), τότε d(v) d(u) + c(e) 4 / 42

9 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Ιδιότητες 1 d(s) = 0 ανν π(s) = nil, και d(v) < ανν π(v) nil, για v s 2 Αν π(v) = e = (u, v), τότε d(v) d(u) + c(e) 3 Αν π(v) nil, τότε η v είτε ϐρίσκεται σε έναν κύκλο του P, είτε είναι προσπελάσιµη από έναν κύκλο στο P, είτε είναι προσπελάσιµη από την s στο P. Αν π(s) nil, τότε η s ϐρίσκεται σε έναν κύκλο του P. 4 / 42

10 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Ιδιότητες 1 d(s) = 0 ανν π(s) = nil, και d(v) < ανν π(v) nil, για v s 2 Αν π(v) = e = (u, v), τότε d(v) d(u) + c(e) 3 Αν π(v) nil, τότε η v είτε ϐρίσκεται σε έναν κύκλο του P, είτε είναι προσπελάσιµη από έναν κύκλο στο P, είτε είναι προσπελάσιµη από την s στο P. Αν π(s) nil, τότε η s ϐρίσκεται σε έναν κύκλο του P. 4 Οι κύκλοι στο P έχουν αρνητικό κόστος 4 / 42

11 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Ιδιότητες 1 d(s) = 0 ανν π(s) = nil, και d(v) < ανν π(v) nil, για v s 2 Αν π(v) = e = (u, v), τότε d(v) d(u) + c(e) 3 Αν π(v) nil, τότε η v είτε ϐρίσκεται σε έναν κύκλο του P, είτε είναι προσπελάσιµη από έναν κύκλο στο P, είτε είναι προσπελάσιµη από την s στο P. Αν π(s) nil, τότε η s ϐρίσκεται σε έναν κύκλο του P. 4 Οι κύκλοι στο P έχουν αρνητικό κόστος 5 Αν η v ϐρίσκεται σε έναν κύκλο του P ή είναι προσπελάσιµη από έναν κύκλο στο P, τότε δ(v) = 4 / 42

12 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Ιδιότητες 1 d(s) = 0 ανν π(s) = nil, και d(v) < ανν π(v) nil, για v s 2 Αν π(v) = e = (u, v), τότε d(v) d(u) + c(e) 3 Αν π(v) nil, τότε η v είτε ϐρίσκεται σε έναν κύκλο του P, είτε είναι προσπελάσιµη από έναν κύκλο στο P, είτε είναι προσπελάσιµη από την s στο P. Αν π(s) nil, τότε η s ϐρίσκεται σε έναν κύκλο του P. 4 Οι κύκλοι στο P έχουν αρνητικό κόστος 5 Αν η v ϐρίσκεται σε έναν κύκλο του P ή είναι προσπελάσιµη από έναν κύκλο στο P, τότε δ(v) = 6 Αν v V f και d(v) = δ(v), τότε µια s-v διαδροµή στο P η οποία έχει κόστος δ(v) 4 / 42

13 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Ιδιότητες 1 d(s) = 0 ανν π(s) = nil, και d(v) < ανν π(v) nil, για v s 2 Αν π(v) = e = (u, v), τότε d(v) d(u) + c(e) 3 Αν π(v) nil, τότε η v είτε ϐρίσκεται σε έναν κύκλο του P, είτε είναι προσπελάσιµη από έναν κύκλο στο P, είτε είναι προσπελάσιµη από την s στο P. Αν π(s) nil, τότε η s ϐρίσκεται σε έναν κύκλο του P. 4 Οι κύκλοι στο P έχουν αρνητικό κόστος 5 Αν η v ϐρίσκεται σε έναν κύκλο του P ή είναι προσπελάσιµη από έναν κύκλο στο P, τότε δ(v) = 6 Αν v V f και d(v) = δ(v), τότε µια s-v διαδροµή στο P η οποία έχει κόστος δ(v) 7 Αν d(v) = δ(v) v V f, τότε το επαγώµενο από τις κορυφές του V f υπογράφηµα του P είναι ένα Σ 4 / 42

14 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Προβλήµατα 5 / 42

15 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Προβλήµατα ΠΧΠ εκθετική (ακόµη και σε απουσία αρνητικών κύκλων) 5 / 42

16 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Προβλήµατα ΠΧΠ εκθετική (ακόµη και σε απουσία αρνητικών κύκλων) Ο αλγόριθµος δεν τερµατίζει όταν αρνητικοί κύκλοι 5 / 42

17 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Αντιµετώπιση 1ου προβλήµατος 6 / 42

18 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Αντιµετώπιση 1ου προβλήµατος ιατήρηση ενός συνόλου κορυφών U: κορυφές που προσωρινά δεν παραβιάζουν την τριγωνική ανισότητα U {u : d(u) < και (u, v) E µε d(u) + c(u, v) < d(v)} 6 / 42

19 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Αντιµετώπιση 1ου προβλήµατος ιατήρηση ενός συνόλου κορυφών U: κορυφές που προσωρινά δεν παραβιάζουν την τριγωνική ανισότητα U {u : d(u) < και (u, v) E µε d(u) + c(u, v) < d(v)} for all { v V d(v) = ; π(v) = nil; } d(s) = 0; U = {s}; while U { επιλογή u U; U = U {u}; for all e = (u, v) E { if d(v) > d(u) + c(e) then { U = U {v}; d(v) = d(u) + c(e); π(v) = e; } } } 6 / 42

20 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Αντιµετώπιση 1ου προβλήµατος 7 / 42

21 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Αντιµετώπιση 1ου προβλήµατος Ποια κορυφή u U πρέπει να επιλέξουµε ; 7 / 42

22 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Αντιµετώπιση 1ου προβλήµατος Ποια κορυφή u U πρέπει να επιλέξουµε ; Υπαρξη Βέλτιστης Επιλογής (ι) Για κάθε v V f µε d(v) > δ(v), κορυφή u U µε d(u) = δ(u) και η οποία ϐρίσκεται σε µια s-v Σ (ιι) Οταν µια κορυφή u µε d(u) = δ(u) διαγράφεται από το U, τότε δεν προστίθεται ποτέ ξανά στο U 7 / 42

23 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Αντιµετώπιση 1ου προβλήµατος 8 / 42

24 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Αντιµετώπιση 1ου προβλήµατος Σχέση µεταξύ (d, π) και (dist, pred) pred[v] = π(v), dist[v] = { d(v) αν d(v) < αυθαίρετη αν d(v) = + 8 / 42

25 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Αντιµετώπιση 1ου προβλήµατος Σχέση µεταξύ (d, π) και (dist, pred) pred[v] = π(v), dist[v] = { d(v) αν d(v) < αυθαίρετη αν d(v) = + Αναπαράσταση του + d(v) = + ανν v s και π(v) = nil 8 / 42

26 Γενικευµένος Αλγόριθµος ΕΣ ΑΚ Αντιµετώπιση 1ου προβλήµατος Σχέση µεταξύ (d, π) και (dist, pred) pred[v] = π(v), dist[v] = { d(v) αν d(v) < αυθαίρετη αν d(v) = + Αναπαράσταση του + d(v) = + ανν v s και π(v) = nil Σύγκριση d < d(v), d IR (pred[v] == nil && v!= s) d < dist[v] 8 / 42

27 Αλγόριθµος Bellman-Ford Αντιµετώπιση 2ου προβλήµατος 9 / 42

28 Αλγόριθµος Bellman-Ford Αντιµετώπιση 2ου προβλήµατος Πώς επιλέγουµε κορυφές από το U ; 9 / 42

29 Αλγόριθµος Bellman-Ford Αντιµετώπιση 2ου προβλήµατος Πώς επιλέγουµε κορυφές από το U ; Οργάνωση του αλγορίθµου σε ϕάσεις U i = U στην αρχή της ϕάσης i, i 0, U 0 = {s} 9 / 42

30 Αλγόριθµος Bellman-Ford Αντιµετώπιση 2ου προβλήµατος Πώς επιλέγουµε κορυφές από το U ; Οργάνωση του αλγορίθµου σε ϕάσεις U i = U στην αρχή της ϕάσης i, i 0, U 0 = {s} Στην ϕάση i, όλες οι κορυφές του U i διαγράφονται από το U και οι νέες κορυφές που προστίθενται στο U εισάγονται στο U i+1 9 / 42

31 Αλγόριθµος Bellman-Ford Αντιµετώπιση 2ου προβλήµατος Πώς επιλέγουµε κορυφές από το U ; Οργάνωση του αλγορίθµου σε ϕάσεις U i = U στην αρχή της ϕάσης i, i 0, U 0 = {s} Στην ϕάση i, όλες οι κορυφές του U i διαγράφονται από το U και οι νέες κορυφές που προστίθενται στο U εισάγονται στο U i+1 Υλοποίηση του U µε χρήση ουράς Q 9 / 42

32 Αλγόριθµος Bellman-Ford Αντιµετώπιση 2ου προβλήµατος Πώς επιλέγουµε κορυφές από το U ; Οργάνωση του αλγορίθµου σε ϕάσεις U i = U στην αρχή της ϕάσης i, i 0, U 0 = {s} Στην ϕάση i, όλες οι κορυφές του U i διαγράφονται από το U και οι νέες κορυφές που προστίθενται στο U εισάγονται στο U i+1 Υλοποίηση του U µε χρήση ουράς Q Φάση i: όλες οι κορυφές του U i ϐρίσκονται στην αρχή της Q και όλες οι κορυφές του U i+1 ϐρίσκονται στο τέλος της Q, χωρισµένες από έναν διαχωριστή µε τιµή nil 9 / 42

33 Αλγόριθµος Bellman-Ford Αντιµετώπιση 2ου προβλήµατος Πώς επιλέγουµε κορυφές από το U ; Οργάνωση του αλγορίθµου σε ϕάσεις U i = U στην αρχή της ϕάσης i, i 0, U 0 = {s} Στην ϕάση i, όλες οι κορυφές του U i διαγράφονται από το U και οι νέες κορυφές που προστίθενται στο U εισάγονται στο U i+1 Υλοποίηση του U µε χρήση ουράς Q Φάση i: όλες οι κορυφές του U i ϐρίσκονται στην αρχή της Q και όλες οι κορυφές του U i+1 ϐρίσκονται στο τέλος της Q, χωρισµένες από έναν διαχωριστή µε τιµή nil Οταν ο διαχωριστής nil ϐρίσκεται στην αρχή της Q, τότε αυξάνεται ϐηµατικά η phase_count 9 / 42

34 Αλγόριθµος Bellman-Ford Αντιµετώπιση 2ου προβλήµατος Πώς επιλέγουµε κορυφές από το U ; Οργάνωση του αλγορίθµου σε ϕάσεις U i = U στην αρχή της ϕάσης i, i 0, U 0 = {s} Στην ϕάση i, όλες οι κορυφές του U i διαγράφονται από το U και οι νέες κορυφές που προστίθενται στο U εισάγονται στο U i+1 Υλοποίηση του U µε χρήση ουράς Q Φάση i: όλες οι κορυφές του U i ϐρίσκονται στην αρχή της Q και όλες οι κορυφές του U i+1 ϐρίσκονται στο τέλος της Q, χωρισµένες από έναν διαχωριστή µε τιµή nil Οταν ο διαχωριστής nil ϐρίσκεται στην αρχή της Q, τότε αυξάνεται ϐηµατικά η phase_count node_array<bool> in_q : in_q[v] = true, ανν v Q (αποφυγή επανεισαγωγών στην Q) 9 / 42

35 Αλγόριθµος Bellman-Ford 10 / 42

36 Αλγόριθµος Bellman-Ford Ο αλγόριθµος τερµατίζει όταν Q =, ή όταν i = n 10 / 42

37 Αλγόριθµος Bellman-Ford Ο αλγόριθµος τερµατίζει όταν Q =, ή όταν i = n Στην πρώτη περίπτωση (Q = ): d(v) = δ(v), v V 10 / 42

38 Αλγόριθµος Bellman-Ford Ο αλγόριθµος τερµατίζει όταν Q =, ή όταν i = n Στην πρώτη περίπτωση (Q = ): d(v) = δ(v), v V Στη δεύτερη περίπτωση (i = n): d(v) = δ(v), v V + V f 10 / 42

39 Αλγόριθµος Bellman-Ford Ο αλγόριθµος τερµατίζει όταν Q =, ή όταν i = n Στην πρώτη περίπτωση (Q = ): d(v) = δ(v), v V Στη δεύτερη περίπτωση (i = n): d(v) = δ(v), v V + V f Οι κορυφές του V αντιµετωπίζονται σε µια µεταγενέστερη ϕάση 10 / 42

40 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ 11 / 42

41 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ bool BELLMAN_FORD_T(const graph& G, node s, const edge_array<nt>& c, node_array<nt>& dist, node_array<edge>& pred) 11 / 42

42 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ bool BELLMAN_FORD_T(const graph& G, node s, const edge_array<nt>& c, node_array<nt>& dist, node_array<edge>& pred) Επιστρέφει false αν δ(v) = για κάποια κορυφή v αλλιώς, επιστρέφει true 11 / 42

43 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ bool BELLMAN_FORD_T(const graph& G, node s, const edge_array<nt>& c, node_array<nt>& dist, node_array<edge>& pred) Επιστρέφει false αν δ(v) = για κάποια κορυφή v αλλιώς, επιστρέφει true Χρόνος: O(nm) 11 / 42

44 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ // BF: helper template <class NT> bool BELLMAN_FORD_T(const graph& G, node s, const edge_array<nt>& c, node_array<nt>& dist, node_array<edge>& pred ) { int n = G.number_of_nodes(); int phase_count = 0; b_queue<node> Q(n+1); node_array<bool> in_q(g,false); node u,v; edge e; forall_nodes(v,g) pred[v] = nil; dist[s] = 0; Q.append(s); in_q[s] = true; Q.append((node) nil); // end marker 12 / 42

45 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ while( phase_count < n ) { u = Q.pop(); if ( u == nil ) { phase_count++; if ( Q.empty() ) return true; Q.append((node) nil); continue; } else in_q[u] = false; NT du = dist[u]; forall_adj_edges(e,u) { v = G.opposite(u,e); // makes it also work for ugraphs NT d = du + c[e]; if ( (pred[v] == nil && v!= s) d < dist[v] ) { dist[v] = d; pred[v] = e; if (!in_q[v] ) { Q.append(v); in_q[v] = true; } } } } // BF: postprocessing return false; } 13 / 42

46 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Μεταγενέστερη Φάση: Q µετά από n φάσεις 14 / 42

47 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Μεταγενέστερη Φάση: Q µετά από n φάσεις Πρόβληµα: µπορεί να υπάρχουν κορυφές στο V που δεν είναι ακόµη προσπελάσιµες από έναν κύκλο στο γράφηµα P 14 / 42

48 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Μεταγενέστερη Φάση: Q µετά από n φάσεις Πρόβληµα: µπορεί να υπάρχουν κορυφές στο V που δεν είναι ακόµη προσπελάσιµες από έναν κύκλο στο γράφηµα P Πώς µπορούµε να ϐρούµε αυτές τις κορυφές χωρίς να χρειαστεί να εκτελέσουµε τον αλγόριθµο για έναν µεγαλύτερο αριθµό ϕάσεων ; 14 / 42

49 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Βασικές Ιδιότητες µετά από n φάσεις δ k (v) = min{c(p) : p µια s-v διαδροµή µε το πολύ k ακµές} 15 / 42

50 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Βασικές Ιδιότητες µετά από n φάσεις δ k (v) = min{c(p) : p µια s-v διαδροµή µε το πολύ k ακµές} 1 d(v) δ n (v) και αν v U, τότε d(v) < δ n 1 (v) 15 / 42

51 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Βασικές Ιδιότητες µετά από n φάσεις δ k (v) = min{c(p) : p µια s-v διαδροµή µε το πολύ k ακµές} 1 d(v) δ n (v) και αν v U, τότε d(v) < δ n 1 (v) 2 s V f ανν π(s) = nil 15 / 42

52 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Βασικές Ιδιότητες µετά από n φάσεις δ k (v) = min{c(p) : p µια s-v διαδροµή µε το πολύ k ακµές} 1 d(v) δ n (v) και αν v U, τότε d(v) < δ n 1 (v) 2 s V f ανν π(s) = nil 3 Κάθε κορυφή u U ϐρίσκεται είτε σε έναν κύκλο του P, είτε είναι προσπελάσιµη από έναν κύκλο στο P 15 / 42

53 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Βασικές Ιδιότητες µετά από n φάσεις δ k (v) = min{c(p) : p µια s-v διαδροµή µε το πολύ k ακµές} 1 d(v) δ n (v) και αν v U, τότε d(v) < δ n 1 (v) 2 s V f ανν π(s) = nil 3 Κάθε κορυφή u U ϐρίσκεται είτε σε έναν κύκλο του P, είτε είναι προσπελάσιµη από έναν κύκλο στο P 4 Κάθε κορυφή v V είναι προσπελάσιµη στο G από κάποια u U 15 / 42

54 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Βασικές Ιδιότητες µετά από n φάσεις δ k (v) = min{c(p) : p µια s-v διαδροµή µε το πολύ k ακµές} 1 d(v) δ n (v) και αν v U, τότε d(v) < δ n 1 (v) 2 s V f ανν π(s) = nil 3 Κάθε κορυφή u U ϐρίσκεται είτε σε έναν κύκλο του P, είτε είναι προσπελάσιµη από έναν κύκλο στο P 4 Κάθε κορυφή v V είναι προσπελάσιµη στο G από κάποια u U 5 Αν π(s) nil, τότε κάθε κορυφή προσπελάσιµη από την s ϐρίσκεται είτε σε έναν κύκλο του P, είτε είναι προσπελάσιµη από έναν κύκλο στο P 15 / 42

55 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Μεταγενέστερη Φάση 16 / 42

56 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Μεταγενέστερη Φάση Εστω V f (π(s) = nil), και R V f το σύνολο των κορυφών που είναι προσπελάσιµες από την s στο P 16 / 42

57 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Μεταγενέστερη Φάση Εστω V f (π(s) = nil), και R V f το σύνολο των κορυφών που είναι προσπελάσιµες από την s στο P Ολες οι κορυφές w R που είναι προσπελάσιµες από µια κορυφή u U ανήκουν στο V και εποµένως πρέπει να ενηµερωθούν οι π(w) 16 / 42

58 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Μεταγενέστερη Φάση Εστω V f (π(s) = nil), και R V f το σύνολο των κορυφών που είναι προσπελάσιµες από την s στο P Ολες οι κορυφές w R που είναι προσπελάσιµες από µια κορυφή u U ανήκουν στο V και εποµένως πρέπει να ενηµερωθούν οι π(w) Ενηµέρωση π(w), w R Εκτέλεση ΑΠΒ από κάθε u U όταν µια κορυφή w R προσπελαύνεται µέσω της ακµής (z, w), τότε ϑέτουµε π(w) = (z, w) όλες οι κορυφές του R V είναι προσπελάσιµες από τις κορυφές του U και από την (3) προσπελάσιµες από έναν κύκλο στο P 16 / 42

59 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Μεταγενέστερη Φάση: Πώς προσδιορίζονται οι κορυφές του R ; 17 / 42

60 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Μεταγενέστερη Φάση: Πώς προσδιορίζονται οι κορυφές του R ; ΑΠΒ από την s στο P, αφού πρώτα «κρύψουµε» τις ακµές που δεν ανήκουν στο P και µετά τις επαναφέρουµε στο αρχικό γράφηµα 17 / 42

61 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Μεταγενέστερη Φάση: Πώς προσδιορίζονται οι κορυφές του R ; ΑΠΒ από την s στο P, αφού πρώτα «κρύψουµε» τις ακµές που δεν ανήκουν στο P και µετά τις επαναφέρουµε στο αρχικό γράφηµα // BF: postprocessing if (pred[s]!= nil) return false; node_array<bool> in_r(g,false); forall_edges(e,g) if (e!= pred[g.target(e)]) ((graph*) &G)->hide_edge(e); DFS(G,s,in_R); // sets in_r[v] = true for v in R ((graph*) &G)->restore_all_edges(); node_array<bool> reached_from_node_in_u(g,false); forall_nodes(v,g) if (in_q[v] &&!reached_from_node_in_u[v]) Update_pred(G,v,in_R,reached_from_node_in_U,pred); 17 / 42

62 Αλγόριθµος Bellman-Ford Πρόβληµα ΕΣ ΑΚ Μεταγενέστερη Φάση: Πώς προσδιορίζονται οι κορυφές του R ; (συνέχεια) // BF: helper inline void Update_pred(const graph& G, node v, const node_array<bool>& in_r, node_array<bool>& reached_from_node_in_u, node_array<edge>& pred) { reached_from_node_in_u[v] = true; edge e; forall_adj_edges(e,v) { node w = G.target(e); if (!reached_from_node_in_u[w] ) { if ( in_r[w] ) pred[w] = e; Update_pred(G,w,in_R,reached_from_node_in_U,pred); } } } 18 / 42

63 Γενικός Αλγόριθµος ΕΣ ΑΚ template <class NT> bool SHORTEST_PATH_T(const graph& G, node s, const edge_array<nt>& c, node_array<nt>& dist, node_array<edge>& pred ) { if ( Is_Acyclic(G) ) { ACYCLIC_SHORTEST_PATH_T(G,s,c,dist,pred); return true; } bool non_negative = true; edge e; forall_edges(e,g) if (c[e] < 0) non_negative = false; } if (non_negative) { DIJKSTRA_T(G,s,c,dist,pred); return true; } return BELLMAN_FORD_T(G,s,c,dist,pred); 19 / 42

64 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ 20 / 42

65 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ανάπτυξη προγράµµατος CHECK_SP_T(G,s,c,dist,pred) το οποίο ϑα ελέγχει αν το Ϲεύγος (dist, pred) είναι µια σωστή λύση του προβλήµατος ΕΣ ΑΚ (G, s, c) 20 / 42

66 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ανάπτυξη προγράµµατος CHECK_SP_T(G,s,c,dist,pred) το οποίο ϑα ελέγχει αν το Ϲεύγος (dist, pred) είναι µια σωστή λύση του προβλήµατος ΕΣ ΑΚ (G, s, c) Εσφαλµένη λύση: σταµατάει αµέσως η εκτέλεση του προγράµµατος µε διαγνωστικό µήνυµα λάθους ("assertion failed") 20 / 42

67 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ανάπτυξη προγράµµατος CHECK_SP_T(G,s,c,dist,pred) το οποίο ϑα ελέγχει αν το Ϲεύγος (dist, pred) είναι µια σωστή λύση του προβλήµατος ΕΣ ΑΚ (G, s, c) Εσφαλµένη λύση: σταµατάει αµέσως η εκτέλεση του προγράµµατος µε διαγνωστικό µήνυµα λάθους ("assertion failed") Σωστή λύση: επιστρέφει ένα node_array<int> label µε label[v] < 0, αν v V label[v] = 0, αν v V f label[v] > 0, αν v V + 20 / 42

68 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ορισµοί 21 / 42

69 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ορισµοί { αν pred[s] U f nil = {v; s-v διαδροµή στο P } αν pred[s] = nil 21 / 42

70 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ορισµοί { αν pred[s] U f nil = {v; s-v διαδροµή στο P } αν pred[s] = nil U + = {v; v s και pred[v] = nil} 21 / 42

71 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ορισµοί { αν pred[s] U f nil = {v; s-v διαδροµή στο P } αν pred[s] = nil U + = {v; v s και pred[v] = nil} U = {v; v ϐρίσκεται σε έναν κύκλο του P ή είναι προσπελάσιµη από έναν κύκλο στο P} 21 / 42

72 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ελεγχοι Ορθότητας Το Ϲεύγος (dist, pred) είναι µια σωστή λύση αν ικανοποιούνται οι παρακάτω συνθήκες/έλεγχοι: 22 / 42

73 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ελεγχοι Ορθότητας Το Ϲεύγος (dist, pred) είναι µια σωστή λύση αν ικανοποιούνται οι παρακάτω συνθήκες/έλεγχοι: 1 v U + αν διαδροµή s-v στο G 22 / 42

74 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ελεγχοι Ορθότητας Το Ϲεύγος (dist, pred) είναι µια σωστή λύση αν ικανοποιούνται οι παρακάτω συνθήκες/έλεγχοι: 1 v U + αν διαδροµή s-v στο G 2 Ολοι οι κύκλοι στο P έχουν αρνητικό κόστος 22 / 42

75 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ελεγχοι Ορθότητας Το Ϲεύγος (dist, pred) είναι µια σωστή λύση αν ικανοποιούνται οι παρακάτω συνθήκες/έλεγχοι: 1 v U + αν διαδροµή s-v στο G 2 Ολοι οι κύκλοι στο P έχουν αρνητικό κόστος 3 ακµή (v, w) E µε v U και w U f 22 / 42

76 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ελεγχοι Ορθότητας Το Ϲεύγος (dist, pred) είναι µια σωστή λύση αν ικανοποιούνται οι παρακάτω συνθήκες/έλεγχοι: 1 v U + αν διαδροµή s-v στο G 2 Ολοι οι κύκλοι στο P έχουν αρνητικό κόστος 3 ακµή (v, w) E µε v U και w U f 4 e = (v, w) E: αν v U f και w U f, τότε dist[v] + c[e] dist[w] 22 / 42

77 Ελεγκτής Ορθότητας Αλγορίθµων ΕΣ ΑΚ Ελεγχοι Ορθότητας Το Ϲεύγος (dist, pred) είναι µια σωστή λύση αν ικανοποιούνται οι παρακάτω συνθήκες/έλεγχοι: 1 v U + αν διαδροµή s-v στο G 2 Ολοι οι κύκλοι στο P έχουν αρνητικό κόστος 3 ακµή (v, w) E µε v U και w U f 4 e = (v, w) E: αν v U f και w U f, τότε dist[v] + c[e] dist[w] 5 v U f : αν v = s, τότε dist[v] = 0, και αν v s τότε dist[v] = dist[u] + c[pred[v]] όπου u είναι η αρχική κορυφή της pred[v] 22 / 42

78 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών 23 / 42

79 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών Αρχικά όλες οι κορυφές έχουν label ίσο µε UNKNOWN 23 / 42

80 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών Αρχικά όλες οι κορυφές έχουν label ίσο µε UNKNOWN Εκτέλεση ΑΠΒ για προσδιορισµό όλων των κορυφών που είναι προσπελάσιµες από την s, και έλεγχος για όλα τα v s: pred[v] = nil ανν s-v διαδροµή 23 / 42

81 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών Αρχικά όλες οι κορυφές έχουν label ίσο µε UNKNOWN Εκτέλεση ΑΠΒ για προσδιορισµό όλων των κορυφών που είναι προσπελάσιµες από την s, και έλεγχος για όλα τα v s: pred[v] = nil ανν s-v διαδροµή Σε όλες τις κορυφές που δεν είναι προσπελάσιµες από την s: ανάθεση τιµής label ίσο µε PLUS 23 / 42

82 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών Αρχικά όλες οι κορυφές έχουν label ίσο µε UNKNOWN Εκτέλεση ΑΠΒ για προσδιορισµό όλων των κορυφών που είναι προσπελάσιµες από την s, και έλεγχος για όλα τα v s: pred[v] = nil ανν s-v διαδροµή Σε όλες τις κορυφές που δεν είναι προσπελάσιµες από την s: ανάθεση τιµής label ίσο µε PLUS // condition (1) enum{ NEG_CYCLE = -2, ATT_TO_CYCLE = -1, FINITE = 0, PLUS = 1, CYCLE = 2, ON_CUR_PATH = 3, UNKNOWN = 4 }; node_array<int> label(g,unknown); node_array<bool> reachable(g,false); DFS(G,s,reachable); node v; forall_nodes(v,g) { if (v!= s) { assert( (pred[v] == nil) == (reachable[v] == false)); if (reachable[v] == false) label[v] = PLUS; } } 23 / 42

83 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών 24 / 42

84 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών s v w v 24 / 42

85 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών s v w v Ακολουθούµε τη διαδροµή [v, source(pred[v]), source(pred[source(pred[v])]),...] µέχρι να συναντήσουµε µια κορυφή δύο ϕορές (U ) ή µέχρι να µην µπορούµε να προχωρήσουµε άλλο (U f ) 24 / 42

86 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών s v w v Ακολουθούµε τη διαδροµή [v, source(pred[v]), source(pred[source(pred[v])]),...] µέχρι να συναντήσουµε µια κορυφή δύο ϕορές (U ) ή µέχρι να µην µπορούµε να προχωρήσουµε άλλο (U f ) U : κορυφές που ανήκουν σε έναν κύκλο στο P (label CYCLE) και κορυφές που είναι προσπελάσιµες από έναν κύκλο στο P (label ATT_TO_CYCLE) 24 / 42

87 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών s v w v Ακολουθούµε τη διαδροµή [v, source(pred[v]), source(pred[source(pred[v])]),...] µέχρι να συναντήσουµε µια κορυφή δύο ϕορές (U ) ή µέχρι να µην µπορούµε να προχωρήσουµε άλλο (U f ) U : κορυφές που ανήκουν σε έναν κύκλο στο P (label CYCLE) και κορυφές που είναι προσπελάσιµες από έναν κύκλο στο P (label ATT_TO_CYCLE) Η διαπέραση µιας διαδροµής δεν πρέπει να γίνει πολλές ϕορές η διαπέραση σταµατά όταν συναντήσουµε µια κορυφή µε label UNKNOWN Κατά τη διαπέραση όλες οι κορυφές της διαδροµής εισάγονται σε µία στοίβα S και παίρνουν label ON_CUR_PATH 24 / 42

88 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών s v w v // classification of nodes if (pred[s] == nil) label[s] = FINITE; forall_nodes(v,g) { if ( label[v] == UNKNOWN ) { stack<node> S; node w = v; while ( label[w] == UNKNOWN ) { label[w] = ON_CUR_PATH; S.push(w); w = G.source(pred[w]); } // label all nodes on current path } } 25 / 42

89 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών s v w v 26 / 42

90 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών s v Εξέταση κορυφής w µε label UNKNOWN w v Αν label[w]=finite, τότε όλες οι κορυφές της διαδροµής U f Αν label[w]=cycle ή label[w]=att_to_cycle, τότε όλες οι κορυφές (εκτός της w) είναι προσπελάσιµες από έναν κύκλο. Αν επίσης η w ανήκει στην τρέχουσα διαδροµή, τότε ανήκει στον κύκλο 26 / 42

91 Υλοποίηση Ελεγκτή Συνθ. (1) & Κατηγοριοποίηση κορυφών s v Εξέταση κορυφής w µε label UNKNOWN w v Αν label[w]=finite, τότε όλες οι κορυφές της διαδροµής U f Αν label[w]=cycle ή label[w]=att_to_cycle, τότε όλες οι κορυφές (εκτός της w) είναι προσπελάσιµες από έναν κύκλο. Αν επίσης η w ανήκει στην τρέχουσα διαδροµή, τότε ανήκει στον κύκλο // label all nodes on current path int t = label[w]; if ( t == ON_CUR_PATH ) { node z; do { z = S.pop(); label[z] = CYCLE; } while ( z!= w ); while (!S.empty() ) label[s.pop()] = ATT_TO_CYCLE; } else // t is CYCLE, ATT_TO_CYCLE, or FINITE { if ( t == CYCLE ) t = ATT_TO_CYCLE; while (!S.empty() ) label[s.pop()] = t; } 26 / 42

92 Υλοποίηση Ελεγκτή Συνθήκη (2) 27 / 42

93 Υλοποίηση Ελεγκτή Συνθήκη (2) Για κάθε κορυφή v µε label[v]=cycle διαπερνούµε τον κύκλο στον οποίο ανήκει, υπολογίζουµε το κόστος του και ελέγχουµε αν είναι αρνητικό. Αν ναι, τότε δίνουµε σε όλες τις κορυφές του κύκλου νέο label ίσο µε NEG_CYCLE. Αυτό εξασφαλίζει ότι κάθε κύκλος διαπερνάται µόνο µία ϕορά 27 / 42

94 Υλοποίηση Ελεγκτή Συνθήκη (2) Για κάθε κορυφή v µε label[v]=cycle διαπερνούµε τον κύκλο στον οποίο ανήκει, υπολογίζουµε το κόστος του και ελέγχουµε αν είναι αρνητικό. Αν ναι, τότε δίνουµε σε όλες τις κορυφές του κύκλου νέο label ίσο µε NEG_CYCLE. Αυτό εξασφαλίζει ότι κάθε κύκλος διαπερνάται µόνο µία ϕορά // condition (2) forall_nodes(v,g) { if ( label[v] == CYCLE ) { node w = v; NT cycle_length = 0; do { cycle_length += c[pred[w]]; label[w] = NEG_CYCLE; w = G.source(pred[w]); } while (w!= v); assert(cycle_length < 0); } } 27 / 42

95 Υλοποίηση Ελεγκτή Συνθήκες (3), (4) & (5) 28 / 42

96 Υλοποίηση Ελεγκτή Συνθήκες (3), (4) & (5) 3 ακµή (v, w) E µε v U και w U f 28 / 42

97 Υλοποίηση Ελεγκτή Συνθήκες (3), (4) & (5) 3 ακµή (v, w) E µε v U και w U f 4 e = (v, w) E: αν v U f και w U f, τότε dist[v] + c[e] dist[w] 28 / 42

98 Υλοποίηση Ελεγκτή Συνθήκες (3), (4) & (5) 3 ακµή (v, w) E µε v U και w U f 4 e = (v, w) E: αν v U f και w U f, τότε dist[v] + c[e] dist[w] 5 v U f : αν v = s, τότε dist[v] = 0, και αν v s τότε dist[v] = dist[u] + c[pred[v]] όπου u είναι η αρχική κορυφή της pred[v] 28 / 42

99 Υλοποίηση Ελεγκτή Συνθήκες (3), (4) & (5) 3 ακµή (v, w) E µε v U και w U f 4 e = (v, w) E: αν v U f και w U f, τότε dist[v] + c[e] dist[w] 5 v U f : αν v = s, τότε dist[v] = 0, και αν v s τότε dist[v] = dist[u] + c[pred[v]] όπου u είναι η αρχική κορυφή της pred[v] //conditions (3), (4), and (5) if ( label[s] == FINITE ) assert(dist[s] == 0); edge e; forall_edges(e,g) { node v = G.source(e); node w = G.target(e); if ( label[w] == FINITE ) { assert( label[v] == FINITE label[v] == PLUS); if ( label[v] == FINITE ) { assert( dist[v] + c[e] >= dist[w] ); if ( e == pred[w] ) assert( dist[v] + c[e] == dist[w] ); } } 28 / 42

100 Υλοποίηση Ελεγκτή Το πλήρες πρόγραµµα template <class NT> node_array<int> CHECK_SP_T(const graph& G, node s, const edge_array<nt>& c, const node_array<nt>& dist, const node_array<edge>& pred) { // condition (1) // classification of nodes // condition (2) // conditions (3), (4), and (5) return label; } 29 / 42

101 Αρχέτυπα για Αλγορίθµους Γραφηµάτων 30 / 42

102 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Αλγόριθµοι γραφηµάτων 30 / 42

103 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Αλγόριθµοι γραφηµάτων ακµές/κορυφές γραφηµάτων είναι συσχετισµένες µε τιµές ενός συγκεκριµένου (αριθµητικού) τύπου 30 / 42

104 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Αλγόριθµοι γραφηµάτων ακµές/κορυφές γραφηµάτων είναι συσχετισµένες µε τιµές ενός συγκεκριµένου (αριθµητικού) τύπου πρέπει να µπορούν να εφαρµοσθούν σε οποιονδήποτε αριθµητικό τύπο που ικανοποιεί κάποιες προϋποθέσεις (π.χ. είναι γραµµικά διατεταγµένος) 30 / 42

105 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Αλγόριθµοι γραφηµάτων ακµές/κορυφές γραφηµάτων είναι συσχετισµένες µε τιµές ενός συγκεκριµένου (αριθµητικού) τύπου πρέπει να µπορούν να εφαρµοσθούν σε οποιονδήποτε αριθµητικό τύπο που ικανοποιεί κάποιες προϋποθέσεις (π.χ. είναι γραµµικά διατεταγµένος) Ο µηχανισµός αρχετύπων χρησιµοποιείται για αυτό το σκοπό 30 / 42

106 Αρχέτυπα για Αλγορίθµους Γραφηµάτων 31 / 42

107 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Παράδειγµα: αλγόριθµος ΕΣ ΑΚ template <class NT> void DIJKSTRA_T(const graph& G, node s, const edge_array<nt>& c, node_array<nt>& dist, node_array<edge>& pred); 31 / 42

108 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Παράδειγµα: αλγόριθµος ΕΣ ΑΚ template <class NT> void DIJKSTRA_T(const graph& G, node s, const edge_array<nt>& c, node_array<nt>& dist, node_array<edge>& pred); Η παράµετρος αρχετύπου NT µπορεί να συγκεκριµενοποιηθεί µε οποιονδήποτε αριθµητικό τύπο που πληροί κάποιες συντακτικές και σηµασιολογικές προϋποθέσεις Π.χ. πρέπει να είναι γραµµικά διατεταγµένος και η λειτουργία της πρόσθεσης πρέπει να είναι µονότονη 31 / 42

109 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Επιθυµητοί Στόχοι 32 / 42

110 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Επιθυµητοί Στόχοι Οι πιο συχνά χρησιµοποιούµενες συγκεκριµενοποιήσεις πρέπει να είναι προµεταγλωττισµένες 32 / 42

111 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Επιθυµητοί Στόχοι Οι πιο συχνά χρησιµοποιούµενες συγκεκριµενοποιήσεις πρέπει να είναι προµεταγλωττισµένες Οι προ-συγκεκριµενοποιηµένες εκδοχές πρέπει να µπορούν να χρησιµοποιούνται εναλλακτικά µε τις εκδοχές αρχετύπων 32 / 42

112 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μηχανισµός LEDA 33 / 42

113 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μηχανισµός LEDA Για κάθε συνάρτηση Alg που υλοποιεί κάποιον αλγόριθµο τρία αρχεία 33 / 42

114 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μηχανισµός LEDA Για κάθε συνάρτηση Alg που υλοποιεί κάποιον αλγόριθµο τρία αρχεία Alg.h: ϐρίσκεται στον κατάλογο LEDAROOT/incl/LEDA και περιέχει τις δηλώσεις όλων των συναρτήσεων Η προ-συγκεκριµενοποιηµένη εκδοχή έχει όνοµα Alg, ενώ η εκδοχή αρχετύπου έχει όνοµα Alg_T 33 / 42

115 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μηχανισµός LEDA Για κάθε συνάρτηση Alg που υλοποιεί κάποιον αλγόριθµο τρία αρχεία Alg.h: ϐρίσκεται στον κατάλογο LEDAROOT/incl/LEDA και περιέχει τις δηλώσεις όλων των συναρτήσεων Η προ-συγκεκριµενοποιηµένη εκδοχή έχει όνοµα Alg, ενώ η εκδοχή αρχετύπου έχει όνοµα Alg_T Alg.t: ϐρίσκεται στον κατάλογο LEDAROOT/incl/LEDA/templates και περιέχει τον ορισµό της συνάρτησης αρχετύπου 33 / 42

116 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μηχανισµός LEDA Για κάθε συνάρτηση Alg που υλοποιεί κάποιον αλγόριθµο τρία αρχεία Alg.h: ϐρίσκεται στον κατάλογο LEDAROOT/incl/LEDA και περιέχει τις δηλώσεις όλων των συναρτήσεων Η προ-συγκεκριµενοποιηµένη εκδοχή έχει όνοµα Alg, ενώ η εκδοχή αρχετύπου έχει όνοµα Alg_T Alg.t: ϐρίσκεται στον κατάλογο LEDAROOT/incl/LEDA/templates και περιέχει τον ορισµό της συνάρτησης αρχετύπου _Alg.c: ϐρίσκεται στον κατάλογο LEDAROOT/src και περιέχει τις υλοποιήσεις των συγκεκριµενοποιήσεων µε ϐάση τη συνάρτηση αρχετύπου Το αρχείο αυτό είναι προµεταγλωττισµένο στο αρχείο κώδικα αντικειµένου _Alg.o που περιέχεται σε κάποια από τις ϐιβλιοθήκες της LEDA 33 / 42

117 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μηχανισµός LEDA Χρήση των διαφορετικών εκδοχών 34 / 42

118 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μηχανισµός LEDA Χρήση των διαφορετικών εκδοχών Συνάρτηση αρχετύπου #include <LEDA/templates/Alg.t> 34 / 42

119 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μηχανισµός LEDA Χρήση των διαφορετικών εκδοχών Συνάρτηση αρχετύπου #include <LEDA/templates/Alg.t> Προ-συγκεκριµενοποιηµένη συνάρτηση #include <LEDA/Alg.h> 34 / 42

120 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Παράδειγµα: αλγόριθµος Dijkstra // file dijkstra.h #ifndef DIJKSTRA_H #define DIJKSTRA_H #include <LEDA/graph.h> template <class NT> void DIJKSTRA_T(const graph& G, node s, const edge_array<nt>& c, node_array<nt>& dist, node_array<edge>& pred); // next come the pre-instantiated versions // void DIJKSTRA(const graph& G, node s, const edge_array<int>& c, node_array<int>& dist, node_array<edge>& pred); // and, similarly, for double,... #endif 35 / 42

121 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Παράδειγµα: αλγόριθµος Dijkstra // file dijkstra.t #include <LEDA/dijkstra.h> template <class NT> void DIJKSTRA_T(const graph& G, node s, const edge_array<nt>& c, node_array<nt>& dist, node_array<edge>& pred) { /* implementation of DIJKSTRA_T */ } 36 / 42

122 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Παράδειγµα: αλγόριθµος Dijkstra // file _dijkstra.c #include <LEDA/templates/dijkstra.t> void DIJKSTRA(const graph& G, node s, const edge_array<int>& c, node_array<int>& dist, node_array<edge>& pred) { DIJKSTRA_T(G,s,c,dist,pred); } // and, similarly, for double / 42

123 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Παράδειγµα: αλγόριθµος Dijkstra Χρήση προ-συγκεκριµενοποιηµένης εκδοχής σε πρόγραµµα εφαρµογής #include <LEDA/dijkstra.h> // define G, s, c, dist, pred with number type int DIJKSTRA(G,s,c,dist,pred); 38 / 42

124 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Παράδειγµα: αλγόριθµος Dijkstra Χρήση εκδοχής αρχετύπου σε πρόγραµµα εφαρµογής #include <LEDA/templates/dijkstra.t> // define G, s, c, dist, pred for any number type NT DIJKSTRA_T(G,s,c,dist,pred); // define G, s, c, dist, pred for number type int // and use template version DIJKSTRA_T(G,s,c,dist,pred); // use pre-instantiated version DIJKSTRA(G,s,c,dist,pred); 39 / 42

125 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μια συνιστώµενη διαφορετική µέθοδος 40 / 42

126 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μια συνιστώµενη διαφορετική µέθοδος Τα.t-αρχεία δεν πρέπει να συµπεριλαµβάνονται άµεσα στα προγράµµατα εφαρµογής, διότι µπορεί να περιέχουν ϐοηθητικές συναρτήσεις οι οποίες να δηµιουργούν πρόβληµα µε τον χώρο ονοµάτων του προγ/τος εφαρµογής 40 / 42

127 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μια συνιστώµενη διαφορετική µέθοδος Τα.t-αρχεία δεν πρέπει να συµπεριλαµβάνονται άµεσα στα προγράµµατα εφαρµογής, διότι µπορεί να περιέχουν ϐοηθητικές συναρτήσεις οι οποίες να δηµιουργούν πρόβληµα µε τον χώρο ονοµάτων του προγ/τος εφαρµογής ηµιουργία ενδιάµεσων αρχείων Π.χ. συγκεκριµενοποίηση της DIJKSTRA_T µε τον τύπο δεδοµένων real της LEDA // real_dijkstra.h #include <LEDA/real.h> void DIJKSTRA(const graph& G, node s, const edge_array<real>& c, node_array<real>& dist, node_array<edge>& pred) 40 / 42

128 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μια συνιστώµενη διαφορετική µέθοδος // real_dijkstra.c #include "real_dijkstra.h" #include <LEDA/templates/dijkstra.t> void DIJKSTRA(const graph& G, node s, const edge_array<real>& c, node_array<real>& dist, node_array<edge>& pred) { DIJKSTRA_T(G,s,c,dist,pred); } 41 / 42

129 Αρχέτυπα για Αλγορίθµους Γραφηµάτων Μια συνιστώµενη διαφορετική µέθοδος // real_dijkstra.c #include "real_dijkstra.h" #include <LEDA/templates/dijkstra.t> void DIJKSTRA(const graph& G, node s, const edge_array<real>& c, node_array<real>& dist, node_array<edge>& pred) { DIJKSTRA_T(G,s,c,dist,pred); } Το αρχείο real_dijkstra.h συµπεριλαµβάνεται στο πρόγραµµα εφαρµογής, ενώ το αρχείο real_dijkstra.c προµεταγλωττίζεται και προστίθεται στη ϐιβλιοθήκη κώδικα αντικειµένου από τον διασυνδετή 41 / 42

130 Ερωτήσεις ; 42 / 42

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Ενότητα 7 1 / 48 Αδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Ενότητα 6 1 / 35 Ενότητα 6 - Συντοµότερες

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Ενότητα 6 1 / 41 Αδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Ενότητα 8 Μέγιστη Ροή & Αριθµητική Ορθότητα Αλγορίθµων 1

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Ενότητα 8 1 / 44 Αδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Ενότητα 9 1 / 46 Αδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Ασκηση 1 [ ] Παράδοση : Τετάρτη , 13:00

Ασκηση 1 [ ] Παράδοση : Τετάρτη , 13:00 Χρήστος. Ζαρολιάγκης Τεχνολογίες Υλοποίησης Αλγορίθµων : Άσκηση 1 1 Ασκηση 1 [16.03.2016] Παράδοση : Τετάρτη 13.04.2016, 13:00 Η παρούσα άσκηση αφορά στον έλεγχο διµερότητας ενός γραφήµατος. Σκοπός της

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Ενότητα 9 Μέγιστη Ροή ΙΙ Αλγόριθµος Προροής-Προώθησης &

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Ενότητα 3 1 / 25 Ενότητα 3 οκιµή Προγραµµάτων (Program Testing)

Διαβάστε περισσότερα

Μάθημα 21: Ουρές (Queues)

Μάθημα 21: Ουρές (Queues) Queues Page 1 Μάθημα 21: Ουρές (Queues) Η ουρά (queue) είναι μια δομή δεδομένων. Η βασική λειτουργικότητα είναι η εισαγωγή στοιχείων στην πίσω θέση και η εξαγωγή-διαγραφή στοιχείων από την μπροστινή θέση.

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ &

Διαβάστε περισσότερα

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

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Ενότητα 3 Αλγόριθµοι Γραφηµάτων Dijkstra Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Καθηγητής: Ν. Μ. Μισυρλής Αλγόριθµοι και Πολυπλοκότητα - Ενότητα 3 Dijkstra

Διαβάστε περισσότερα

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων

Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων Προηγµένα Θέµατα Τεχνολογιών Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα

Διαβάστε περισσότερα

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

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα 6 Μαΐου 2015 1 / 42 Εύρεση Ελάχιστου Μονοπατιού

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 10 Εισαγωγή στους Αλγορίθμους Φροντιστήριο 10 Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 8 Εισαγωγή στους Αλγορίθμους Φροντιστήριο 8 Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Αλγόριθμοι Eλάχιστα μονοπάτια

Αλγόριθμοι Eλάχιστα μονοπάτια Αλγόριθμοι Eλάχιστα μονοπάτια Μάρθα Σιδέρη Προτεινόμενη βιβλιογραφία: S. Dasgupta, C.H. Papadimitriou, and U.V. Vazirani «Αλγόριθμοι» Κλειδάριθμος 009 Κεφάλαιο. http://www.cs.berkeley.edu/~vazirani/algorithms/chap.pdf

Διαβάστε περισσότερα

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Οργάνωση Προγράµµατος Header Files Μετάφραση και σύνδεση αρχείων προγράµµατος ΕΠΛ 132 Αρχές Προγραµµατισµού

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Ενότητα 5 / 46 Ενότητα 5 Γραφήµατα Γραφήµατα ϐασικές έννοιες

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Ενότητα 10η Εισαγωγή στους Αλγορίθμους Ενότητα 10η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

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

Σχεδίαση & Ανάλυση Αλγορίθμων Σχεδίαση & Ανάλυση Αλγορίθμων Ενότητα 4.2 Διαδρομές σε Γραφήματα Σταύρος Δ. Νικολόπουλος Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Ιωαννίνων Webpage: www.cs.uoi.gr/~stavros Πρόβλημα Οδικό Δίκτυο

Διαβάστε περισσότερα

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους

Επίλυση Προβληµάτων µε Greedy Αλγόριθµους Επίλυση Προβληµάτων µε Greedy Αλγόριθµους Περίληψη Επίλυση προβληµάτων χρησιµοποιώντας Greedy Αλγόριθµους Ελάχιστα Δέντρα Επικάλυψης Αλγόριθµος του Prim Αλγόριθµος του Kruskal Πρόβληµα Ελάχιστης Απόστασης

Διαβάστε περισσότερα

Γράφηµα (Graph) Εργαστήριο 10. Εισαγωγή

Γράφηµα (Graph) Εργαστήριο 10. Εισαγωγή Εργαστήριο 10 Γράφηµα (Graph) Εισαγωγή Στην πληροφορική γράφηµα ονοµάζεται µια δοµή δεδοµένων, που αποτελείται από ένα σύνολο κορυφών ( vertices) (ή κόµβων ( nodes» και ένα σύνολο ακµών ( edges). Ενας

Διαβάστε περισσότερα

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

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Ενότητα 3 Αλγόριθµοι Γραφηµάτων Bellman Ford Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Καθηγητής: Ν. Μ. Μισυρλής Αλγόριθµοι και Πολυπλοκότητα - Ενότητα 3 Bellman

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 7 Εισαγωγή στους Αλγορίθμους Φροντιστήριο 7 Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

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

Δομές Δεδομένων και Αλγόριθμοι Δομές Δεδομένων και Αλγόριθμοι Χρήστος Γκόγκος ΤΕΙ Ηπείρου Χειμερινό Εξάμηνο 2014-2015 Παρουσίαση 18 Dijkstra s Shortest Path Algorithm 1 / 12 Ο αλγόριθμος εύρεσης της συντομότερης διαδρομής του Dijkstra

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Ενότητα 5 1 / 52 Αδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 5 Εισαγωγή στους Αλγορίθμους Φροντιστήριο 5 Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 6 Εισαγωγή στους Αλγορίθμους Φροντιστήριο 6 Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Αλγόριθμοι Γραφημάτων

Αλγόριθμοι Γραφημάτων Αλγόριθμοι Γραφημάτων 1. Συντομότατα μονοπάτια 2. Αλγόριθμος Bellman-Ford 3. Αλγόριθμος Dijkstra 4. Floyd-Warshall Εισαγωγή στην Ανάλυση Αλγορίθμων Μάγια Σατρατζέμη Single-Source Shortest Path Πρόβλημα:

Διαβάστε περισσότερα

Συντομότερες ιαδρομές

Συντομότερες ιαδρομές Συντομότερες ιαδρομές ημήτρης Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Εθνικό Μετσόβιο Πολυτεχνείο Συντομότερη ιαδρομή Κατευθυνόμενο G(V, E, w) με μήκη Μήκος διαδρομής Απόσταση d(u,

Διαβάστε περισσότερα

Συντομότερες Διαδρομές

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

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Εισαγωγή στους Αλγορίθμους Ενότητα 9η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Ελάχιστα Γεννητικά Δένδρα Ελάχιστο Γεννητικό

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Ενότητα 3 1 / 32 Αδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

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

Δοµές Δεδοµένων. 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων. Ε. Μαρκάκης Δοµές Δεδοµένων 11η Διάλεξη Ταξινόµηση Quicksort και Ιδιότητες Δέντρων Ε. Μαρκάκης Περίληψη Quicksort Χαρακτηριστικά επιδόσεων Μη αναδροµική υλοποίηση Δέντρα Μαθηµατικές ιδιότητες Δοµές Δεδοµένων 11-2

Διαβάστε περισσότερα

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων Άσκηση 1 α) Η δομή σταθμισμένης ένωσης με συμπίεση διαδρομής μπορεί να τροποποιηθεί πολύ εύκολα ώστε να υποστηρίζει τις

Διαβάστε περισσότερα

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Λίστες -Υλοποίηση ταξινομημένης λίστας με δυναμική δέσμευση μνήμης ΕΠΛ035

Διαβάστε περισσότερα

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

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα 30 Απριλίου 2015 1 / 48 Εύρεση Ελάχιστου

Διαβάστε περισσότερα

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας

Προγραµµατισµός ΙΙ. Ηγλώσσααντικειµενοστραφούς. ιδάσκων ηµήτριος Κατσαρός, Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας Προγραµµατισµός ΙΙ Ηγλώσσααντικειµενοστραφούς προγραµµατισµού Java ιδάσκων ηµήτριος Κατσαρός, Ph.D. @ Τµ. Μηχανικών Η/Υ, Τηλεπικοινωνιών & ικτύων Πανεπιστήµιο Θεσσαλίας Αυτό-αξιολόγηση 1η: 08/02/2006 1

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Εισαγωγή στους Αλγορίθμους Ενότητα 7η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Αλγόριθμοι Γραφημάτων Τοπολογική Διάταξη

Διαβάστε περισσότερα

Συντομότερες ιαδρομές

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

Διαβάστε περισσότερα

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

Διαβάστε περισσότερα

Συντομότερες ιαδρομές

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

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 3 Εισαγωγή στους Αλγορίθμους Φροντιστήριο 3 Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Συντομότερες Διαδρομές

Συντομότερες Διαδρομές Συντομότερη Διαδρομή Συντομότερες Διαδρομές Διδάσκοντες: Σ Ζάχος, Δ Φωτάκης Επιμέλεια διαφανειών: Δ Φωτάκης Σχολή Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Κατευθυνόμενο G(V, E, w) με μήκη Μήκος

Διαβάστε περισσότερα

4.3. Γραµµικοί ταξινοµητές

4.3. Γραµµικοί ταξινοµητές Γραµµικοί ταξινοµητές Γραµµικός ταξινοµητής είναι ένα σύστηµα ταξινόµησης που χρησιµοποιεί γραµµικές διακριτικές συναρτήσεις Οι ταξινοµητές αυτοί αναπαρίστανται συχνά µε οµάδες κόµβων εντός των οποίων

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Έλεγχος Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Σχεσιακοί Τελεστές και Ισότητας Ένα πρόγραμμα εκτός από αριθμητικές πράξεις

Διαβάστε περισσότερα

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

Δομές Δεδομένων. Δημήτρης Μιχαήλ. Γραφήματα. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Δομές Δεδομένων Γραφήματα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Γραφήματα Κατευθυνόμενο Γράφημα Ένα κατευθυνόμενο γράφημα G είναι ένα ζευγάρι (V, E) όπου V είναι ένα

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη

Δομές Δεδομένων. Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα. Καθηγήτρια Μαρία Σατρατζέμη Ενότητα 7: Άλλες παραλλαγές Συνδεδεμένων Λιστών-Παράσταση Αραιού Πολυωνύμου με Συνδεδεμένη Λίστα Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative

Διαβάστε περισσότερα

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά Α. Μ. Βαθμός Σχόλια 1183 1194 1238 1239 1240 1241 - Καλή δουλειά 1242 1243 1244 1245 - Κακή χρήση συναρτήσεων. Κάνεις τον ίδιο έλεγχο και εντός και εκτός της συνάρτησης. Θα έπρεπε να έχεις βρεί ένα τρόπο

Διαβάστε περισσότερα

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V

Γράφοι. Ορολογία. Ορισµός: G = (V, E) όπου. Ορολογία (συνέχεια) γράφος ή γράφηµα (graph) V:ένα σύνολο E:µια διµελής σχέση στο V Γράφοι Ορολογία γράφος ή γράφηµα (graph) Ορισµός: G = (V, E) όπου V:ένα σύνολο E:µια διµελής σχέση στο V Ορολογία (συνέχεια) κάθε v V ονοµάζεται κορυφή (vertex) ή κόµβος (node) κάθε (v 1, v 2 ) Ε ονοµάζεται

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ &

Διαβάστε περισσότερα

Βραχύτερα Μονοπάτια σε Γράφους (CLR, κεφάλαιο 25)

Βραχύτερα Μονοπάτια σε Γράφους (CLR, κεφάλαιο 25) Βραχύτερα Μονοπάτια σε Γράφους (CLR, κεφάλαιο 25) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Ο αλγόριθµος των BellmanFord Ο αλγόριθµος του Dijkstra ΕΠΛ 232 Αλγόριθµοι και Πολυπλοκότητα 61

Διαβάστε περισσότερα

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2 Version 1.5 (16/03/2017) Σχολή Τεχνολογικών Εφαρμογών (ΣΤΕΦ) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διδάσκων: Γκόγκος Χρήστος Μάθημα: Τεχνητή Νοημοσύνη (εργαστήριο Δ εξαμήνου) Ακαδημαϊκό έτος 2016-2017 εαρινό

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Ενότητα 7η Εισαγωγή στους Αλγορίθμους Ενότητα 7η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου

Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 12: Λίστες Υλοποίηση & Εφαρμογές Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: -Ευθύγραμμες Απλά Συνδεδεμένες Λίστες (εύρεση, εισαγωγή, διαγραφή) - Σύγκριση Συνδεδεμένων Λιστών με Πίνακες

Διαβάστε περισσότερα

Σχήµα 4.1: Εισαγωγή βρόγχου while-loop.

Σχήµα 4.1: Εισαγωγή βρόγχου while-loop. Ο βρόγχος While-loop 1. Ο βρόγχος while-loop εκτελείται έως ότου ικανοποιηθεί µία προκαθορισµένη συνθήκη. 2. Ο αριθµός των επαναλήψεων ενός βρόγχου while-loop δεν είναι εκ των προτέρων προκαθορισµένος,

Διαβάστε περισσότερα

Ιδιοκτησία Αντικειµένου

Ιδιοκτησία Αντικειµένου Software Transactional Memory H STM υποστηρίζει την εκτέλεση δοσοληψιών από τις διεργασίες, οι οποίες περιέχουν λειτουργίες που ο χρήστης θέλει να εκτελέσει στα διαµοιραζόµενα αντικείµενα. H STM εγγυάται

Διαβάστε περισσότερα

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD)

- Αναπαράσταση ακέραιας τιµής : - Εύρος ακεραίων : - Ακέραιοι τύποι: - Πράξεις µε ακεραίους (DIV - MOD) Η Γλώσσα Pascal Χαρακτηριστικά Τύποι Δεδοµένων Δοµή προγράµµατος 1. Βασικές έννοιες Χαρακτηριστικά της γλώσσας Pascal Γλώσσα προγραµµατισµού Συντακτικό Σηµασιολογία Αλφάβητο της γλώσσας Pascal (Σύνολο

Διαβάστε περισσότερα

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

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων Κατ οίκον Εργασία 5 Σκελετοί Λύσεων Άσκηση 1 (α) Ο αλγόριθµος χρησιµοποιεί τη διαδικασία DFS(v) η οποία, ως γνωστό, επισκέπτεται όλους τους κόµβους που είναι συνδεδεµένοι µε τον κόµβο v. Για να µετρήσουµε

Διαβάστε περισσότερα

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

Αλγόριθµοι και Πολυπλοκότητα Αλγόριθµοι και Πολυπλοκότητα Ν. Μ. Μισυρλής Τµήµα Πληροφορικής και Τηλεπικοινωνιών, Πανεπιστήµιο Αθηνών Καθηγητής: Ν. Μ. Μισυρλής () Αλγόριθµοι και Πολυπλοκότητα 26 Ιουνίου 201 1 / Απληστοι (Greedy) Αλγόριθµοι

Διαβάστε περισσότερα

Ενότητα 7 Ουρές Προτεραιότητας

Ενότητα 7 Ουρές Προτεραιότητας Ενότητα Ουρές Προτεραιότητας ΗΥ4 - Παναγιώτα Φατούρου Ουρές Προτεραιότητας Θεωρούµε ένα χώρο κλειδιών U και έστω ότι µε κάθε κλειδί Κ (τύπου Key) έχει συσχετισθεί κάποια πληροφορία Ι (τύπου Type). Έστω

Διαβάστε περισσότερα

Ελάχιστο Γεννητικό Δένδρο. Παράδειγμα - Αλγόριθμος Prim. Γιατί δουλεύουν αυτοί οι αλγόριθμοι;

Ελάχιστο Γεννητικό Δένδρο. Παράδειγμα - Αλγόριθμος Prim. Γιατί δουλεύουν αυτοί οι αλγόριθμοι; Άπληστοι Αλγόριθμοι ΙΙI Αλγόριθμοι γραφημάτων Ελάχιστο Γεννητικό Δένδρο Παράδειγμα Κατασκευή δικτύων Οδικά, επικοινωνίας Έχουμε ένα συνεκτικό γράφημα (V,E) και ένας βάρος we σε κάθε ακμή e. Να βρεθεί υποσύνολο

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Γλώσσα Προγραμματισμού C

Γλώσσα Προγραμματισμού C Προγραμματισμός HY: Γλώσσα Προγραμματισμού C Δρ. Ηλίας Κ. Σάββας, Αναπληρωτής Καθηγητής, Τμήμα Μηχανικών Πληροφορικής Τ.Ε., T.E.I. Θεσσαλίας Email: savvas@teilar.gr URL: http://teilar.academia.edu/iliassavvas

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Ενότητα 9η Εισαγωγή στους Αλγορίθμους Ενότητα 9η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 ΠΕΡΙΕΧΟΜΕΝΟ ΤΟΥ ΜΑΘΗΜΑΤΟΣ Αρχές

Διαβάστε περισσότερα

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

Δομές Δεδομένων & Αλγόριθμοι Ουρές Ουρές Περίληψη Η ΟυράΑΔΤ Υλοποίηση με κυκλικό πίνακα Αυξανόμενη Ουρά βασισμένη σε πίνακα Interface ουράς στην C++ Η Ουρά ADT Η ΑΔΤ Ουρά αποθηκεύει αυθαίρετα αντικείμενα Οι εισαγωγές και διαγραφές

Διαβάστε περισσότερα

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις Μιχάλης Δρακόπουλος Σχολή Θετικών επιστημών Τμήμα Μαθηματικών Συναρτήσεις 60 Ροή ελέγχου Είναι η σειρά µε την οποία εκτελούνται οι εντολές. Μέχρι τώρα, «σειριακή»,

Διαβάστε περισσότερα

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI

ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΠΙΣΤΗΜΟΝΩΝ ΚΑΙ ΕΠΑΓΓΕΛΜΑΤΙΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΜΕΛΟΣ IFIP, IOI 20 ος ΠΑΝΕΛΛΗΝΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΛΥΣΕΙΣ ΘΕΜΑΤΩΝ ΤΕΛΙΚΗΣ ΦΑΣΗΣ Με εξαίρεση το 3ο θέμα, στα 2 πρώτα, υποβλήθηκαν περισσότερες από μία βέλτιστες λύσεις (100% σημείων επιτυχίας). Από αυτές τελείως

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Κεφάλαιο : Επαναλήψεις (for, do-while)

Κεφάλαιο : Επαναλήψεις (for, do-while) Κεφάλαιο 5.4-5.11: Επαναλήψεις (for, do-while) 10-1 Εντολές Επανάληψης που θα καλυφθούν σήµερα while(){ τελεστές postfix/prefix (++, --,...) και σύνθετοι τελεστές Παραδείγµατα Σήµερα for(){ Η εντολές break/continue;

Διαβάστε περισσότερα

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

Οντοκεντρικός Προγραμματισμός Οντοκεντρικός Προγραμματισμός Ενότητα 5: H ΓΛΩΣΣΑ C++ Δομές Ελέγχου ΔΙΔΑΣΚΟΝΤΕΣ: Ιωάννης Χατζηλυγερούδης, Χρήστος Μακρής Πολυτεχνική Σχολή Τμήμα Μηχανικών Η/Υ & Πληροφορικής Δομές Ελέγχου Εισαγωγή Πριν

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Φροντιστήριο 4 Εισαγωγή στους Αλγορίθμους Φροντιστήριο 4 Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό

Διαβάστε περισσότερα

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής

Στοίβες - Ουρές. Στοίβα (stack) Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής Στοίβες - Ουρές Γιάννης Θεοδωρίδης, Νίκος Πελέκης, Άγγελος Πικράκης Τµήµα Πληροφορικής οµές εδοµένων 1 Στοίβα (stack) οµή τύπουlifo: Last In - First Out (τελευταία εισαγωγή πρώτη εξαγωγή) Περιορισµένος

Διαβάστε περισσότερα

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

Κατ οίκον Εργασία 2 Σκελετοί Λύσεων Κατ οίκον Εργασία 2 Σκελετοί Λύσεων 1. Ο αλγόριθµος κτίζει όλες τις δυνατές αναθέσεις εργασιών στους φοιτητές (υπάρχουν n! διαφορετικές αναθέσεις) και επιστρέφει εκείνη µε το µέγιστο βαθµό καταλληλότητας.

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Εισαγωγή στους Αλγορίθμους Ενότητα 4η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Ευσταθές Ταίριασμα Πρόβλημα Ευσταθούς Ταιριάσματος

Διαβάστε περισσότερα

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

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου Διάλεξη 3: Προγραμματισμός σε JAVA I Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Στοιχειώδης Προγραμματισμός - Προγραμματισμός με Συνθήκες - Προγραμματισμός με Βρόγχους

Διαβάστε περισσότερα

Τεχνολογίες Υλοποίησης Αλγορίθµων

Τεχνολογίες Υλοποίησης Αλγορίθµων Τεχνολογίες Υλοποίησης Αλγορίθµων Χρήστος Ζαρολιάγκης Καθηγητής Τµήµα Μηχ/κων Η/Υ & Πληροφορικής Πανεπιστήµιο Πατρών email: zaro@ceid.upatras.gr Γρηγόρης Πράσινος Υποψήφιος ιδάκτωρ Τµήµα Μηχ/κων Η/Υ &

Διαβάστε περισσότερα

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 2: Εφαρμογές Δικτυωτής Ανάλυσης (1 ο Μέρος)

Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 2: Εφαρμογές Δικτυωτής Ανάλυσης (1 ο Μέρος) Πληροφοριακά Συστήματα Διοίκησης (ΜΒΑ) Ενότητα 2: Εφαρμογές Δικτυωτής Ανάλυσης (1 ο Μέρος) Μπεληγιάννης Γρηγόριος Σχολή Οργάνωσης και Διοίκησης Επιχειρήσεων Τμήμα Διοίκησης Επιχειρήσεων Αγροτικών Προϊόντων

Διαβάστε περισσότερα

Ενότητα 7 Ουρές Προτεραιότητας

Ενότητα 7 Ουρές Προτεραιότητας Ενότητα 7 Ουρές Προτεραιότητας ΗΥ240 - Παναγιώτα Φατούρου Ουρές Προτεραιότητας Θεωρούµε ένα χώρο κλειδιών U και έστω ότι µε κάθε κλειδί Κ (τύπου Key) έχει συσχετισθεί κάποια πληροφορία Ι (τύπου Type).

Διαβάστε περισσότερα

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι 5.1 Η έννοια του αλγορίθµου 5.2 Αναπαράσταση αλγορίθµων 5.3 Επινόηση αλγορίθµων 5.4 Δοµές επανάληψης 5.5 Αναδροµικές δοµές 1 Αλγόριθµος: Ορισµός Ένας αλγόριθµος είναι ένα διατεταγµένο

Διαβάστε περισσότερα

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1 ΑΕΜ ΒΑΘΜΟΣ 449 PASS 451 PASS 476-1733 PASS 1779-1899 FAIL 1900 FAIL Page 1 1901 PASS 1904 PASS 1908 PASS 1909 PASS 1910 - Page 2 1911 PASS 1914 Οριακό PASS 1915 PASS 1926 PASS Page 3 1927 PASS 1928 Οριακό

Διαβάστε περισσότερα

Συλλογές, Στοίβες και Ουρές

Συλλογές, Στοίβες και Ουρές Συλλογές, Στοίβες και Ουρές Σε πολλές εφαρμογές μας αρκεί η αναπαράσταση ενός δυναμικού συνόλου με μια δομή δεδομένων η οποία δεν υποστηρίζει την αναζήτηση οποιουδήποτε στοιχείου. Συλλογή (bag) : Επιστρέφει

Διαβάστε περισσότερα

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

Κατ οίκον Εργασία 5 Σκελετοί Λύσεων Κατ οίκον Εργασία 5 Σκελετοί Λύσεων Άσκηση 1 Χρησιμοποιούμε τις δομές: struct hashtable { struct node array[maxsize]; int maxsize; int size; struct node{ int data; int status; Στο πεδίο status σημειώνουμε

Διαβάστε περισσότερα

Άσκηση 1. Ψευδοκώδικας Kruskal. Παρακάτω βλέπουμε την εφαρμογή του στο παρακάτω συνδεδεμένο γράφημα.

Άσκηση 1. Ψευδοκώδικας Kruskal. Παρακάτω βλέπουμε την εφαρμογή του στο παρακάτω συνδεδεμένο γράφημα. Άσκηση 1 Ψευδοκώδικας Kruskal Παρακάτω βλέπουμε την εφαρμογή του στο παρακάτω συνδεδεμένο γράφημα. Αντιστοιχίζω τους κόμβους με αριθμούς από το 0 έως το 4. 2Η ΕΡΓΑΣΙΑ ΑΛΓΟΡΙΘΜΟΙ & ΠΟΛΥΠΛΟΚΟΤΗΤΑ - MAY 2018

Διαβάστε περισσότερα

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

Κατ οίκον Εργασία 4 Σκελετοί Λύσεων Κατ οίκον Εργασία Σκελετοί Λύσεων Άσκηση Αναδρομική διαδικασία Η αναδρομική διαδικασία RecIsheap παίρνει ως παραμέτρους τον πίνακα, το μέγεθός του καθώς και το στοιχείο το οποίο θα τύχει επεξεργασίας.

Διαβάστε περισσότερα

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα

ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα Τύπος Δεδομένων: ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα - Ένας ΑΤΔ είναι ένα μαθηματικό μοντέλο (οντότητα)

Διαβάστε περισσότερα

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

Αλγόριθμοι και Πολυπλοκότητα Αλγόριθμοι και Πολυπλοκότητα Άπληστοι Αλγόριθμοι Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Άπληστοι Αλγόριθμοι Είναι δύσκολο να ορίσουμε ακριβώς την έννοια του άπληστου

Διαβάστε περισσότερα

Βασικές Έννοιες Δοµών Δεδοµένων

Βασικές Έννοιες Δοµών Δεδοµένων Δοµές Δεδοµένων Δοµές Δεδοµένων Στην ενότητα αυτή θα γνωρίσουµε ορισµένες Δοµές Δεδοµένων και θα τις χρησιµοποιήσουµε για την αποδοτική επίλυση του προβλήµατος του ευσταθούς ταιριάσµατος Βασικές Έννοιες

Διαβάστε περισσότερα

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1

ΕΠΛ 231 Δοµές Δεδοµένων και Αλγόριθµοι 11-1 Γράφοι Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Γράφοι - ορισµοί και υλοποίηση Διάσχιση Γράφων Τοπολογική Ταξινόµηση ΕΠΛ 23 Δοµές Δεδοµένων και Αλγόριθµοι - Γράφοι Η πιο γενική µορφή δοµής

Διαβάστε περισσότερα

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

Εισαγωγή στους Αλγορίθμους Εισαγωγή στους Αλγορίθμους Ενότητα 3η Διδάσκων Χρήστος Ζαρολιάγκης Καθηγητής Τμήμα Μηχανικών Η/Υ & Πληροφορικής Πανεπιστήμιο Πατρών Email: zaro@ceid.upatras.gr Απλοί Αλγόριθμοι & Δομές Δεδομένων Δύο Απλές

Διαβάστε περισσότερα

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ ΕΠΛ 032 2 ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ Ενδιάμεση Εξέταση Ημερομηνία:08/03/10 Διάρκεια: 13:30 15:00 Διδάσκων: Παύλος Αντωνίου Ονοματεπώνυμο: Αριθμός Ταυτότητας: Η εξέταση

Διαβάστε περισσότερα

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου,

ΕΠΛ 231 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, Γράφοι Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Γράφοι - ορισµοί και υλοποίηση Τοπολογική Ταξινόµηση ιάσχιση Γράφων ΕΠΛ 23 οµές εδοµένων και Αλγόριθµοι Άννα Φιλίππου, 26 - Γράφοι Ηπιο

Διαβάστε περισσότερα

Προγραμματισμός ΙΙ Εαρινό εξάμηνο Εργασία 3 Βιβλιοθήκη για λειτουργίες σε γράφους

Προγραμματισμός ΙΙ Εαρινό εξάμηνο Εργασία 3 Βιβλιοθήκη για λειτουργίες σε γράφους Εργασία 3 Βιβλιοθήκη για λειτουργίες σε γράφους Αναπτύξτε μια βιβλιοθήκη για την δημιουργία / διαχείριση γράφων και την υποστήριξη βασικών λειτουργιών αναζήτησης σε αυτούς. Η βιβλιοθήκη πρέπει να υποστηρίζει

Διαβάστε περισσότερα

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις

Περιεχόµενα. Ανασκόπηση - Ορισµοί. Ο κύκλος ανάπτυξης προγράµµατος. Γλώσσες Προγραµµατισµού Ασκήσεις Προγραµµατισµός Η/Υ Ανασκόπηση - Ορισµοί Περιεχόµενα Ο κύκλος ανάπτυξης προγράµµατος Περιγραφή προβλήµατος Ανάλυση προβλήµατος Λογικό ιάγραµµα Ψευδοκώδικας Κωδικοποίηση Συντήρηση Γλώσσες Προγραµµατισµού

Διαβάστε περισσότερα

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT)

ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) Τύπος Δεδομένων: ΑΦAΙΡΕΤΙΚΟΣ (ή ΑΦΗΡΗΜΕΝΟΣ) ΤΥΠΟΣ ΔΕΔΟΜΕΝΩΝ (ΑΤΔ) (Abstract Data Type-ADT) - σύνολο δεδομένων (data, objects) - σύνολο πράξεων στα δεδομένα - Ένας ΑΤΔ είναι ένα μαθηματικό μοντέλο (οντότητα)

Διαβάστε περισσότερα

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ ΠΛΗΡΟΦΟΡΙΚΗ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Εισαγωγή στη Python Νικόλαος Ζ. Ζάχαρης Αναπληρωτής

Διαβάστε περισσότερα

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες

Δομές Δεδομένων. Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες Ενότητα 6: Εφαρμογή Συνδεδεμένων Λιστών: Αλφαβητικό ευρετήριο κειμένου- Υλοποίηση ΑΤΔ Στοίβα και Ουρά με δείκτες Καθηγήτρια Μαρία Σατρατζέμη Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες

Διαβάστε περισσότερα

m 1 min f = x ij 0 (8.4) b j (8.5) a i = 1

m 1 min f = x ij 0 (8.4) b j (8.5) a i = 1 KΕΦΑΛΑΙΟ 8 Προβλήµατα Μεταφοράς και Ανάθεσης 8. ΕΙΣΑΓΩΓΗ Μια ειδική κατηγορία προβληµάτων γραµµικού προγραµµατισµού είναι τα προβλήµατα µεταφοράς (Π.Μ.), στα οποία επιζητείται η ελαχιστοποίηση του κόστους

Διαβάστε περισσότερα