markdown
DFSとBFSの基本md fc4dc8c
lecture/information/algorithm/search/dfs-and-bfs-basics.lecture.n.md
Download PDF

DFSとBFSの基本きほん

date2026-07-14document_iddoc_27963c03131e4b56c071e4c2964429c7descriptionDFSとBFSを候補管理の違いから定義し、訪問済み管理、正当性、計算量、無重み最短距離を説明する。prerequisitesグラフの頂点・辺・隣接・道・距離 / スタックとキューの基本 / 再帰の基本type講義statusactiverelateddata/lecture/information/graph/graph-basics.lecture.n.md / data/lecture/information/algorithm/data-structures/stack-and-queue-basics.lecture.n.md
algorithmsearchundergraduatelecture

1導入どうにゅう

この講義こうぎでは、ふか優先探索ゆうせんたんさく幅優先探索はばゆうせんたんさく候補頂点こうほちょうてん管理方法かんりほうほうから定義ていぎし、訪問済ほうもんず集合しゅうごう必要ひつよう理由りゆう到達可能性とうたつかのうせいかんする正当性せいとうせい計算量けいさんりょう、BFSが無重むおも最短距離さいたんきょりもとめる理由りゆう説明せつめいする。

線形探索せんけいたんさく二分探索にぶんたんさく配列はいれつから目標値もくひょうち探索たんさくした。これにたいし、この講義こうぎではグラフの頂点ちょうてんへん沿って列挙れっきょする探索たんさくあつかう。

グラフの頂点ちょうてんへん隣接りんせつみち距離きょり前提ぜんていとする。未確認みかくにん場合ばあいは、さきにグラフの基本きほん参照さんしょうする。

data/lecture/information/graph/graph-basics.lecture.n.md data/lecture/information/algorithm/data-structures/stack-and-queue-basics.lecture.n.md

2共通きょうつう探索たんさく枠組わくぐ

グラフ G=(V,E)始点してん sVかんがえる。探索たんさくでは、発見済はっけんずみだが隣接頂点りんせつちょうてん調査ちょうさえていない頂点ちょうてん候補こうほとして保持ほじする。

  1. 訪問済ほうもんず集合しゅうごうS={s} とし、候補こうほs追加ついかする。
  2. 候補こうほからでないあいだ頂点ちょうてん vひとす。
  3. v各隣接頂点かくりんせつちょうてん uN(v) について、uS なら uS候補こうほ追加ついかする。

頂点ちょうてん候補こうほ追加ついかすると同時どうじ訪問済ほうもんずみにすることが重要じゅうようである。した時点じてんまで記録きろくおくらせると、おな頂点ちょうてん複数ふくすうへんから重複ちょうふくして追加ついかされる。

3DFS

ふか優先探索ゆうせんたんさく(depth-first search; DFS)は候補こうほをスタックで管理かんりし、最後さいご追加ついかした候補こうほ優先ゆうせんする。再帰版さいきばんでは、ある頂点ちょうてん未探索みたんさく隣接頂点りんせつちょうてんひとえらんで再帰呼出さいきよびだしを完了かんりょうしてからつぎえらぶため、ひとつのみち延長えんちょうしてからもどる。

再帰さいきによる実装じっそうでは、関数呼出かんすうよびだしのスタックが候補こうほスタックの役割やくわりになう。再帰版さいきばんでも、循環じゅんかんふくむグラフで停止ていしするには訪問済ほうもんず集合しゅうごう必要ひつようである。

4BFS

幅優先探索はばゆうせんたんさく(breadth-first search; BFS)は候補こうほをキューで管理かんりする。さき追加ついかした頂点ちょうてんさきす。

BFSで頂点ちょうてん uはじめて発見はっけんしたとき、そのおやv として

[u]=[v]+1

記録きろくする。初期値しょきち[s]=0 である。まず 探索たんさくのレベルとび、最短距離さいたんきょりとの一致いっちつぎ証明しょうめいする。

5BFS最短性さいたんせい根拠こんきょ

おやじゅんにたどると、レベル [u]頂点ちょうてん u にはなが[u]みち存在そんざいする。したがってしん最短距離さいたんきょりδ(s,u) とすれば、δ(s,u)[u] である。

レベル k頂点ちょうてんから追加ついかされる頂点ちょうてんのレベルは k+1 であり、それまでにキューへ追加ついかされた頂点ちょうてんよりまえにはかれない。したがってFIFO順序じゅんじょにより、キューからはレベルの非減少順ひげんしょうじゅん頂点ちょうてんされる。

逆向ぎゃくむきの不等式ふとうしきを、しん距離きょりかんする帰納法きのうほうしめす。δ(s,u)=0 なら u=s であり [u]=0 である。δ(s,u)=r>0 とし、最短さいたんみちu直前ちょくぜんにある頂点ちょうてんw とする。δ(s,w)=r-1 なので、帰納法きのうほう仮定かていにより [w]=r-1 である。w はレベル r頂点ちょうてんよりまえ処理しょりされ、そのとき u未発見みはっけんなら [u]=r として発見はっけんされる。すでに発見済はっけんずみなら、そのレベルは r 以下いかである。ゆえに [u]r=δ(s,u) である。両方りょうほう不等式ふとうしきから [u]=δ(s,u)成立せいりつする。

この主張しゅちょう各辺かくへん費用ひようひとしい無重むおもみグラフにかぎられる。へんごとにことなる非負ひふおもみがある場合ばあいは、Dijkstraほうなどべつ方法ほうほう必要ひつようである。

6到達可能性とうたつかのうせい停止性ていしせい

探索中たんさくちゅう訪問済ほうもんずみとなる頂点ちょうてんは、既知きちみち一辺いっぺんだけ延長えんちょうして発見はっけんされるため、かなら始点してんから到達可能とうたつかのうである。ぎゃくに、ながrみち到達とうたつできる頂点ちょうてん発見はっけんされることを rかんする帰納法きのうほうしめす。r=0始点してんである。r>0 では、直前ちょくぜん頂点ちょうてん帰納法きのうほう仮定かていにより発見はっけんされ、有限個ゆうげんこ候補こうほ順次処理じゅんじしょりされるため、やがてされてつぎ頂点ちょうてん発見はっけんする。したがって、DFSとBFSはいずれも到達可能とうたつかのう頂点ちょうてんをちょうど一度いちどずつ訪問ほうもんする。

有限ゆうげんグラフでは各頂点かくちょうてん候補こうほ高々一度たかだかいちどしか追加ついかしないので、探索たんさくかなら停止ていしする。

7計算量けいさんりょう

隣接りんせつリストをもちいる場合ばあい各頂点かくちょうてん一度処理いちどしょりされ、無向むこうグラフの各辺かくへん両端りょうたんから高々一度たかだかいちどずつ調しらべられる。したがってDFSとBFSの時間計算量じかんけいさんりょう

O(|V|+|E|)

であり、訪問済ほうもんず集合しゅうごう候補こうほ必要ひつよう追加領域ついかりょういきO(|V|) である。

8使つか

  • 到達可能性とうたつかのうせい連結成分れんけつせいぶん列挙れっきょには、DFSとBFSのどちらも使用しようできる。
  • 無重むおも最短距離さいたんきょり最小手数さいしょうてすうにはBFSを使用しようする。
  • 再帰的さいきてき構造こうぞう調査ちょうさかえりがけの処理しょりふか候補こうほ優先ゆうせんにはDFSがてきする。
  • おも最短距離さいたんきょりにBFSをそのまま使用しようしてはならない。

9まとめ

data/exercise/information/algorithm/search/graph-traversal-and-unweighted-distance.exercise.n.md
  • DFSとBFSの本質的ほんしつてきは、候補こうほをスタックとキューのどちらで管理かんりするかにある。
  • 訪問済ほうもんず記録きろくは、循環じゅんかんによる非停止ひていし候補こうほ重複ちょうふくふせぐ。
  • 両者りょうしゃ到達可能とうたつかのう頂点ちょうてんをちょうど一度いちどずつ訪問ほうもんし、隣接りんせつリストでは O(|V|+|E|) 時間じかん動作どうさする。
  • BFSはそう距離順きょりじゅん処理しょりするため、無重むおもみグラフの最短距離さいたんきょりもとめる。
raw .n.md をコピー
loc をコピー (filepath:line ~ line)
copy share link
copy encoded share link
path をコピー
copy share link
copy encoded share link
copy share link
copy encoded share link
タブを全て閉じる