В ширину, первый поиск и поиск в глубину, почему посещаемый массив инициализируется глобально. - PullRequest
0 голосов
/ 04 октября 2018

Посещенный массив - это массив, в котором мы храним записи о том, посещен узел или нет.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Почему посещаемый массив инициализируется глобально?

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

В противном случае при инициализации на уровне метода вам нужно будет передать информацию отслеживания (или массив visited[]) по ссылке или создать новую ее копию для каждого вызова, чтобы исследовать узел.


Далее, если:

  1. Вы отслеживали что-то локальное для текущего узла;ИЛИ

  2. Реализация алгоритма не была рекурсивной;

Вы также можете покончить с локальной инициализацией.

0 голосов
/ 05 октября 2018

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

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

Это цель visited collection (будь то массив, набор и т. Д. Не имеет значения).Альтернативы могут быть для каждого узла, чтобы иметь флаг посещения, который может быть сброшен перед обходом и установлен во время обхода.Это устраняет необходимость в глобальной коллекции, но накладывает свои собственные ограничения (одновременно может происходить только один обход).

Коллекция visited не обязательно должна быть "глобальной" 1 , но он должен находиться в общем объеме, который разделяют все части каждого обхода.


1 Если он "глобальный", то в любой области, которая имеет значение,снова возможен только один проход за раз.

...