Получаете ли вы 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.

Рассмотрим график

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

Если вы перемещаете узлы в порядке справа налево, алгоритм дает вам обход:

A,В,Е,С,D

в то время как DFS будет ожидать, что это будет

A,В,Е,D,С

Θ(В+Е)О(В)

Я согласен, проблема не тривиальная.


5
Это предполагает, что списки смежности имеют некоторый фиксированный определенный порядок. В математике, по крайней мере, один рассматривает их как набор, и у графа есть несколько обходов порядка глубины, в зависимости от того, как вы выполняете итерацию дочерних элементов. (Представьте себе использование хешей для детей.) В этом смысле ABECD по-прежнему занимает первое место по глубине. Спрашивающий задается вопросом, есть ли контрпример даже в этой ситуации. (Действительно, именно здесь все становится сложнее.)
rgrig

3
DЕD

1
@Arybhata: Ой, прости, я не знаю, почему я предполагал, что ты хотел, чтобы края были направлены и направлены вниз. Они ненаправлены, так что вы правы: это контрпример даже к тому, что я говорил в комментарии. (Это странно: мне пришлось неправильно писать вашу ручку, чтобы она не удалялась SE.)
rgrig
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.