Чи отримуєте ви DFS, якщо ви зміните чергу на стек у реалізації BFS?


35

Ось стандартний псевдокод для першого пошуку:

{ seen(x) is false for all x at this point }
push(q, x0)
seen(x0) := true
while (!empty(q))
  x := pop(q)
  visit(x)
  for each y reachable from x by one edge
    if not seen(y)
      push(q, y)
      seen(y) := true

Тут pushі popпередбачаються операції з черги. Але що робити, якщо вони є стековими операціями? Чи відвідує отриманий алгоритм вершини в глибині першого порядку?


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


5
Я бачив, як студенти борються з цим, тому не думаю, що це занадто просто. Однак що відповідь повинна містити більше, ніж "Так" чи "Ні"? Бажана деталізація не зрозуміла з питання.
Рафаель

2
"Так" прийшов би з переконливим аргументом; "ні" прийшов би з контрприкладом. Але є кращі відповіді, ніж так / ні, як тільки ви зрозумієте, що відбувається ...
rgrig


3
Можна записати псевдо-код так, щоб просто змінивши popстек або операцію черги, ми отримаємо dfs або bfs. Також легко написати псевдо-код, для якого спочатку виявляється, що це правда, але це не так. ics.uci.edu//~eppstein/161/960215.html - це відповідна посилання.
Джо,

Відповіді:


23

Ні, це не те саме, що DFS.

Розглянемо графік

введіть тут опис зображення

Якщо ви натискаєте вузли вправо вліво, алгоритм надає вам обхід:

А,Б,Е,С,D

тоді як DFS очікує, що це буде

А,Б,Е,D,С

Θ(V+Е)О(V)

Я згоден, проблема не тривіальна.


5
Це передбачає, що списки суміжності мають певний визначений порядок. Принаймні, з математики, кожен розглядає їх як набір, а на графіку є декілька обходів по глибині порядку, залежно від того, як ви тратите дітей. (Уявіть, що використовуєте хеши для дітей.) У цьому сенсі ABECD все ще є глибиною першого порядку. Запитуючий задається питанням, чи є зустрічний приклад навіть у цій обстановці. (Дійсно, саме тут починає
хитріше

3
DЕD

1
@Arybhata: О, вибач, я не знаю, чому я припускав, що ти маєш на увазі краї, спрямовані і спрямовані вниз. Вони непрямі, тому ви маєте рацію: це контрприклад навіть для того, що я говорив у коментарі. (Це дивно: мені довелося неправильно
написати
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.