BFS против DFS – разница между ними

Ключевая разница между BFS и DFS

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

Что такое БФС?

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

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

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

Что такое ДФС?

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

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

Вот важные различия между BFS и DFS.

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

Пример БФС

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

Пример БФС

Шаг 1)

Пример БФС

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

Шаг 2)

Пример БФС

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

Шаг 3)

Пример БФС

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

Шаг 4)

Пример БФС

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

Шаг 5)

Пример БФС

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

Пример ДФС

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

Пример ДФС

Шаг 1)

Пример ДФС

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

Шаг 2)

Пример ДФС

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

Шаг 3)

Пример ДФС

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

Шаг 4)

Пример ДФС

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

Пример ДФС

Приложения BFS

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

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

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

P2P-сети

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

Веб-краулеры

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

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

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

Приложения DFS

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

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

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

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

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

Найти путь

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

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

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

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

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

Решение головоломок только с одним решением

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