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



Σχετικά έγγραφα
ΕΚΤΕΛΕΣΤΙΚΗ ΕΠΙΤΡΟΠΗ ΦΙΛΕΛΛΗΝΩΝ & ΨΥΛΛΑ ΑΘΗΝΑ Τηλ Fax adedy@adedy.gr, adedy1@adedy.gr

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ Ι ΡΥΜΑ ΚΡΗΤΗΣ ΣΧΟΛΗ ΙΟΙΚΗΣΗΣ ΟΙΚΟΝΟΜΙΑΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ

Προδημοσιεύτηκαν τα τέσσερις πρώτα προγράμματα του νέου ΕΣΠΑ που αφορούν

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

ΕΚΤΙΜΗΣΗ ΚΑΙ ΑΝΑΛΥΣΗ ΠΕΡΙΒΑΛΛΟΝΤΙΚΩΝ ΕΠΙΠΤΩΣΕΩΝ Α.Π.Ε ΜΕ ΈΜΦΑΣΗ ΣΤΑ ΑΙΟΛΙΚΑ ΚΑΙ ΦΩΤΟΒΟΛΤΑΪΚΑ ΣΥΣΤΗΜΑΤΑ ΠΑΠΑ ΟΓΙΑΝΝΑΚΗΣ ΜΙΧΑΛΗΣ ΧΑΝΙΑ ΣΕΠΤΕΜΒΡΙΟΣ 2009

03-00: Βιομάζα για παραγωγή ενέργειας Γενικά ζητήματα εφοδιαστικών αλυσίδων

Η ΦΙΛΙΑ..!!! Η ΑΞΙΑ ΤΗΣ ΦΙΛΙΑΣ

Σηµειώσεις στο ταξινοµούµε

& ../../ , :.. : FAX :... & :...

Αρµοδιότητες Αυτοτελούς Τµήµατος Δηµοτικής Αστυνοµίας

Δασικά Οικοσυστήματα και Τεχνικά Έργα

Σεμινάριο με θέμα : Εθελοντισμός & Δικαιώματα Παιδιού

ΘΕΜΑΤΑ ΚΑΝΟΝΙΣΜΩΝ ΒΙΒΛΙΟ ΠΕΡΙΠΤΩΣΕΩΝ ΠΕΡΙΕΧΟΜΕΝΑ

Ευρώπη: Μια κοινότητα αξιών

ΑΠΟΚΑΤΑΣΤΑΣΗ ΚΑΙ ΕΠΑΝΑΧΡΗΣΗ ΤΟΥ ΧΩΡΟΥ ΤΟΥ ΧΑΝΙΟΥ ΤΟΥ ΙΜΠΡΑΗΜ ΚΩΔΙΚΟΣ ΔΙΑΓΩΝΙΖΟΜΕΝΟΥ: 12234

ΟΣΤΑ & ΣΚΕΛΕΤΙΚΟ ΣΥΣΤΗΜΑ

ΚΕΦΑΛΑΙΟ 8 ΣΥΜΠΕΡΑΣΜΑΤΑ

" Συμμετοχή στήν ψαλτή λατρεία"

ΕΛΑΦΡΙΕΣ ΜΕΤΑΛΛΙΚΕΣ ΚΑΤΑΣΚΕΥΕΣ ΣΥΝΤΑΚΤΗΣ: ΝΑΝΣΥ ΣΑΚΚΑ

Δρ.ΠΟΛΥΚΑΡΠΟΣ ΕΥΡΙΠΙΔΟΥ

ΚΕΦΑΛΑΙΟ 3 ο ΤΟ ΜΕΛΛΟΝ ΤΗΣ ΕΥΡΩΠΑΪΚΗΣ ΕΝΩΣΗΣ. 3.1 Εισαγωγή

Όταν το μάθημα της πληροφορικής γίνεται ανθρωποκεντρικό μπορεί να αφορά και την εφηβεία.

ΥΠΟΣΤΗΡΙΞΗ ΑΝΑΣΚΑΦΙΚΟΥ ΕΡΓΟΥ

ΗΛΙΟΠΡΟΣΤΑΣΙΑ ΑΥΤΟΣΚΙΑΣΜΟΣ ΤΟΥ ΚΤΗΡΙΑΚΟΥ ΚΕΛΥΦΟΥΣ

Θέσεις της Α..Ε..Υ. «Νοµοσχέδιο για την Ηλεκτρονική ιακυβέρνηση»

Εργατικά ατυχήµατα στο δρόµο

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

Τοποθέτηση Δημάρχου Γ. Πατούλη. για τεχνικό πρόγραμμα 2010

ΕΡΓΟ : Ελαιοχρωµατισµοί 4 ου & 50 ου ηµοτικών ΤΙΜΟΛΟΓΙΟ ΜΕΛΕΤΗΣ

Σοφία Γιουρούκου, Ψυχολόγος Συνθετική Ψυχοθεραπεύτρια

ΚΕΦΑΛΑΙΟ 7 ΣΥΜΠΕΡΑΣΜΑΤΑ ΚΑΙ ΠΡΟΤΑΣΕΙΣ

Κατασκηνωτικές Σκέψεις

ΔΕΛΤΙΟ ΤΥΠΟΥ. Ακολουθεί ολόκληρη η τοποθέτηση - παρέμβαση του Υπουργού Δ.Μ.&Η.Δ.

ΙΕΘΝΗΣ ΣΥΜΒΑΣΗ ΕΡΓΑΣΙΑΣ 183 «για την αναθεώρηση της (αναθεωρηµένης) σύµβασης για την προστασία της µητρότητας,»

ΤΜΗΜΑ ΛΟΓΙΣΤΙΚΗΣ ΚΑΙ ΧΡΗΜΑΤΟΟΙΚΟΝΟΜΙΚΗΣ ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥ ΩΝ ΣΤΗΝ ΕΦΑΡΜΟΣΜΕΝΗ ΛΟΓΙΣΤΙΚΗ ΚΑΙ ΕΛΕΓΚΤΙΚΗ. ιπλωµατική Εργασία.

Ασυντήρητες και επικίνδυνες οικοδομές

4 5 6 Δεκεμβρίου 2015 Στάδιο Ειρήνης και Φιλίας

ΑΝΑΚΟΙΝΩΣΗ ΥΠ ΑΡΙΘΜ. ΣΟΧ 3/2015. Για την πρόσληψη Πτυχιούχων Φυσικής Αγωγής. με σύμβαση εργασίας Ιδιωτικού Δικαίου Ορισμένου Χρόνου (Ι.Δ.Ο.Χ.

5. Χρηματοδότηση Σ.Α.

Συνοπτική Παρουσίαση. Ελλάδα

Σχολή Αναρρίχησης Βράχου Μέσου Επιπέδου Άνοιξη 2014

ΚΩΔΙΚΑΣ ΔΕΟΝΤΟΛΟΓΙΑΣ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΝΑΥΠΗΓΩΝ ΜΗΧ/ΓΩΝ ΜΗΧΑΝΙΚΩΝ. ΘΕΜΑ: Προστασία µε επιµεταλλώσεις. Σκαβάρας Παναγιώτης

Αυτός που δεν μπορεί να δει τα μικρά πράγματα είναι τυφλός και για τα μεγαλύτερα. (Κομφούκιος, πχ)

Φασίστες και αφεντικά στου πηγαδιού τον πάτο, ζήτω το παγκόσμιο προλεταριάτο.

ΦΥΣΙΚΟΣ ΑΕΡΙΣΜΟΣ - ΡΟΣΙΣΜΟΣ

ραστηριότητες για προθέρµανση

ΒΑΣΙΚΗ ΕΚΠΑΙΔΕΥΣΗ. Οδηγός Οργάνωσης και Λειτουργίας ΕΚΔΟΣΗ 1.0

, νηπιαγωγός

ΔΙΑΔΟΣΗ ΘΕΡΜΟΤΗΤΑΣ Φυσική Β' Γυμνασίου. Επιμέλεια: Ιωάννης Γιαμνιαδάκης

γραμματισμό των νηπίων

237 Χημικών Μηχανικών Θεσσαλονίκης

OIKONOMIKEΣ ΕΞΕΛΙΞΕΙΣ

ΑΝΑΚΥΚΛΩΣΗ ΤΗΓΑΝΕΛΑΙΟΥ ΓΙΑΤΙ - ΠΩΣ - ΠΟΤΕ

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

Εισαγωγή: ακαδηµαϊκά αδικήµατα και κυρώσεις

Ηλεκτρονική Υπηρεσία Υποβολής Αιτήσεων Εισδοχής σε Φοιτητικές Εστίες

1. Εισαγωγή. 2. Καταπολέμηση της φοροδιαφυγής

/ΝΣΗ ΤΕΧΝΙΚΩΝ ΥΠΗΡΕΣΙΩΝ

ΠΡΟΒΛΗΜΑΤΑ ΤΗΣ ΔΗΜΟΣΙΑΣ ΖΩΗΣ, ΜΙΑ ΨΥΧΑΝΑΛΥΤΙΚΗ ΠΡΟΣΕΓΓΙΣΗ

ΓΕΝΙΚΕΣ ΑΡΧΕΣ ΑΧΡΗΜΑΤΗΣ ΚΟΙΝΩΝΙΑΣ

ΑΝΑΝΕΩΣΙΜΕΣ ΠΗΓΕΣ ΕΝΕΡΓΕΙΑΣ (Α.Π.Ε)

Θεµατικές ενότητες: παρεµβάσεις και ενδεικτικές υποθέσεις. 1. Οικονοµική πολιτική. Παρεµβάσεις οικονοµικού χαρακτήρα

Η ποιότητα ζωής στις Σέρρες σήμερα

ΓΕΝΙΚΕΣ ΟΔΗΓΙΕΣ ΧΕΙΡΙΣΜΟΥ ΚΑΙ ΕΠΙΘΕΩΡΗΣΗΣ ΓΕΡΑΝΟΓΕΦΥΡΑΣ

Αντωνία Αθανασοπούλου

TEI ΚΑΛΑΜΑΤΑΣ ΣΧΟΛΗ ΔΙΟΙΚΗΣΗΣ & ΟΙΚΟΝΟΜΙΑΣ

ΕΥΡΥΖΩΝΙΚΟ ΔΙΑΔΙΚΤΥΟ ΚΑΙ

11. Προϋπολογισμός Προϋπολογισμός και αποδοτικότητα δημοσίων υπηρεσιών: υφιστάμενη κατάσταση

Η ΔΙΑΘΕΜΑΤΙΚΗ ΤΗΣ ΔΙΑΘΕΜΑΤΙΚΗΣ

ΑΠΟΤΙΜΗΣΗ ΤΟΥ ΕΡΓΟΥ ΤΟΥ ΤΜΗΜΑΤΟΣ ΣΤΟΧΟΙ ΓΙΑ ΤΗΝ ΠΕΡΙΟΔΟ

Το σχέδιο έχει ως βάση ένα ενιαίο σύστημα κλειστών αγωγών το οποίο εκτείνεται

Πρόγραµµα για τη µείωση των καθηµερινών προβληµάτων στην Αθήνα

Το Βαρόμετρο του Παρατηρητηρίου: Ποιότητα των Δημόσιων Υπηρεσιών προς Επιχειρήσεις

ΕΘΙΜΑ ΤΟΥ ΚΟΣΜΟΥ. Αγγελική Περιστέρη Α 2

ΜΗΝΙΑΙΟ ΕΛΤΙΟ ΙΟΥΝΙΟΥ 2007

ΠΕΡΙΦΕΡΕΙΑΚΗ ΕΦΟΡΕΙΑ ΑΘΗΝΩΝ. Αθήνα, 19 Ιανουαρίου 2015 Α ΝΑΚΟΙΝΩΣΗ 3/15. ΠΡΟΣ : Όλους τους Βαθμοφόρους της Αθήνας ΚΟΙΝΟΠΟΙΗΣΗ :

5. ΤΙΜΟΛΟΓΙΟ ΜΑΡΤΙΟΣ K:\A61500\Design\tenders\2013_6151_drills_5243\Tefhi\Timologio_5243.DOC

1. Τα Ιατρικά Έξοδα που µπορεί να καταβάλει η Επιτροπή Ασθενειών που προκαλούνται από Πνευµονοκονίαση:

Μέθοδοι διαχωρισμού των συστατικών ενός ετερογενούς μείγματος

Με την ασφάλιση αυτή καλύπτεται ζηµία στα ασφαλισµένα αντικείµενα αµέσως προερχόµενη από πρόσκρουση

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

Νάουσα Εισαγωγή. Κλωστοϋφαντουργία

Από το ξεκίνημά του ο ΤΙΤΑΝ εκφράζει

ΕΞΑΛΚΟ Α.Ε. ΒΙΟΜΗΧΑΝΙΑ ΑΛΟΥΜΙΝΙΟΥ

ΤΙΜΟΛΟΓΙΟ ΜΕΛΕΤΗΣ Τιµαριθµική 2012Γ

ΝΕΟΕΛΛΗΝΙΚΗ ΓΛΩΣΣΑ Γ ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ

Θεσσαλονίκη, 08/11/2011. Αρ. Πρωτ.: Α Κωδ.Εγγρ.: Ε22/250/ΓΚ/1975/γκ

Αρωματικά φυτά της Ελλάδας

ΠΡΟΣΚΛΗΣΗ. των Τοπικών Προϊόντων. του Δήμου Σητείας. «Σητείας Γη»

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

ΕΛΤΙΟ Ε ΟΜΕΝΩΝ ΑΣΦΑΛΕΙΑΣ

...ακολουθώντας τη ροή... ένα ημερολόγιο εμψύχωσης

Πρόγραμμα Σπουδών για το "Νέο Σχολείο"

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

Βασικά σημεία διάλεξης

ΠΡΟΣΛΗΨΕΙΣ ΚΑΙ ΕΙΚΟΝΕΣ ΤΗΣ ΕΛΛΑΔΑΣ

Έρευνα συμπεριφοράς και προτιμήσεων καταναλωτών και μερίδιο αγοράς που έχουν συγκεκριμένες πιάτσες των Χανίων.

Συνωμοσία Πυρήνων της Φωτιάς - Πυρήνας Αντάρτικου Πόλης

ΑΝΑΚΟΙΝΩΣΗ ΣΟΧ 3/2015 για τη σύναψη ΣΥΜΒΑΣΗΣ ΕΡΓΑΣΙΑΣ ΟΡΙΣΜΕΝΟΥ ΧΡΟΝΟΥ. Η Κοινωφελής ηµοτική Επιχείρηση ήµου Αµπελοκήπων-Μενεµένης

Transcript:

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

Εισαγωγή Ο σκοπός της Boost Graph Library είναι η υλοποίηση γενικευµένων αλγορίθµων για γραφήµατα. Παρόµοια µε την STL, οι ιδιότητες και οι διάφοροι τρόποι αναπαράστασης ενός γραφήµατος περιγράφονται γενικευµένα και οι αλγόριθµοι προσπελαύνουν τα γραφήµατα µέσω ειδικών iterators χωρίς να εξαρτώνται από την εσωτερική τους αναπαράσταση. Με την περιγραφή των concepts που παρουσιάζονται στους αλγορίθµους γραφηµάτων η BGL ϕιλοδοξεί να είναι µια ανοικτή και εύκολα επεκτάσιµη ϐιβλιοθήκη χωρίς να ϑυσιάζει ορθότητα και αποδοτικότητα. 2 / 21

Κόµβοι και ακµές Το απλούστερο concept στη BGL είναι το Graph που ορίζει ότι ένα γράφηµα πρέπει να έχει κόµβους και ακµές. Η αναγνώριση και η προσπέλαση των κόµβων και των ακµών ενός γραφήµατος πραγµατοποιείται µέσω των descriptors. Οι descriptors παρέχονται από την κλάση graph_traits που αντιστοιχεί στην εκάστοτε κλάση γραφήµατος. Οι descriptors κόµβων και ακµών παρέχουν έναν τελεστή ανάθεσης και έλεγχο ισότητας. 3 / 21

Περιγραφείς κόµβων και ακµών Παράδειγµα: ανίχνευση self-loops. template<typename Graph> bool isselfloop(typename graph_traits<graph> ::edge_descriptor e, const Graph &g) { typename graph_traits<graph> ::vertex_descriptor u, v; u = source(e, g); v = target(e, g); return u == v; } 4 / 21

Property maps Συνήθως σε ένα γράφηµα υπάρχει κάποια πληροφορία (float συντεταγµένες, int αποστάσεις) που συσχετίζεται µε τους κόµβους και τις ακµές του. Μία τέτοια συσχέτιση µπορεί να υλοποιηθεί µε πολλούς τρόπους (π.χ. µε node_arrays και edge_arrays στη LEDA). Για τη συγγραφή γενικευµένων αλγορίθµων απαιτείται ένας γενικευµένος τρόπος πρόσβασης σε αυτή τη πληροφορία που να είναι ανεξάρτητος από την υλοποίηση. Στη BGL χρησιµοποιείται το concept του property map. Π.χ. Το concept του LvaluePropertyMap ορίζει τρεις µεθόδους: - get(p_map, key): επιστρέφει την τιµή που αντιστοιχεί στο κλειδί key - put(p_map, key, value): εισάγει ή ενηµερώνει το (key, value) - p_map[key]: επιστρέφει µία αναφορά στην αντίστοιχη τιµή value 5 / 21

ιάτρεξη γραφήµατος Για να µπορούµε να προσπελαύνουµε ένα γράφηµα, η BGL ορίζει 5 ϐασικά είδη iterators: vertex_iterator: ιάσχιση κόµβων του γραφήµατος. Παρέχει πρόσβαση σε vertex descriptors. edge_iterator: ιάσχιση ακµών του γραφήµατος. Παρέχει πρόσβαση σε edge descriptors. out_edge_iterator: ιάσχιση εξερχόµενων ακµών ενός κόµβου. in_edge_iterator: ιάσχιση εισερχόµενων ακµών ενός κόµβου. adjacency_iterator: ιάσχιση προσκείµενων κόµβων ενός κόµβου. 6 / 21

ιάτρεξη γραφήµατος Κάθε τύπος γραφήµατος παρέχει τους δικούς του iterators µέσω της κλάσης graph_traits. Για να οριοθετηθεί το πρώτο και το τελευταίο στοιχείο, είτε για κόµβους std::pair<vertex_iterator, vertex_iterator> είτε για ακµές std::pair<edge_iterator, edge_iterator>, από τις παρακάτω συναρτήσεις παρέχονται οι iterators που δείχνουν στην αρχή και στο τέλος της συλλογής των στοιχείων : - vertices(g) - edges(g) - out_edges(v, g) - in_edges(v, g) - adjacent_vertices(v, g) 7 / 21

Κατασκευή και διαχείριση γραφήµατος Το concept που περιγράφει την προσθήκη και διαγραφή κόµβων και ακµών είναι το MutableGraph. Οι αντίστοιχες συναρτήσεις είναι: - add_vertex(g) - remove_vertex(g) - add_edge(s, t, g) - remove_edge(s, t, g) Η add_vertex() επιστρέφει τον αντίστοιχο vertex descriptor ενώ η add_edge() ένα std::pair που περιέχει τον αντίστοιχο edge descriptor και ένα flag που υποδεικνύει αν έγινε η εισαγωγή ή όχι. 8 / 21

Η ιδέα της επίσκεψης Η STL παρέχει τη δυνατότητα προσαρµογής της συµπεριφοράς των αλγορίθµων µε χρήση του κατάλληλου functor (π.χ. sort). Η BGL παρέχει έναν παρόµοιο µηχανισµό για την προσαρµογή αλγορίθµων γραφηµάτων, τους algorithm visitors. Ενας visitor δεν παρέχει τον operator() αλλά πολλές µεθόδους οι οποίες καλούνται σε συγκεκριµένα σηµεία του αλγορίθµου (π.χ. κατά την ανακάλυψη ή εγκατάλειψη ενός κόµβου). Η BGL ορίζει 4 (προς το παρόν) είδη visitors και τις µεθόδους τους: BFS, DFS, Dijkstra, BellmanFord. 9 / 21

Η ιδέα της επίσκεψης - Παράδειγµα template<typename VertexNameMap> class bfs_name_printer : public default_bfs_visitor { public: bfs_name_printer(vertexnamemap n_map) : m_name_map(n_map) { } template<typename Vertex, typename Graph> void discover_vertex(vertex u, const Graph &) const { std::cout << m_name_map[u] << " "; } private: VertexNameMap m_name_map; }; 10 / 21

Η ιδέα της επίσκεψης - Παράδειγµα ηµιουργείται ένα στιγµιότυπο του bfs_name_printer και δίνεται σαν όρισµα στη breadth_first_search(): std::map<vertex, std::string> names; // Assume "names" is filled with values names[u1]="iqpatras2015"; names[u2]="algo2015"; // Make a property map out of the std::map typedef associative_property_map< std::map<vertex, std::string> > VertexNameMap; VertexNameMap name_map(names); bfs_name_printer<vertexnamemap> vis(name_map); // Using named parameters version of bfs breadth_first_search(g, s, visitor(vis)); 11 / 21

Κλάσεις γραφηµάτων Η BGL παρέχει τρεις τύπους γραφηµάτων: adjacency_list, adjacency_matrix, και compressed_sparse_row_graph. Οι τρεις τύποι µοντελοποιούν διαφορετικά concepts οπότε προσφέρουν διαφορετική πρόσβαση στους κόµβους και τις ακµές του γραφηµατος. Π.χ. το adjacency_list δεν µοντελοποιεί το BidirectionalGraph (πρόσβαση σε εισερχόµενες ακµές) οπότε δεν παρέχει τον iterator in_edges() ενώ το compressed_sparse_row_graph δεν µοντελοποιεί το MutableGraph, προσφέρει δηλαδή ένα στατικό γράφηµα. 12 / 21

Κλάσεις γραφηµάτων - adjacency_list Η κλάση adjacency_list είναι template µε παραµέτρους: - VertexList και EdgeList που ορίζουν τις κλάσεις που ϑα χρησιµοποιηθούν για την αποθήκευση των κόµβων και των ακµών. - Directed για τον τύπο του γραφήµατος - VertexProperties, EdgeProperties, GraphProperties που ορίζουν τις κλάσεις που ϑα χρησιµοποιηθούν για την αντιστοίχιση τιµών µε τους κόµβους, τις ακµές και το ίδιο το γράφηµα. Η επιλογή των παραµέτρων VertexList και EdgeList καθορίζει την χρονική πολυπλοκότητα των λειτουργιών του γραφήµατος και πρέπει να συµβαδίζει µε τις απαιτήσεις του προβλήµατος. 13 / 21

Παράδειγµα χρήσης γραφήµατος #include <boost/graph/adjacency_list.hpp> #include <boost/graph/dijkstra_shortest_paths.hpp> #include <iostream> #include <string> using namespace boost; using namespace std; int main(int argc, char *argv[]) { typedef adjacency_list<vecs, vecs, undirecteds string, int> Graph; typedef graph_traits<graph>::vertex_descriptor Vertex; typedef graph_traits<graph>::edge_descriptor Edge; Graph G; Vertex v1 = add_vertex(g); Vertex v2 = add_vertex(g); Edge e1 = add_edge(v1, v2, G).first; G[v1] = "Athens"; G[v2] = "Patra"; G[e1] = 215; 14 / 21

Παράδειγµα χρήσης γραφήµατος (συνέχεια) // vector for storing distance property vector<edge_bundle_type<graph>::type > dist(num_vertices(g)); // invoke "named parameters" variant of Dijkstra dijkstra_shortest_paths(g, v1, weight_map(get(edge_bundle,g)).distance_map(&dist[0])); } cout << "distances from start vertex:" << endl; graph_traits<graph>::vertex_iterator vi; for(vi = vertices(g).first; vi!= vertices(g).second; ++vi) cout << "distance(" << G[*vi] << ") = " << dist[*vi] << endl; 15 / 21

Προσαρµογείς γραφηµάτων Παρέχονται διάφοροι προσαρµογείς (adaptors), π.χ.: - reverse_graph που αντιστρέφει τη ϕορά των ακµών - filtered_graph που παρέχει µία περιορισµένη όψη του γραφήµατος - Προσαρµογέας για χρήση του τύπου γραφήµατος της LEDA - Προσαρµογέας για χρήση του τύπου std::vector< std::list<int> > ως γράφηµα 16 / 21

Παράδειγµα: τοπολογική διάταξη Η τοπολογική διάταξη µπορεί να υλοποιηθεί µε χρήση του depth_first_search(). Θα δηµιουργήσουµε ένα κατάλληλο visitor µε υλοποιηµένη τη µέθοδο finish_vertex ο οποίος ϑα δοθεί σαν όρισµα στην depth_first_search(). Η υλοποίηση του αλγορίθµου δεν απαιτεί σχεδόν καµµία γνώση για την εσωτερική υλοποίηση του γραφήµατος. 17 / 21

Παράδειγµα: τοπολογική διάταξη // Outputs nodes in reverse topological order template<typename OutputIterator> class topo_sort_visitor: public default_dfs_visitor { template <typename Vertex, typename Graph> void finish_vertex(vertex u, const Graph &) { *m_iter++ = u; } template <typename Edge, typename Graph> void back_edge(const Edge& u, Graph&) { // throw an exception - no topo sort possible } //... constructor and private iterator copy }; template <typename Graph, typename OutputIterator> void topological_sort(graph &g, OutputIterator result) { topo_sort_visitor<outputiterator> vis(result); depth_first_search(g, visitor(vis)); } 18 / 21

Αλγόριθµοι της BGL Υπάρχουν αλγόριθµοι για: - Αναζήτηση - Συνεκτικές συνιστώσες - Ελάχιστα γεννητικά δένδρα - Συντοµότερες διαδροµές - Ροές - Επίπεδα γραφήµατα 19 / 21

Σύγκριση µε LEDA Πλεονεκτήµατα της BGL: - Γενικότητα και ευελιξία καθώς ϐασίζεται στο ισχυρότερο µοντέλο του γενικευµένου προγραµµατισµού. - Πλήρης τεκµηρίωση. - Αποδοτικότητα (δεν χρησιµοποιούνται π.χ. εικονικές µέθοδοι). Μειονεκτήµατα: - Μικρότερο πλήθος αλγορίθµων. - Αρχική δυσκολία στην εκµάθηση λόγω του διαφορετικού µοντέλου προγραµµατισµού. - υσκολία στην εύρεση σφαλµάτων λόγω χρήσης προχωρηµένων τεχνικών της C++. - Ορισµένοι αλγόριθµοι δεν έχουν την ποιότητα υλοποίησης που έχει η LEDA. 20 / 21

Περισσότερες πληροφορίες Ο ιστοχώρος του Boost Project: http://www.boost.org Boost graph library book: http://www.informit.com/store/product.aspx?isbn=0201729148 21 / 21