44

DFSまたはBFSにスタックを使用するか、キューを使用するかを常に混同しています。どのアルゴリズムがどのデータ構造を使用しているかを覚える方法について、誰かが直感を教えてくれませんか?

4

15 に答える 15

142

キューは一般に構造が水平であると考えることができます。つまり、幅/幅はキューに起因する可能性があります-BFS

スタック垂直構造として視覚化されるため、深さ-DFSがあります

于 2015-09-24T05:23:19.907 に答える
41

一枚の紙に小さなグラフを描き、各実装でノードが処理される順序について考えます。ノードに遭遇する順序とノードを処理する順序は、検索間でどのように異なりますか?

それらの1つはスタック(深さ優先)を使用し、もう1つはキュー(幅優先)を使用します(少なくとも非再帰的な実装の場合)。

于 2010-10-14T00:22:47.327 に答える
39

バーベキューを心に留めて覚えています。バーベキューは「B」で始まり、「q」のような音で終わります。したがって、BFS->キューと残りのDFS->スタックです。

于 2014-09-28T09:51:51.300 に答える
27

BFSは、最初に最も近い頂点を探索/処理してから、ソースから離れて外側に移動します。これを前提として、クエリされたときに、挿入された順序に基づいて最も古い要素を提供するデータ構造を使用する必要があります。キューは先入れ先出し(FIFO)であるため、この場合に必要なものです。一方、DFSは、最初に各ブランチに沿って可能な限り探索し、次にブラックトラックを探索します。この場合、スタックはLIFO(後入れ先出し)であるため、より適切に機能します。

于 2011-10-20T08:56:49.623 に答える
10

BFSは常にキューを使用し、Dfsはスタックデータ構造を使用します。前の説明で、DFSがバックトラッキングを使用していることを説明しました。バックトラックはスタックによってのみ続行できることを忘れないでください。

于 2013-03-04T09:30:20.253 に答える
10

アルファベット順に取ってください...

.... B(BFS)..... C ...... D(DFS)... ..

.... Q(キュー)... R ...... S(スタック)..。

于 2016-05-17T10:59:39.507 に答える
6

BFS->B->バーベキュー->キュー

DFS->S->スタック

于 2020-12-04T09:42:12.117 に答える
4

何も覚えていない。

検索に使用されるデータ構造がXであると仮定します。

幅優先=先にXに入ったノード最初にツリーで生成する必要があります。Xはキューです。

深さ優先=後でXに入ったノード最初にツリーで生成する必要があります。Xはスタックです。

簡単に言うと、スタックは後入れ先出し、つまりDFSです。キューは先入れ先出し、つまりBFSです。

于 2018-11-25T10:58:59.163 に答える
3

Bfs;幅=>キュー

Dfs;深さ=>スタック

それらの構造を参照してください

于 2013-03-24T06:16:47.817 に答える
2

深さ優先探索では、を使用しStackて、行き止まりに達したときにどこに進むべきかを記憶します。

DFSS

于 2016-05-06T08:36:24.163 に答える
1
  1. スタック(後入れ先出し、LIFO)。DFSの場合、ルートから可能な限り最も遠いノードまで取得します。これはLIFOと同じ考え方です。

  2. キュー(先入れ先出し、FIFO)。BFSの場合、1レベルずつ取得します。ノードの上位レベルにアクセスした後、ノードの下位レベルにアクセスします。これはFIFOと同じ考え方です。

于 2017-07-03T13:28:55.400 に答える
1

特に若い学生にとって覚えやすい簡単な方法は、同様の頭字語を使用することです。

BFS =>キューにいるBoyFriendS(明らかに人気のある女性の場合)。

それ以外の場合、DFSは(スタック)です。

于 2018-05-27T06:42:38.617 に答える
0

私はこの答えを共有したいと思います: https ://stackoverflow.com/a/20429574/3221630

BFSを取得し、キューをスタックに置き換えると、DFSと同じ訪問順序が再現され、実際のDFSアルゴリズムよりも多くのスペースが使用されます。

于 2017-04-30T02:05:02.380 に答える
0
于 2018-07-28T15:30:28.390 に答える
0

これは覚えておくべき簡単な例えです。BFSでは、一度に1つのレベルに移動しますが、DFSでは、他のレベルにアクセスする前に、できるだけ左に深く移動します。基本的に、たくさんのものを積み上げて、それらを1つずつ分析します。したがって、これがSTACKの場合、もう1つはキューです。

可能な限り大きく、「積み上げる」、「積み上げる」ことを忘れないでください。(DFS)。

于 2020-11-12T20:55:18.223 に答える