Що означає pi в цьому псевдокоді алгоритму BFS?


9

У мене є наступний псевдокод для алгоритму пошуку на широті

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

Оригінальне зображення

Я не розумію, що буква π вказує в цьому контексті. Я не знайомий з цим алгоритмом, і це важко здогадатися.

Я думаю, що dвказує відстань, colorце, звичайно, колір, але це π... це, здається, якась змінна, але я не розумію його функції в цьому псевдокоді.


2
@Snowman Я б пішов зі стилем, який використовується в інформатиці та академічних публікаціях, а не математиці конкретно, але я згоден із загальною ідеєю. На це запитання про це використання, можливо, відповіли, прочитавши сторінку вікіпедії , і π не є чимось загальним використанням, а скоріше специфічним для того, як автор пише алгоритм. Я переживаю, що на псевдокоді є занадто багато варіацій, і запитую про те, що кожен символ у кожному стилі може вийти з рук.

1
Чи часто літера π використовується в псевдокоді? Іноді, але значення буде змінюватися в залежності від контексту.
Rufflewind

1
@Snowman: π тут не є функцією. Це змінний масив вершин, індексований вершинами.
Rufflewind

1
У цьому контексті π - це просто символ, використаний в алгоритмі, подібний d і кольору. Іноді автори алгоритмів люблять використовувати символи з однієї літери, а не симпатичні назви типу "parentVertices" або щось таке, що, як правило, використовується в мові програмування.
Брандін

@Snowman Ви жартуєте? Це не математичне питання. Йдеться про інтерпретацію псевдокоду для написання програми, чому це не стосується розробки програмного забезпечення, я насправді не можу зрозуміти.
nbro

Відповіді:


17

Я вважаю, що використання π тут є фактичним "батьком". Отже, у цьому випадку "батьків" v   є u, оскільки ми дивимось на всі вузли, прилеглі до u .


0

Вектор π безумовно зберігає вузол u, з яким ви потрапили у вузол v. Це допомагає, коли вам потрібно побудувати дерево BFS графіка. Хоча це і не потрібно, ця методика значно зменшує складність, коли вам доведеться більше часу виконувати BFS (наприклад, алгоритм Edmonds – Karp для обчислення максимального потоку між двома вузлами в графіку). У цьому випадку вам не доведеться запускати BFS більше разів, оскільки у вас вже побудовано дерево BFS і переходити його від листя до кореня.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.