Поиск в ширину и поиск в глубину

Кто-либо может дать ссылку для простого объяснения на BFS и DFS с его реализацией?

24
задан bignose 24 March 2010 в 05:04
поделиться

7 ответов

Допустим, вам дана следующая структура:

Format: Node [Children]

A [B C D]
B [E F]
C [G]
D []
E []
F []
G []

Поиск в ширину посещает все дочерние узлы перед посещением их дочерних узлов. Вот псевдокод и решение для вышеупомянутой структуры:

1. Enqueue root node.
2. Dequeue and output. If the queue is empty, go to step 5.
3. Enqueue the dequeued node's children.
4. Go to Step 2.
5. Done
Two queues: (Active Node) [Output] [Working Set]
Starting with root:
( ) []              [A]
(A) [A]             [B C D] 
(B) [A B]           [C D E F] 
(C) [A B C]         [D E F G] 
(D) [A B C D]       [E F G] 
(E) [A B C D E]     [F G] 
(F) [A B C D E F]   [G] 
(G) [A B C D E F G] [] 

Done

Поиск в глубину сначала посещает самый нижний уровень (самые глубокие дочерние элементы) дерева. Существует два типа поиска в глубину: предварительный заказ и пост-заказ. Это просто различает, когда вы добавляете узел к выходу (когда вы его посещаете, а не оставляете его).

    var rootNode = structure.getRoot();
    var preOrder = new Array();
    var postOrder = new Array();
    function DepthFirst( rootNode ){
        // Pre-order
        preOrder[ preOrder.length ] = rootNode;

        for( var child in rootNode ){
            DepthFirst( child );
        }

        // Post-order
        postOrder[ postOrder.length ] = rootNode;
    }
Pre-order:
* A B E F C G D

Post-order:
* E F B G C D A
26
ответ дан 28 November 2019 в 22:18
поделиться

Допустим, у вас есть дерево следующего вида:

alt text

Это может немного сбивать с толку, потому что E является потомком A и F, но это помогает проиллюстрировать глубина в поиске в глубину. Поиск в глубину сначала исследует дерево настолько глубоко (отсюда и термин «глубина»), насколько это возможно. Таким образом, обход слева направо будет A, B, D, F, E, C, G.

Поиск в ширину сначала оценивает всех дочерних элементов, прежде чем перейти к дочерним элементам. Таким образом, это же дерево будет идти A, B, C, E, D, F, G.

Надеюсь, это поможет.

7
ответ дан 28 November 2019 в 22:18
поделиться

вы можете найти все на вики:

BFS и DFS

эта ссылка тоже может быть полезной. Если вам нужна реализация, перейдите в: Библиотека повышения c ++: DFS

5
ответ дан 28 November 2019 в 22:18
поделиться

Вот несколько ссылок, на которые стоит обратить внимание:

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

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

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

3
ответ дан 28 November 2019 в 22:18
поделиться

обход графа с помощью dfs и bfs.

в c ++ и python .

1
ответ дан 28 November 2019 в 22:18
поделиться

Поиск в глубину:

alt text

35
ответ дан 28 November 2019 в 22:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: