BFS против DFS: знайте разницу

Содержание:

Anonim

Что такое BFS?

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

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

После посещения все узлы помечаются. Эти итерации продолжаются до тех пор, пока все узлы графа не будут успешно посещены и отмечены. Полная форма BFS - это поиск в ширину.

В этом BSF Vs. В руководстве по бинарному дереву DFS вы узнаете:

  • Что такое BFS?
  • Что такое DFS?
  • Пример BFS
  • Пример DFS
  • Разница между двоичным деревом BFS и DFS
  • Приложения BFS
  • Приложения DFS

Что такое DFS?

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

Пример BFS

В следующем примере DFS мы использовали граф с 6 вершинами.

Пример BFS

Шаг 1)

У вас есть график из семи чисел в диапазоне от 0 до 6.

Шаг 2)

0 или ноль был отмечен как корневой узел.

Шаг 3)

0 посещается, помечается и вставляется в структуру данных очереди.

Шаг 4)

Оставшиеся 0 соседних и непосещенных узлов посещаются, помечаются и вставляются в очередь.

Шаг 5)

Итерации обхода повторяются до тех пор, пока не будут посещены все узлы.

Пример DFS

В следующем примере DFS мы использовали неориентированный граф с 5 вершинами.

Шаг 1)

Мы начали с вершины 0. Алгоритм начинается с помещения ее в список посещенных и одновременного помещения всех смежных вершин в структуру данных, называемую стеком.

Шаг 2)

Вы посетите элемент, который находится наверху стека, например, 1, и перейдете к его соседним узлам. Это потому, что 0 уже был посещен. Поэтому посещаем вершину 2.

Шаг 3)

В вершине 2 есть непосещенная ближайшая вершина в 4. Поэтому мы добавляем ее в стек и посещаем ее.

Шаг 4)

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

Разница между двоичным деревом BFS и DFS

BFS DFS
BFS находит кратчайший путь к месту назначения. DFS переходит в конец поддерева, а затем выполняет возврат.
Полная форма BFS - это поиск в ширину. Полная форма DFS - это поиск в глубину.
Он использует очередь, чтобы отслеживать следующее место для посещения. Он использует стек, чтобы отслеживать следующее место для посещения.
BFS проходит согласно уровню дерева. DFS проходит согласно глубине дерева.
Это реализовано с использованием списка FIFO. Это реализовано с использованием списка LIFO.
Для этого требуется больше памяти по сравнению с DFS. Он требует меньше памяти по сравнению с BFS.
Этот алгоритм дает решение с наиболее мелким путем. Этот алгоритм не гарантирует решения по самому мелкому пути.
В BFS нет необходимости в возврате. В DFS есть необходимость в возврате.
Вы никогда не попадете в ловушку конечных циклов. Вы можете попасть в бесконечные петли.
Если вы не нашли никакой цели, возможно, вам придется расширить множество узлов, прежде чем будет найдено решение. Если вы не найдете никакой цели, может произойти возврат листового узла.

Приложения BFS

Вот приложения BFS:

Невзвешенные графики:

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

P2P сети:

BFS может быть реализован для обнаружения всех ближайших или соседних узлов в одноранговой сети. Это позволит быстрее найти нужные данные.

Веб-сканеры:

Поисковые системы или веб-сканеры могут легко создавать несколько уровней индексов, используя BFS. Реализация BFS начинается с источника, которым является веб-страница, а затем посещаются все ссылки из этого источника.

Сетевое вещание:

Широковещательный пакет управляется алгоритмом BFS, чтобы найти и достичь всех узлов, для которых он имеет адрес.

Приложения DFS

Вот важные приложения DFS:

Взвешенный график:

В взвешенном графе обход графа DFS генерирует дерево кратчайших путей и минимальное остовное дерево.

Обнаружение цикла на графике:

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

Найти путь:

Мы можем специализироваться на алгоритме DFS для поиска пути между двумя вершинами.

Топологическая сортировка:

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

Поиск сильно связанных компонентов графа:

Он используется в графе DFS, когда есть путь от каждой вершины в графе к другим оставшимся вершинам.

Решение головоломок одним решением:

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

КЛЮЧЕВЫЕ ОТЛИЧИЯ:

  • BFS находит кратчайший путь к месту назначения, тогда как DFS идет к нижней части поддерева, а затем выполняет возврат.
  • Полная форма BFS - это поиск в ширину, а полная форма DFS - это поиск в глубину.
  • BFS использует очередь, чтобы отслеживать следующее место для посещения. тогда как DFS использует стек для отслеживания следующего места для посещения.
  • BFS проходит в соответствии с уровнем дерева, а DFS проходит в соответствии с глубиной дерева.
  • BFS реализуется с использованием списка FIFO, с другой стороны, DFS реализуется с использованием списка LIFO.
  • В BFS вы никогда не можете попасть в конечные циклы, тогда как в DFS вы можете попасть в бесконечные циклы.