Это правильный порядок для BFS и DFS? - PullRequest
0 голосов
/ 07 февраля 2020

Ниже у меня есть дерево, и мне нужно перечислить порядок маркировки вершин для посещения как для DFS, так и для BFS. У меня есть список ниже, но мне просто интересно, правильно ли я это сделал. Начинается с 0.

S

1 Ответ

0 голосов
/ 10 февраля 2020

Вопрос говорит, что у вас есть дерево, но это не дерево; это график. Поэтому ответ зависит от того, является ли это неориентированным графом или ориентированным графом. Я подозреваю, что тот, кто создал диаграмму, намеревался направить график с вертикальным позиционированием, указывающим направление, но он должен был сделать это более ясным, используя стрелки для указания направлений ребер. На самом деле, похоже, что ребра, входящие в узел, находятся сверху, а ребра, выходящие из узла, находятся внизу.

Правильный порядок также зависит от того, в каком порядке находятся соседи узла посещаются. Для DFS это будет зависеть от реализации DFS; рекурсивная DFS обычно посещает потомки в порядке возрастания, тогда как итеративная DFS, использующая стек, иногда посещает в порядке убывания (потому что поведение LIFO стека означает, что они будут выталкиваться в обратном порядке), если только потомки не помещены в стек в обратный порядок.

Обычно BFS будет посещать детей в порядке возрастания, и нет особой причины, по которой реализация BFS будет посещать их в порядке убывания (поскольку очередь FIFO, они опрашиваются в том же порядке, в котором они ' вставляется в очередь).


Если график направлен, то порядок DFS будет 0 1 2 3 4 5 6, если вы посещаете детей в порядке возрастания, или (по совпадению) 0 6 5 4 2 3 1, если вы посещаете детей в в порядке убывания.

Если вы предположили, что график направлен, то ваш ответ для DFS не может быть правильным, поскольку он заканчивается на 2 1 3. Если 3 еще не посещено, то его следует посетить сразу после 2, перед возвратом.


В качестве альтернативы, если график не является ненаправленным, тогда порядок DFS будет (по совпадению) 0 1 2 3 4 5 6 если дети посещаются в порядке возрастания или (по совпадению) 0 6 5 4 2 3 1 если они посещаются в порядке убывания.

Если вы предполагали, что график не является ненаправленным, то ваш ответ для DFS является непоследовательным, потому что вы начинаете с перехода от узла 0 до узла 6 (т.е. в порядке убывания), но затем, когда вы достигнете узла 2, вы посещаете узел 1 перед узлом 3 (т.е. в порядке возрастания).


Ваш ответ для BFS правильный, является ли график направленным или ненаправленным.

...