logo

BFS проти DFS

Перш ніж розглядати відмінності між BFS і DFS, ми повинні знати про BFS і DFS окремо.

Що таке BFS?

BFS виступає за Пошук спочатку вшир . Він також відомий як обхід порядку рівня . Структура даних Queue використовується для обходу пошуку в ширину. Коли ми використовуємо алгоритм BFS для обходу в графі, ми можемо розглядати будь-який вузол як кореневий вузол.

Давайте розглянемо наведений нижче графік для обходу пошуку в ширину.

scan.next java
BFS проти DFS

Припустимо, ми вважаємо вузол 0 кореневим вузлом. Таким чином, обхід буде розпочато з вузла 0.

BFS проти DFS

Після видалення вузла 0 із черги він друкується та позначається як a відвіданий вузол.

Після того, як вузол 0 буде видалено з черги, сусідні вузли вузла 0 будуть вставлені в чергу, як показано нижче:

BFS проти DFS

Тепер вузол 1 буде видалено з черги; він друкується та позначається як відвіданий вузол

Після того, як вузол 1 буде видалено з черги, усі суміжні вузли вузла 1 будуть додані до черги. Сусідніми вузлами вузла 1 є 0, 3, 2, 6 і 5. Але ми повинні вставити в чергу лише невідвідані вузли. Оскільки вузли 3, 2, 6 і 5 є невідвіданими; тому ці вузли будуть додані в чергу, як показано нижче:

BFS проти DFS

Наступний вузол 3 у черзі. Отже, вузол 3 буде видалено з черги, він буде надрукований і позначений як відвіданий, як показано нижче:

BFS проти DFS

Після того, як вузол 3 буде видалено з черги, усі суміжні вузли вузла 3, крім відвіданих вузлів, будуть додані до черги. Сусідніми вузлами вузла 3 є 0, 1, 2 і 4. Оскільки вузли 0, 1 уже відвідано, а вузол 2 присутній у черзі; отже, нам потрібно вставити лише вузол 4 у чергу.

перейменування каталогу linux
BFS проти DFS

Тепер наступним вузлом у черзі є 2. Отже, 2 буде видалено з черги. Він друкується та позначається як відвіданий, як показано нижче:

BFS проти DFS

Після того, як вузол 2 буде видалено з черги, усі суміжні вузли вузла 2, крім відвіданих вузлів, будуть додані до черги. Сусідніми вузлами вузла 2 є 1, 3, 5, 6 і 4. Оскільки вузли 1 і 3 вже були відвідані, а 4, 5, 6 вже додано в чергу; отже, нам не потрібно вставляти вузол у чергу.

Наступний елемент – 5. Отже, 5 буде видалено з черги. Він друкується та позначається як відвіданий, як показано нижче:

BFS проти DFS

Після того, як вузол 5 буде видалено з черги, усі суміжні вузли вузла 5, крім відвіданих вузлів, будуть додані до черги. Сусідні вузли вузла 5 — це 1 і 2. Оскільки обидва вузли вже були відвідані; отже, немає вершини, яку можна вставити в чергу.

Наступний вузол 6. Отже, 6 буде видалено з черги. Він друкується та позначається як відвіданий, як показано нижче:

BFS проти DFS

Після того, як вузол 6 буде видалено з черги, усі суміжні вузли вузла 6, крім відвіданих вузлів, будуть додані до черги. Сусідніми вузлами вузла 6 є 1 і 4. Оскільки вузол 1 уже відвідано, а вузол 4 уже додано в чергу; отже, немає вершини для вставлення в чергу.

Наступним елементом у черзі є 4. Отже, 4 буде видалено з черги. Він друкується та позначається як відвіданий.

Після того, як вузол 4 буде видалено з черги, усі суміжні вузли вузла 4, крім відвіданих вузлів, будуть додані до черги. Сусідніми вузлами вузла 4 є 3, 2 і 6. Оскільки всі сусідні вузли вже відвідано; отже, немає жодної вершини для вставлення в чергу.

анаконда проти змії-пітона

Що таке DFS?

ДФС розшифровується як Depth First Search. У обході DFS використовується стекова структура даних, яка працює за принципом LIFO (Last In First Out). У DFS обхід можна розпочати з будь-якого вузла, або ми можемо сказати, що будь-який вузол можна вважати кореневим вузлом, доки кореневий вузол не згадується в задачі.

У випадку BFS, елемент, який видаляється з черги, сусідні вузли видаленого вузла додаються до черги. На відміну від цього, у DFS, елемент, який видаляється зі стеку, тоді до стека додається лише один суміжний вузол видаленого вузла.

Давайте розглянемо наведений нижче графік для обходу Depth First Search.

BFS проти DFS

Розглядайте вузол 0 як кореневий вузол.

Спочатку ми вставляємо елемент 0 у стек, як показано нижче:

css підкреслений текст
BFS проти DFS

Вузол 0 має два суміжних вузла, тобто 1 і 3. Тепер ми можемо взяти лише один суміжний вузол, або 1, або 3, для обходу. Припустимо, ми розглядаємо вузол 1; отже, 1 вставляється в стек і друкується, як показано нижче:

BFS проти DFS

Тепер ми розглянемо суміжні вершини вузла 1. Невідвіданими сусідніми вершинами вузла 1 є 3, 2, 5 і 6. Ми можемо розглянути будь-яку з цих чотирьох вершин. Припустимо, ми беремо вузол 3 і вставляємо його в стек, як показано нижче:

BFS проти DFS

Розглянемо невідвідані суміжні вершини вузла 3. Невідвідані суміжні вершини вузла 3 — це 2 і 4. Ми можемо взяти будь-яку з вершин, тобто 2 або 4. Припустимо, ми беремо вершину 2 і вставляємо її в стек, як показано нижче:

BFS проти DFS

Невідвідані суміжні вершини вузла 2 — це 5 і 4. Ми можемо вибрати будь-яку з вершин, тобто 5 або 4. Припустимо, ми беремо вершину 4 і вставляємо її в стек, як показано нижче:

BFS проти DFS

Тепер ми розглянемо невідвідані суміжні вершини вузла 4. Невідвідана суміжна вершина вузла 4 є вузлом 6. Тому елемент 6 вставляється в стек, як показано нижче:

BFS проти DFS

Після вставки елемента 6 у стек ми подивимося на невідвідані суміжні вершини вузла 6. Оскільки немає невідвіданих суміжних вершин вузла 6, ми не можемо перейти за межі вузла 6. У цьому випадку ми виконаємо відкат . Найвищий елемент, тобто 6, буде висунуто зі стеку, як показано нижче:

BFS проти DFS
BFS проти DFS

Найвищий елемент у стеку — це 4. Оскільки від вузла 4 не залишилося невідвіданих суміжних вершин; отже, вузол 4 висувається зі стеку, як показано нижче:

усі великі літери ярлик excel
BFS проти DFS
BFS проти DFS

Наступний найвищий елемент у стеку – 2. Тепер ми розглянемо невідвідані сусідні вершини вузла 2. Оскільки залишився лише один невідвіданий вузол, тобто 5, то вузол 5 буде поміщено в стек вище 2 і буде надруковано як показано нижче:

BFS проти DFS

Тепер ми перевіримо суміжні вершини вузла 5, які ще не відвідані. Оскільки не залишилося жодної вершини, яку потрібно відвідати, ми витягуємо елемент 5 зі стеку, як показано нижче:

BFS проти DFS

Ми не можемо рухатися далі на 5, тому нам потрібно виконати зворотний шлях. Під час зворотного відстеження верхній елемент буде висунуто зі стеку. Найвищий елемент — це 5, який буде висунуто зі стеку, і ми повернемося до вузла 2, як показано нижче:

BFS проти DFS

Тепер ми перевіримо невідвідані суміжні вершини вузла 2. Оскільки не залишилося жодної суміжної вершини, яку потрібно відвідати, ми виконуємо зворотне відстеження. У зворотному відстеженні верхній елемент, тобто 2, буде висунуто зі стеку, і ми повернемося до вузла 3, як показано нижче:

BFS проти DFS
BFS проти DFS

Тепер ми перевіримо невідвідані суміжні вершини вузла 3. Оскільки не залишилося жодної суміжної вершини, яку потрібно відвідати, ми виконуємо зворотне відстеження. У зворотному відстеженні верхній елемент, тобто 3, буде вискочити зі стеку, і ми повернемося до вузла 1, як показано нижче:

BFS проти DFS
BFS проти DFS

Після відкриття елемента 3 ми перевіримо невідвідані суміжні вершини вузла 1. Оскільки не залишилося жодної вершини, яку потрібно відвідати; отже, буде виконано зворотне відстеження. У зворотному відстеженні верхній елемент, тобто 1, буде висунуто зі стеку, і ми повернемося до вузла 0, як показано нижче:

BFS проти DFS
BFS проти DFS

Ми перевіримо суміжні вершини вузла 0, які ще не відвідані. Оскільки не залишилося жодної суміжної вершини, яку потрібно відвідати, ми виконуємо відстеження. У цьому випадку лише один елемент, тобто 0, що залишився в стеку, буде винесено зі стеку, як показано нижче:

BFS проти DFS

Як ми бачимо на малюнку вище, стек порожній. Отже, ми повинні зупинити обхід DFS тут, а елементи, які друкуються, є результатом обходу DFS.

Відмінності між BFS і DFS

Нижче наведено відмінності між BFS і DFS:

BFS ДФС
Повна форма BFS розшифровується як Breadth First Search. DFS означає Depth First Search.
Техніка Це техніка на основі вершин для пошуку найкоротшого шляху в графі. Це техніка, заснована на ребрах, оскільки спочатку досліджуються вершини вздовж краю від початкового до кінцевого вузла.
Визначення BFS — це техніка обходу, за якої спочатку досліджуються всі вузли одного рівня, а потім ми переходимо до наступного рівня. DFS також є технікою обходу, у якій обхід починається з кореневого вузла та досліджується вузли настільки далеко, наскільки це можливо, поки ми не досягнемо вузла, який не має невідвіданих сусідніх вузлів.
Структура даних Структура даних черги використовується для обходу BFS. Структура даних стека використовується для обходу BFS.
Відстеження назад BFS не використовує концепцію зворотного відстеження. DFS використовує зворотне відстеження для проходження всіх невідвіданих вузлів.
Кількість ребер BFS знаходить найкоротший шлях із мінімальною кількістю ребер для проходження від вихідної до кінцевої вершини. У DFS потрібна більша кількість ребер для переходу від вихідної вершини до кінцевої вершини.
Оптимальність Обхід BFS оптимальний для тих вершин, які потрібно шукати ближче до вихідної вершини. Обхід DFS оптимальний для тих графів, у яких розв’язки віддалені від вихідної вершини.
швидкість BFS повільніше, ніж DFS. DFS швидше, ніж BFS.
Придатність для дерева рішень Він не підходить для дерева рішень, оскільки спочатку вимагає вивчення всіх сусідніх вузлів. Він підходить для дерева рішень. На основі рішення досліджує всі шляхи. Коли мета знайдена, вона припиняє свій обхід.
Ефективна пам'ять Це не ефективне використання пам'яті, оскільки вимагає більше пам'яті, ніж DFS. Він ефективний, оскільки потребує менше пам’яті, ніж BFS.