Яке значення "широти" у першому пошуку?


11

Я дізнався про широту пошуку вперше, і в голові з'явилося питання, чому BFS так називається. У книзі « Вступ до алгоритмів CLRS» я прочитав таку причину цього:

Шеричний пошук названий так, тому що він розширює межу між виявленими та нерозкритими вершинами рівномірно по всій широті кордону.

Однак я не в змозі зрозуміти значення цього твердження. Мене плутає слово "кордон" і широта цієї межі.

Отже, чи може хтось відповісти на це питання так, як легко зрозуміти для початківця, як я?


4
Якщо деякі читачі не знайомі зі значенням англійського слова (за межами його використання як частини цього технічного терміна): merriam-webster.com/dictionary/breadth або dictionary.cambridge.org/dictionary/english/breadth . Це схоже на "ширину", інший вимір, ніж "глибина", якщо ви говорите про розмір / форму фізичного об'єкта. І в метафоричному сенсі, як глибина знань (експерт з одного предмета) проти широти знань (безліч предметів).
Пітер Кордес

Відповіді:


22

Розглянемо структуру даних, яка використовується для представлення пошуку. У BFS ви використовуєте чергу. Якщо ви натрапите на невидимий вузол, ви додасте його до черги.

"Межа" - це сукупність усіх вузлів у структурі даних пошуку. Черга буде повторюватися послідовно через усі вузли на кордоні, тим самим повторюючись по ширині кордону. DFS завжди буде виводити останнє відкрите стан зі стека, таким чином, завжди повторюючись над найглибшою частиною кордону.

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

dfs bfs

Зображення тут


2
Я думаю, що слово кордон може стосуватися краю виявлених вузлів. Коли ви лише виявили a, межа є a. Коли ви виявили a, b, c, межа є b, c. Коли ви виявили a, b, c, d, e, f, g, межа є d, e, f, g. Іншими словами, виявлені вузли, які ми ще не шукали.
Теодорос

Я думаю, що це справедливо, але я вважаю, що "кордон" можна трактувати декількома способами, причому загальне пояснення вище все ще працює.
Трокмортон

2

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

Про це йдеться далі:

Для відстеження прогресу BFS забарвлює кожну вершину в білий, сірий або чорний. Всі вершини починають білі, а згодом можуть ставати сірими, а потім чорними. Вершина виявляється вперше, коли вона зустрічається під час пошуку, в цей час вона стає небілою. Таким чином, сірі та чорні вершини були виявлені, але BFS розрізняє їх для того, щоб пошук проходив BF способом.
...
кожна вершина спочатку є білою, сірою, коли вона виявлена ​​в процесі пошуку, і затемнюється, коли вона закінчена, тобто коли її список суміжності був повністю вивчений.

Тому всі вершини починаються білими (нерозкритими). Коли вузол виявлений, він кольоровий сірий (прикордонний). Коли все, на що вказується, було виявлено, воно забарвлюється в чорний колір (повністю виявлено). Межа - це сукупність точок, які були виявлені, але не виявили дітей.

Припустимо, ви щось шукаєте на веб-сайті. Ви спочатку переходите на головну сторінку. Припустимо, це позначено як "тварини". На даний момент кордон {"тварини"}. Ви переглядаєте головну сторінку і не бачите, що шукаєте. Але ви помічаєте, що він містить посилання на ще дві сторінки, «чотириноги» та «черв’яки». Отже, ви натискаєте на посилання на "чотириногі". Тепер кордон - це {"тварини", "чотириногі"}. Ви переглядаєте "чотириногих" і не знаходите того, що шукаєте. Що робити далі? Ви можете або шукати посилання на "чотириногих" і переходити за ними, або повернутися до "тварин" і натиснути на посилання "черви". Перший - це пошук у глибині першого, а другий - пошук у ширину.

"глибина" позначає скільки посилань від кореневого вузла потрібно, щоб дістатися до вузла, тоді як "широта" відноситься до вузлів як однакової глибини. У наведеному вище прикладі BFS починається з "тварин" і спочатку оглядає всі вузли глибини один, тому спочатку дивиться на "чотириногих" та "червів". Після того, як він оглянув усі вузли глибини-1, він розширює кордон по всіх цих вузлах; тобто він дивиться на дітей усіх вузлів глибини-1, перш ніж дивитись на когось із дітей із вузлами глибини-2. Так, наприклад, якщо одне з посилань на сторінці "чотириногих" - "примати", воно перегляне всі посилання на сторінці "черв'яків", перш ніж перегляне будь-яке посилання на сторінці "приматів".


1

ааа2а

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

аа

кака(к0)0{а}аа

ааа

Таким чином, DFS та BFS відрізняються за порядком, у якому вони відвідують вершини.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.