Обход графа против обхода дерева - PullRequest
3 голосов
/ 27 марта 2009

Будет ли функция, проходящая через граф, одинаково хорошо работать для обхода дерева?

Ответы [ 2 ]

13 голосов
/ 27 марта 2009

Ну, дерево - это просто особый тип графа, называемый ориентированным ациклическим графом, так что да ... Обход шириной вначале и глубиной в первую очередь работают на дереве.

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

Достаточно сказать, что единственная разница между шириной и глубиной первого обхода - это порядок, в котором вы обрабатываете вершины. Вначале под широтой понимается добавление вершин в очередь «для обработки». Глубину сначала можно представить как добавление вершин в стек «для обработки». Когда приходит время обрабатывать вершины (после того, как они были добавлены в соответствующие структуры данных), вы удаляете из очереди или извлекаете стек, чтобы получить следующую вершину для обработки. Умные версии первого обхода глубины используют рекурсию для обработки вершин вместо добавления их в стек.

Понятия не имею, было ли это полезно или нет ...

Быстрый поиск в Google (я не знаю, был ли он первым по ширине или глубине) находит этот , который довольно неплохо описывает различия между BFS и DFS. Я также могу порекомендовать Стиву Скиене Руководство по разработке алгоритма , если вы хотите получить более подробное прочтение.

2 голосов
/ 27 марта 2009

Функция, которая может проходить через общий граф, может оказаться излишней для обхода дерева, потому что в чистом дереве вам не нужно проверять циклы. Так бы и сработало, а то и попроще.

...