Grafi: visita in ampiezza

22  Download (0)

Full text

(1)

Grafi: visita in ampiezza

Una presentazione alternativa (con ulteriori dettagli)

………..

(2)

VISITA (G, s)

color [s] ← gray

while ci sono vertici grigi do u ← un vertice grigio

{if u non visitato then visitalo}

if c’è v bianco ∈ ADJ [u]

then color [v] ← gray π[v] ← u

Consideriamo la versione “concreta” dell’algoritmo di visita generica con costruzione del sottografo dei predecessori:

D ← make_empty add (D, s)

first (D)

not empty(D)

(3)

La struttura dati D è una

CODA

(4)

A

B

C

D

E

F

G

H

Q A B D

A

B D

Esempio (1/9)

(5)

Q A

B

C

D

E

F

G

H

B D C F

A

B D

C F

Esempio (2/9)

(6)

Q A

B

C

D

E

F

G

H

D C F H

A

B D

C F H

Esempio (3/9)

(7)

Q A

B

C

D

E

F

G

H

C F H E

A

B D

C F H

A

B D

C F

E

Esempio (4/9)

(8)

Q A

B

C

D

E

F

G

H

F H E G

A

B D

C F H

A

B D

C F

E G

Esempio (5/9)

(9)

Q A

B

C

D

E

F

G

H H E G

A

B D

C F H

A

B D

C F

E G

Esempio (6/9)

(10)

Q A

B

C

D

E

F

G

H E G

A

B D

C F H

A

B D

C F

E G

Esempio (7/9)

(11)

Q A

B

C

D

E

F

G

H G

A

B D

C F H

A

B D

C F

E G

Esempio (8/9)

(12)

Q A

B

C

D

E

F

G

H

A

B D

C F H

A

B D

C F

E G

Esempio (9/9)

(13)

BFS-VISITA (G, s)

Q ← make_empty_queue color [s] ← gray

enqueue (Q, s)

while not_empty (Q) do u ← head (Q)

{if u non visitato then visitalo}

if c’è v bianco ∈ ADJ [u]

then color [v] ← gray π[v] ← u

enqueue (Q, v) else color [u] ← black

{visita u}

for ogni v ∈ ADJ [u] do if color [v] = white

then color [v] ← gray π[v] ← u

enqueue (Q, v) Poichè la head della coda non cambia finché ci sono adiacenti bianchi, l'algoritmo può essere modificato nel modo seguente:

Due versioni dell’algoritmo di visita in ampiezza

(14)

BFS-VISITA (G, s)

Q ← make_empty_queue color [s] ← gray

enqueue (Q, s)

while not_empty (Q) do u ← head (Q)

{visita u}

for ogni v ∈ ADJ [u] do if color [v] = white

then color [v] ← gray π[v] ← u

Ptr ← ADJ [u]

while Ptr ≠ nil do

if color [Ptr.vtx] = white

then color [Ptr.vtx] ← gray π[Ptr.vtx] ← u

Una terza versione “ancora più concreta” dell’algoritmo

(15)

N.B. Nella visita in ampiezza Breadth First Search l’albero viene costruito a livelli

A

B D

C F H

E G

Modifichiamo la (2a versione del)l’algoritmo per “sintetizzare” altre informazioni

(16)

BFS-VISITA (G, s)

Q ← make_empty_queue color [s] ← gray

d[s] ← 0

enqueue (Q, s)

while not_empty (Q) do u ← head (Q)

{visita u}

for ogni v ∈ ADJ [u] do if color [v] = white

then color [v] ← gray π[v] ← u

d[v] ← d[u] + 1

Bisogna inizializzare l’attributo d INIZIALIZZA (G)

for ogni u ∈ V do color [u] ← white π[u] ← nil

d[u] ← ∞

(17)

B

D

F

A C E G

H

Vertici memorizzati nelle liste di adiacenza in ordine alfabetico

Vertici memorizzati nelle liste di adiacenza in ordine inverso

D

A B B

A

D

Riprendiamo l’esempio (1/2)

(18)

Teorema

B

C E

A

H G

F

D

H

E

A

B C

G

D

F G

Proprietà della visita in ampiezza (1/4)

(19)

Proprietà

1. In Q ci sono tutti e soli i vertici grigi

2. Se <v1, v2, . . . , vn> è il contenuto di Q, allora:

d[vn] ≤ d[v1] + 1

d[vi] ≤ d[vi+1] 1 ≤ i ≤ n-1 Lemma

La seguente proprietà è un invariante dei due while di BFS-VISITA:

(INV4) d[v] = δ(s,v) per tutti i vertici v grigi o neri.

Dimostrazione

Proprietà della visita in ampiezza (2/4)

(20)

Consideriamo in G un cammino minimo da s a v.

Per l’invariante INV3 tale cammino contiene almeno un vertice t grigio. Il cammino minimo può allora essere visto

come concatenazione dei due cammini minimi da s a t e da t a v.

δ(s,v) = δ(s,t) + δ(t,v) ≥ δ(s,t) + 1 (δ(t,v) ≥ 1 poichè t ≠ v).

Ma il vertice t è in Q (t è grigio) e per l’invariante INV4, essendo u = head(Q): d[u] ≤ d[t] = δ(s,t).

Si ottiene pertanto: δ(s,v) ≥ δ(s,t) + 1 = d[t] + 1 ≥ d[u] + 1.

Poichè s u → v è un cammino in G da s a v, esso non può

Proprietà della visita in ampiezza (3/4)

(21)

Teorema.

Al termine dell'esecuzione di BFS si ha d[v] = δ(s,v) per tutti i vertici v ∈ V.

Dimostrazione.

Se v non è raggiungible da s allora d[v] rimane ∞ = δ(s,v).

Altrimenti v è nero e il teorema vale per il Lemma precedente.

• per ogni vertice v raggiungibile da s, il cammino da s a v sull’albero ottenuto con la visita è un cammino minimo.

Proprietà della visita in ampiezza (4/4)

(22)

Esercizio

• La correttezza della seconda (e della terza) versione dell’algoritmo di visita in ampiezza segue dalla

correttezza della prima versione dell’algoritmo (che, a sua volta, è conseguenza immediata della correttezza

dell’algoritmo di visita generica, che stata dimostrata con il metodo delle asserzioni). ANNOTATE (SCRIVENDO SULLA STAMPA DEI LUCIDI) IL CODICE DELLA PRIMA, DELLA SECONDA, E DELLA TERZA

VERSIONE DELL’ALGORITMO CON LE

Figure

Updating...

References

Related subjects :