Cosa significa pseudocodice con questo algoritmo BFS?


9

Ho il seguente pseudocodice per l' algoritmo di ricerca breadth-first

BFS(G,s)
 1 for each vertex uV(G) \ {s}
 2     color[u] = white
 3     d[u] = ∞
 4     π[u] = nil
 5 color[s] = gray
 6 d[s] = 0
 7 π[s] = nil
 8 Q = ∅
 9 Enqueue(Q,s)
10 while q ≠ ∅
11     u = Dequeue(Q)
12     for each vAdj[u]
13         if color[v] == white
14             color[v] = gray
15             d[v] = d[u] + 1
16             π[v] = u
17             Enqueue(Q,v)
18     color[u] = black

Immagine originale

Non capisco cosa indica la lettera π in questo contesto. Non ho familiarità con questo algoritmo ed è difficile da indovinare.

Penso che dindichi la distanza, colorovviamente il colore, ma che π... sembra essere una variabile di qualche tipo ma non capisco la sua funzione in questo pseudocodice.


2
@Snowman Vorrei andare con lo stile usato nell'informatica e nelle pubblicazioni accademiche piuttosto che in matematica in particolare, ma sono d'accordo con l'idea generale. A questa domanda su questo utilizzo potrebbe essere stata data risposta leggendo la pagina di Wikipedia , e π non è qualcosa di uso comune ma piuttosto specifico di come l'autore scrive l'algoritmo. Temo che ci siano troppe variazioni sullo pseudocodice e chiedo cosa significhi che ogni personaggio in ogni stile può sfuggire di mano.

1
Spesso la lettera π è usata nello pseudocodice? A volte, ma il significato varia a seconda del contesto.
Rufflewind,

1
@Snowman: π qui non è una funzione. È una matrice mutevole di vertici indicizzata dai vertici.
Rufflewind,

1
In questo contesto π è solo un simbolo usato nell'algoritmo, simile a d e color. A volte agli autori di algoritmi piace usare simboli a lettera singola piuttosto che nomi carini come "parentVertices" o qualcosa che potrebbe tendere ad essere usato in un linguaggio di programmazione.
Brandin,

@Snowman Stai scherzando? Non è una domanda di matematica. Si tratta di interpretare uno pseudocodice per scrivere un programma, perché questo non dovrebbe riguardare lo sviluppo del software, non riesco davvero a capire.
nbro,

Risposte:


17

Credo che l'uso di π qui sia un vero "genitore di". Quindi, in questo caso, il “padre” di v   è u perché stiamo guardando tutti i nodi adiacenti a u .


0

Il vettore π mantiene sicuramente il nodo u con cui sei arrivato nel nodo v. Questo aiuta quando devi costruire l'albero BFS del grafico. Sebbene non sia necessario, questa tecnica riduce notevolmente la complessità quando si deve eseguire più tempo il BFS (es. L' algoritmo Edmonds-Karp per calcolare il flusso massimo tra due nodi in un grafico). In questo caso non è necessario eseguire il BFS più volte poiché è già stato costruito l'albero BFS e attraversarlo dalle foglie alla radice.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.