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

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

Upload: shepry

Post on 21-Mar-2016

45 views

Category:

Documents


0 download

DESCRIPTION

Διερεύνηση γραφήματος. Οριζόντια διερεύνηση γραφήματος. Breadth-first search (BFS). b. c. f. a. c. d. a. b. b. e. d. f. g. h. a. e. h. e. e. f. Οριζόντια διερεύνηση γραφήματος. b. c. f. a. c. d. a. b. b. e. d. f. g. h. a. e. h. e. e. f. - PowerPoint PPT Presentation

TRANSCRIPT

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

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Breadth-first search (BFS)

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

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

b caa

ebd f ga ee

fe

fc db

hh

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

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

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

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

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

1

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

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

1

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

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

1

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

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

1

2

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

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

1

2

3

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

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

1

2

3

4

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

4

λήψη(Q)

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

4

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

4

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

4

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

λήψη(Q)

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

λήψη(Q)

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

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

7

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

λήψη(Q)

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

λήψη(Q)

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

λήψη(Q)

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

λήψη(Q)

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

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

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

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

b caa

ebd f ga ee

fe

fc db

hh

Ουρά Q :

1

2

3

45

6

7

8

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

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

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

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

1

2

3

45

6

7

8

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

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

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

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

1

2

3

45

6

7

8

10

9

12

11

14

13

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

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

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

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

1

2

3

45

6

7

8

10

9

12

11

14

13

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

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

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

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

Αναπαράσταση Γραφήματος

Λίστες γειτνίασης (adjacency lists):

typedef struct node *link;struct node { int v; link next; }

link NEW(int v, link next){ link x = malloc(sizeof *x);

x-v = v; x->next = next;return x; }

main(){ int i,j; link adj[N];

for (i = 0; i < N; i++) adj[i] = NULL;while (scanf(“%d %d\n”, &i, &j) == 2){

adj[i] = NEW(j, adj[i]);adj[j] = NEW(i, adj[j]);

}}

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

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

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

typedef struct node *link;struct node { int v; link next; }

...

void BFS(int k) /* ο κόμβος k είναι η αφετηρία */{

link t; QUEUEinit(n); QUEUEput(k);while (!QUEUEempty()){

k = QUEUEget(); for (t = adj[k]; t != NULL; t = t->next)

if (!marked[t->v]) {marked[t->v] = 1;QUEUEput(t->v);

}}

}}

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

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

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

typedef struct node *link;struct node { int v; link next; }

...

void BFS(int k) /* ο κόμβος k είναι η αφετηρία */{

link t; QUEUEinit(n); QUEUEput(k);while (!QUEUEempty()){

k = QUEUEget(); for (t = adj[k]; t != NULL; t = t->next)

if (!marked[t->v]) {marked[t->v] = 1;QUEUEput(t->v); parent[t->v]=k;

}}

}}

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

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