Διερεύνηση γραφήματος

50
Διερεύνηση γραφήματος

description

Διερεύνηση γραφήματος. Διερεύνηση γραφήματος. Ένας αλγόριθμος διερεύνησης γραφήματος επισκέπτεται τους κόμβους του γραφήματος με μια καθορισμένη στρατηγική, π.χ. κατά εύρος ή κατά βάθος. - PowerPoint PPT Presentation

Transcript of Διερεύνηση γραφήματος

Page 1: Διερεύνηση γραφήματος

Διερεύνηση γραφήματος

Page 2: Διερεύνηση γραφήματος

Διερεύνηση γραφήματος

Ένας αλγόριθμος διερεύνησης γραφήματος επισκέπτεται τους κόμβους του

γραφήματος με μια καθορισμένη στρατηγική, π.χ. κατά εύρος ή κατά βάθος.

Οριζόντια διερεύνηση (breadth-first search) : Διατηρεί τη σειρά επίσκεψης

των κόμβων σε μία FIFO ουρά. Μόλις επισκεφτεί ένα κόμβο v τότε τοποθετεί

στην ουρά όλους τους κόμβους προς τους οποίους έχει ακμή ο v και τους

οποίους δεν έχει επισκεφτεί ακόμα.

Page 3: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Page 4: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Η αναζήτηση θα ξεκινήσει από τον κόμβο .

Χρησιμοποιούμε μία FIFO ουρά Q για να κρατάμε τη σειρά επίσκεψης των κόμβων.

Page 5: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q : Αρχικά κενή

Page 6: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q : Αρχικά κενή

τοποθέτηση(Q,a) : τοποθετεί το a στο τέλος της ουράς

Page 7: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

τοποθέτηση(Q,a) : τοποθετεί το a στο τέλος της ουράς

1

Page 8: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

λήψη(Q) : επιστρέφει το πρώτο στοιχείο της Q που θα επεξεργαστούμε

1

Page 9: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

επεξεργασία του a

1

Page 10: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

τοποθέτηση(Q,b)

1

2

Page 11: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

τοποθέτηση(Q,c)

1

2

3

Page 12: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

τοποθέτηση(Q,f)

1

2

3

4

Page 13: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

4

λήψη(Q)

Page 14: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

4

επεξεργασία του b

Page 15: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

4

o κόμβος a είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 16: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

4

o κόμβος c είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 17: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

τοποθέτηση(Q,d)

Page 18: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

λήψη(Q)

Page 19: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

επεξεργασία του c

Page 20: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

o κόμβος a είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 21: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

o κόμβος b είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 22: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

λήψη(Q)

Page 23: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

επεξεργασία του f

Page 24: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

o κόμβος a είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 25: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

τοποθέτηση(Q,e)

Page 26: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

τοποθέτηση(Q,h)

7

Page 27: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

λήψη(Q)

Page 28: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

επεξεργασία του d

Page 29: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

o κόμβος b είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 30: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

o κόμβος e είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 31: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

λήψη(Q)

Page 32: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

επεξεργασία του e

Page 33: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

o κόμβος d είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 34: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

o κόμβος f είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 35: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

τοποθέτηση(Q,g)

Page 36: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

o κόμβος h είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 37: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

λήψη(Q)

Page 38: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

επεξεργασία του h

Page 39: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

o κόμβος e είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 40: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

o κόμβος f είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 41: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

λήψη(Q)

Page 42: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

επεξεργασία του g

Page 43: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

o κόμβος e είχε τοποθετηθεί στην Q προηγουμένως και δεν τοποθετείται ξανά

Page 44: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

Έχουμε επεξεργαστεί όλους τους κόμβους.

Page 45: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

Δένδρο οριζόντιας διερεύνησης με αφετηρία τον κόμβο a :

1

2

3

45

6

7

8

Κάθε κόμβος συνδέεται με τον κόμβο που τον έβαλε στην ουρά.

Για κάθε κόμβο x το μονοπάτι του δένδρου από το a στο x έχει τον ελάχιστο δυνατό αριθμό ακμών μεταξύ όλων τον μονοπατιών από το a στο x στο γράφημα

Page 46: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματος

1

2

3

45

6

7

8

10

9

12

11

14

13

Αν το γράφημα δεν είναι συνεκτικό μπορούμε να ξεκινήσουμε νέα διερεύνηση από κάποιο κόμβο που δεν έχουμε επισκεφτεί. Συνεχίζουμε με αυτό τον τρόπο μέχρι να επισκεφτούμε όλους τους κόμβους

Δάσος οριζόντιας διερεύνησης

Page 47: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματοςΑν το γράφημα δεν είναι συνεκτικό μπορούμε να ξεκινήσουμε νέα διερεύνηση από κάποιο κόμβο που δεν έχουμε επισκεφτεί. Συνεχίζουμε με αυτό τον τρόπο μέχρι να επισκεφτούμε όλους τους κόμβους

1

2

3

45

6

7

8

10

9

12

11

14

13

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

Δάσος οριζόντιας διερεύνησης :

Δίνει μια καλή λύση στο στατικό (offline) πρόβλημα συνδετικότητας, όταν το γράφημα είναι εξαρχής γνωστό

Page 48: Διερεύνηση γραφήματος

Αναπαράσταση ΓραφήματοςΛίστες γειτνίασης (adjacency lists)

class AdjacencyLists {static class Node {

int v; Node next;Node(int v, Node t){ this.v = v; next = t; }

}

public static void main(String[] args) {int N = Integer.parseInt(args[0]);int M = Integer.parseInt(args[1]);Node adj[] = new Node[V];for (int i = 0; i < N; i++) adj[i] = null;for (In.init(); !In.empty();) {

int i = In.getInt(), j = In.getInt(); adj[j] = new Node(i, adj[j]);adj[i] = new Node(j, adj[i]);

}}

} Διαβάζει μη κατευθυνόμενο γράφημα

1

2

3

4

5

2 3 4

1 3 5

1 2 4

1 3 5

2 4

adj

Page 49: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματοςvoid BFS(int s) // ο κόμβος s είναι η αφετηρία{

Queue<Integer> Q = new Queue<Integer>();marked[s] = true;Q.put(s);while (!Q.isEmpty()){

k = Q.get(); for (Node t = adj[k]; t != null; t = t.next)

if (!marked[t.v]) {marked[t.v] = true;parent[t.v] = k;Q.put(t.v);

}}

}}

Χρόνος εκτέλεσης για γράφημα με κόμβους και ακμές. (Υποθέτουμε ότι κάθε πράξη της ουράς γίνεται σε σταθερό χρόνο.)

Page 50: Διερεύνηση γραφήματος

Οριζόντια διερεύνηση γραφήματοςvoid BFS(int s) // ο κόμβος s είναι η αφετηρία{

Queue<Integer> Q = new Queue<Integer>();marked[s] = true;Q.put(s);while (!Q.isEmpty()){

k = Q.get(); for (Node t = adj[k]; t != null; t = t.next)

if (!marked[t.v]) {marked[t.v] = true;parent[t.v] = k;Q.put(t.v);

}}

}}

Χρόνος εκτέλεσης για γράφημα με κόμβους και ακμές. (Υποθέτουμε ότι κάθε πράξη της ουράς γίνεται σε σταθερό χρόνο.)

αποθήκευση του γονέα στο δάσος της οριζόντιας διερεύνησης