ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Σχετικά έγγραφα
ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Αλγόριθμοι και πολυπλοκότητα Depth-First Search

Αλγόριθμοι και πολυπλοκότητα Οριζόντια διερεύνηση

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

Αλγόριθμοι και πολυπλοκότητα Περιήγηση Πανεπιστημίων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

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

Διοικητική Λογιστική

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

Δομές Δεδομένων Ενότητα 6

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

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

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 4: ΑΝΑΠΑΡΑΣΤΑΣΗ ΔΕΔΟΜΕΝΩΝ - ΔΕΝΤΡΑ

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

Ενδεικτικές λύσεις ασκήσεων διαχείρισης έργου υπό συνθήκες αβεβαιότητας

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

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

1 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού σε κατάσταση Κορεσμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

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

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

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

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

Ψηφιακή Επεξεργασία Εικόνων

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Μάρκετινγκ Αγροτικών Προϊόντων

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

Βάσεις Περιβαλλοντικών Δεδομένων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Λογιστική Κόστους Ενότητα 12: Λογισμός Κόστους (2)

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

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

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Διοικητική Λογιστική

Τεχνικό Σχέδιο - CAD

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 3: Έλεγχοι στατιστικών υποθέσεων

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 1: Καταχώρηση δεδομένων

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

Ανοικτά Ακαδημαϊκά Μαθήματα στο ΤΕΙ Αθήνας. Βιοστατιστική (Ε) Ενότητα 2: Περιγραφική στατιστική

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

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Τεχνικό Σχέδιο - CAD. Τόξο Κύκλου. Τόξο Κύκλου - Έλλειψη. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Τίτλος Μαθήματος: Μαθηματική Ανάλυση Ενότητα Γ. Ολοκληρωτικός Λογισμός

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

Δομές Δεδομένων Ενότητα 3

Διεθνείς Οικονομικές Σχέσεις και Ανάπτυξη

ΗΛΕΚΤΡΟΝΙΚΗ ΙIΙ Ενότητα 6

Προγραμματισμός Η/Υ. Βασικές Προγραμματιστικές Δομές. ΤΕΙ Ιονίων Νήσων Τμήμα Τεχνολόγων Περιβάλλοντος Κατεύθυνση Τεχνολογιών Φυσικού Περιβάλλοντος

Μηχανολογικό Σχέδιο Ι

Graphs. Outline. Graphs. Data structures for graphs ORD SFO LAX DFW. Definition Applications Terminology Properties ADT

Κβαντική Επεξεργασία Πληροφορίας

Ενότητα. Εισαγωγή στις βάσεις δεδομένων

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ. Δομές Δεδομένων. Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Λογιστική Κόστους Ενότητα 8: Κοστολογική διάρθρωση Κύρια / Βοηθητικά Κέντρα Κόστους.

Σχεδίαση και Ανάλυση Αλγορίθμων Ενότητα 3: ΑΝΑΠΑΡΑΣΤΑΣΗ ΔΕΔΟΜΕΝΩΝ - ΓΡΑΦΗΜΑΤΑ

Αλγόριθμοι και πολυπλοκότητα Η Άπληστη Μέθοδος

Εισαγωγή στην Διοίκηση Επιχειρήσεων

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

Τεχνικό Σχέδιο - CAD

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Θερμοδυναμική. Ανοικτά Ακαδημαϊκά Μαθήματα. Πίνακες Νερού Υπέρθερμου Ατμού. Γεώργιος Κ. Χατζηκωνσταντής Επίκουρος Καθηγητής

Αλγόριθμοι και πολυπλοκότητα Ταχυταξινόμηση (Quick-Sort)

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

Στατιστική. 6 ο Μάθημα: Διαστήματα Εμπιστοσύνης και Έλεγχοι Υποθέσεων. Γεώργιος Μενεξές Τμήμα Γεωπονίας ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ

Μάρκετινγκ Αγροτικών Προϊόντων

Εισαγωγή στους Αλγορίθμους Ενότητα 11η Άσκηση - Σταθμισμένος Χρονοπρογραμματισμός Διαστημάτων

Μάρκετινγκ Αγροτικών Προϊόντων

Διδακτική Πληροφορικής

Διοίκηση Εξωτερικής Εμπορικής Δραστηριότητας

Οικονομική Γεωργικών Εκμεταλλεύσεων

Ψηφιακή Επεξεργασία Εικόνων

Δομές Δεδομένων Ενότητα 1

Εισαγωγή στους Η/Υ. Ενότητα 2β: Αντίστροφο Πρόβλημα. Δημήτρης Σαραβάνος, Καθηγητής Πολυτεχνική Σχολή Τμήμα Μηχανολόγων & Αεροναυπηγών Μηχανικών

Βέλτιστος Έλεγχος Συστημάτων

Διαφήμιση και Δημόσιες Σχέσεις Ενότητα 9: Σχέσεις διαφημιστή-διαφημιζόμενου

4 η Διάλεξη. Ενδεικτικές λύσεις ασκήσεων

Εισαγωγή στους Υπολογιστές

Αριθμητική Ανάλυση. Ενότητα 1: Εισαγωγή Βασικές Έννοιες. Φραγκίσκος Κουτελιέρης Πολυτεχνική Σχολή Τμήμα Χημικών Μηχανικών

Προσχολική Παιδαγωγική Ενότητα 2: Οργάνωση χρόνου και χώρου στα νηπιαγωγεία

Μυελού των Οστών Ενότητα #1: Ερωτήσεις κατανόησης και αυτόαξιολόγησης

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

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

Εισαγωγή στην Πληροφορική

ΗΛΕΚΤΡΟΝΙΚΗ Ι Ενότητα 5

Διδακτική Πληροφορικής

Διαχείριση Πολιτισμικών Δεδομένων

Μεθοδολογία Έρευνας Κοινωνικών Επιστημών Ενότητα 2: ΣΥΓΚΕΝΤΡΩΣΗ ΠΛΗΡΟΦΟΡΙΩΝ ΜΑΡΚΕΤΙΝΓΚ Λοίζου Ευστράτιος Τμήμα Τεχνολόγων Γεωπόνων-Kατεύθυνση

Εισαγωγή στην Πληροφορική

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

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Μαθηματικά Διοικητικών & Οικονομικών Επιστημών

Ενδεικτικές λύσεις ασκήσεων διαγραμμάτων περίπτωσης χρήσης (1ο Μέρος)

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Κβαντική Επεξεργασία Πληροφορίας

Διδακτική Πληροφορικής

Διδακτική Πληροφορικής

Εννοιες και Παράγοντες της Ψηφιακής Επεξεργασίας Εικόνας

Εισαγωγή στην Διοίκηση Επιχειρήσεων

Τεχνολογία Πολιτισμικού Λογισμικού

Transcript:

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ Δομές Δεδομένων Ιωάννης Γ. Τόλλης Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης

Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Κρήτης» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 2

Σημείωμα αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά, Μη Εμπορική Χρήση, Όχι Παράγωγο Έργο 4.0 [1] ή μεταγενέστερη, Διεθνής Έκδοση. Εξαιρούνται τα αυτοτελή έργα τρίτων π.χ. φωτογραφίες, διαγράμματα κ.λ.π., τα οποία εμπεριέχονται σε αυτό και τα οποία αναφέρονται μαζί με τους όρους χρήσης τους στο «Σημείωμα Χρήσης Έργων Τρίτων». [1] http://creativecommons.org/licenses/by-nc-nd/4.0/ Ως Μη Εμπορική ορίζεται η χρήση: που δεν περιλαμβάνει άμεσο ή έμμεσο οικονομικό όφελος από την χρήση του έργου, για το διανομέα του έργου και αδειοδόχο που δεν περιλαμβάνει οικονομική συναλλαγή ως προϋπόθεση για τη χρήση ή πρόσβαση στο έργο που δεν προσπορίζει στο διανομέα του έργου και αδειοδόχο έμμεσο οικονομικό όφελος (π.χ. διαφημίσεις) από την προβολή του έργου σε διαδικτυακό τόπο Ο δικαιούχος μπορεί να παρέχει στον αδειοδόχο ξεχωριστή άδεια να χρησιμοποιεί το έργο για εμπορική χρήση, εφόσον αυτό του ζητηθεί.. 3

Depth-First Search B D E C Depth-First Search 4

Περιγραφή και Υλικό Ανάγνωσης Ορισμοί ( 6.1) Υπογράφοι Συνδεσιμότητα Spanning δέντρα και δάση (forests) Depth-first search ( 6.3.1) Αλγόριθμος Παράδειγμα Ιδιότητες Ανάλυση Εφαρμογές του DFS ( 6.5) Εύρεση μονοπατιών Εύρεση κύκλων Depth-First Search 5

Υπογράφοι Ένας υπογράφος S ενός γράφου G είναι ένας γράφος έτσι ώστε Οι κορυφές του S είναι υποσύνολο των κορυφών του G Οι ακμές του S είναι υποσύνολο των ακμών του G Ένας spanning υπογράφος του G έιναι ένας υπογράφος που περιέχει όλες τις κορυφές του G Subgraph Spanning subgraph Depth-First Search 6

Συνδεσιμότητα Ένας γράφος είναι συνδεδεμένος αν υπάρχει ένα μονοπάτι ανάμεσα σε κάθε ζευγάρι κορυφών Ένα συνδετικό στοιχείο (connected component) ενός γράφου G είναι ένας μέγιστος συνδεδεμένος υπογράφος του G Connected graph Non connected graph with two connected components Depth-First Search 7

Δέντρα και Δάση Ένα (ελεύθερο) δέντρο έιναι ένας μη κατευθυ-νόμενος γράφος T έτσι ώστε Ο T είναι συνδεδεμένος Ο T δεν έχει κύκλους Αυτός ο ορισμός του δέντρου είναι διαφορετικός από αυτόν του δέντρου με ρίζα Ένα δάσος είναι ένας μη κατευθυνόμενος γράφος χωρίς κύκλους Τα συνδετικά στοιχεία ενός δάσους είναι δέντρα Tree Forest Depth-First Search 8

Spanning Δέντρα και Δάση Ένα spanning δέντρο ενός συνδεδεμένου γράφου είναι ένας spanning υπογράφος ο οποίος είναι δέντρο Ένα spanning δέντρο δεν είναι μοναδικό εκτός αν ο γράφος είναι δέντρο Τα spanning δέντρα έχουν εφαρμογές στη σχεδίαση δικτύων επικοινωνιών Ένα spanning δάσος ενός γράφου είναι ένας spanning υπογράφος ο οποίος είναι δάσος Graph Spanning tree Depth-First Search 9

Depth-First Search Ο Depth-first search (DFS) είναι μια γενική τεχνική για τη διάσχιση ενός γράφου Μια διάσχιση DFS ενός γράφου G Επισκέπτεται όλες τις ακμές και τις κορυφές του G Ορίζει αν ο G είναι συνδεδεμένος Υπολογίζει τα συνεκτικά στοιχεία του G Υποογίζει ένα spanning δάσος του G Ο DFS σε ένα γράφο με n κορυφές και m ακμές παίρνει O(n + m ) χρόνο Ο DFS μπορεί να επκταθεί για να λύσει και άλλα προβλήματα γράφων Βρες και ανάφερε ένα μονοπάτι μεταξύ δύο δοσμένων κορυφών Βρες ένα κύκλο στο γράφο Ο Depth-first search είναι για τους γράφους ότι το Euler tour για τα δυαδικά δέντρα Depth-First Search 10

DFS lgorithm Ο αλγόριθμος χρησιμοποιεί ένα μηχανισμό για να θέτει και να παίονει labels από κορυφές και ακμές lgorithm DFS(G) Input graph G Output labeling of the edges of G as discovery edges and back edges for all u G.vertices() setlabel(u, UNEXPLORED) for all e G.edges() setlabel(e, UNEXPLORED) for all v G.vertices() if getlabel(v) = UNEXPLORED DFS(G, v) lgorithm DFS(G, v) Input graph G and a start vertex v of G Output labeling of the edges of G in the connected component of v as discovery edges and back edges setlabel(v, VISITED) for all e G.incidentEdges(v) if getlabel(e) = UNEXPLORED w opposite(v,e) if getlabel(w) = UNEXPLORED setlabel(e, DISCOVERY) DFS(G, w) else setlabel(e, BCK) Depth-First Search 11

Παράδειγμα unexplored vertex visited vertex unexplored edge B D E discovery edge back edge C B D E B D E C C Depth-First Search 12

Παράδειγμα (συν.) B D E B D E C C B D E B D E C C Depth-First Search 13

DFS and Maze Traversal Ο αλγόριθμος DFS είναι παρόμοιος με την κλασσική στρατηγική για την εξερεύνηση ενός λαβυρίνθου Σημειώνουμε κάθε διαστάυρωση, γωνία και αδιέξοδο (vertex) που επισκεπτόμαστε Σημειώνουμε κάθε διάδρομε (edge ) που διασχίζουμε Παρακολουθούμε το μονοπάτι πίσω στην είσοδο (start vertex) με ένα σχοινί (recursion stack) Depth-First Search 14

Ιδιότητες του DFS Ιδιότητα 1 Η DFS(G, v) επισκέπτε-ται όλες τις κορυφές και τις ακμές του συνεκτικού στοιχείου του v Ιδιότητα 2 Οι discovery edges που χαρακτηρίστηκαν από τη DFS(G, v) σχηματίζουν ένα spanning δέντρο του συνεκτικού στοιχείου του v B C D E Depth-First Search 15

Ανάλυση του DFS Η ανάθεση/απόκτηση του label κορυφής/ακμής παίρνει O(1) χρόνο Κάθε κορυφή χαρακτηρίζεται δύο φορές Μια ως UNEXPLORED Μια ως VISITED Κάθε ακμή χαρακτηρίζεται δύο φορές Μια ως UNEXPLORED Μια ως DISCOVERY ή BCK Η μέθοδος incidentedges καλείται μια φορά για κάθε κορυφή Ο DFS τρέχει σε O(n + m) χρόνο δεδομένου ότι ο γ ραφος αναπαριστάται απο τη δομή λίστας γειτνίασης Υπενθυμίζουμε ότι S v deg(v) = 2m Depth-First Search 16

Έυρεση μονοπατιού Μπορούμε να ειδικεύσουμε τον αλγόριθμο DFS για να βρει ένα μονοπάτι μεταξύ δύο δοσμένων κορυφών u και z χρησιμοποιώντας την template method pattern Καλούμε τη DFS(G, u) με u την αρχική κορυφή Χρησιμοποιούμε μια στοίβα S για να παρακολουθολύμε το μονοπάτι μεταξύ της αρχικής κορυφής και της τωρινής κορυφής Μόλις η κορυφή προορισμού z συναντηθεί, επιστρεφούμε το μονοπάτι ως τα περιεχόμενα της στοίβας lgorithm pathdfs(g, v, z) setlabel(v, VISITED) S.push(v) if v = z return S.elements() for all e G.incidentEdges(v) if getlabel(e) = UNEXPLORED w opposite(v,e) if getlabel(w) = UNEXPLORED setlabel(e, DISCOVERY) S.push(e) pathdfs(g, w, z) S.pop(e) else setlabel(e, BCK) S.pop(v) Depth-First Search 17

Έυρεση κύκλων Μπορούμε να ειδικεύ-σουμε τον αλγόριθμο DFS για να βρει ένα απλό κύκλο χρησιμοποιώντας την template method pattern Χρησιμοποιούμε μια στοίβα S για να παρακολουθή-σουμε το μονοπάτι ανάμεσα στην αρχική κορυφή και την τωρινή κορυφή Μόλις μια back edge (v, w) συναντηθεί, επιστρέφουμε τον κύκλο ως το τμήμα της στοίβας από την κορυφή της ως την κορυφή w lgorithm cycledfs(g, v, z) setlabel(v, VISITED) S.push(v) for all e G.incidentEdges(v) if getlabel(e) = UNEXPLORED w opposite(v,e) S.push(e) if getlabel(w) = UNEXPLORED setlabel(e, DISCOVERY) pathdfs(g, w, z) S.pop(e) else T new empty stack repeat o S.pop() T.push(o) until o = w return T.elements() S.pop(v) Depth-First Search 18

Τέλος Ενότητας