logo

BFS срещу DFS

Преди да разгледаме разликите между BFS и DFS, първо трябва да знаем за BFS и DFS поотделно.

Какво е BFS?

BFS означава Първо търсене в ширина . Известен е още като преминаване на реда на ниво . Структурата на данните на опашката се използва за обхождане на първо търсене в ширина. Когато използваме алгоритъма BFS за обхождане в графика, можем да считаме всеки възел за основен възел.

Нека разгледаме графиката по-долу за обхода на първо търсене в ширина.

референтни типове данни в 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 в опашка.

wumpus свят
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?

DFS означава Depth First Search. При DFS traversal се използва стековата структура на данните, която работи на принципа LIFO (Last In First Out). В DFS преминаването може да започне от всеки възел или можем да кажем, че всеки възел може да се счита за основен възел, докато основният възел не бъде споменат в проблема.

В случай на BFS, елементът, който е изтрит от опашката, съседните възли на изтрития възел се добавят към опашката. За разлика от това, в DFS, елементът, който е премахнат от стека, тогава в стека се добавя само един съседен възел на изтрит възел.

Нека разгледаме графиката по-долу за обхода на първо търсене в дълбочина.

какво е обработка на изключения в java
BFS срещу DFS

Разгледайте възел 0 като основен възел.

шаблон за проектиране на строител

Първо вмъкваме елемента 0 в стека, както е показано по-долу:

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 се изважда от стека, както е показано по-долу:

BFS срещу DFS
BFS срещу DFS

Следващият най-горен елемент в стека е 2. Сега ще разгледаме непосетените съседни върхове на възел 2. Тъй като е останал само един непосетен възел, т.е. 5, така че възел 5 ще бъде избутан в стека над 2 и ще бъде отпечатан както е показано по-долу:

BFS срещу DFS

Сега ще проверим съседните върхове на възел 5, които все още не са посетени. Тъй като не е останал връх за посещение, изваждаме елемент 5 от стека, както е показано по-долу:

BFS срещу DFS

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

f-низ питон
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 DFS
Пълна форма BFS означава Търсене първо в ширина. DFS означава първо търсене в дълбочина.
Техника Това е базирана на върха техника за намиране на най-краткия път в графика. Това е техника, базирана на ръба, тъй като върховете по ръба се изследват първо от началния до крайния възел.
Определение BFS е техника за преминаване, при която първо се изследват всички възли от едно и също ниво и след това преминаваме към следващото ниво. DFS също е техника за преминаване, при която преминаването започва от основния възел и се изследват възлите, доколкото е възможно, докато стигнем до възела, който няма непосетени съседни възли.
Структура на данни Структурата на данните на опашката се използва за преминаване на BFS. Структурата на данните на стека се използва за преминаване на BFS.
Обратно проследяване BFS не използва концепцията за обратно проследяване. DFS използва обратно проследяване, за да премине през всички непосетени възли.
Брой ръбове BFS намира най-краткия път с минимален брой ръбове за преминаване от източника до целевия връх. В DFS се изисква по-голям брой ръбове за преминаване от изходния връх до целевия връх.
Оптималност BFS обхождането е оптимално за онези върхове, които трябва да се търсят по-близо до изходния връх. Обхождането на DFS е оптимално за тези графики, в които решенията са далеч от изходния връх.
Скорост BFS е по-бавен от DFS. DFS е по-бърз от BFS.
Пригодност за дърво на решенията Не е подходящо за дървото на решенията, защото изисква първо да се проучат всички съседни възли. Подходящ е за дървото на решенията. Въз основа на решението, той изследва всички пътища. Когато целта бъде намерена, тя спира преминаването си.
Ефективна памет Не е ефективен от паметта, тъй като изисква повече памет от DFS. Той е ефективен от паметта, тъй като изисква по-малко памет от BFS.