幅優先探索とは

はばゆうせんたんさく

グラフや木を、出発点から近い順(辺1本で行ける頂点、次に2本で行ける頂点…)に訪れる探索の方法。キューを使って実装し、辺に重みのないグラフでは、出発点から各頂点への最短の辺の数が求まる。英語の頭文字からBFSともいう。

「幅優先探索」は、1分野の4問の練習問題に出てきます(データ構造とアルゴリズムなど)。

この用語の分野: データ構造とアルゴリズム

幅優先探索の練習問題に挑戦

空のキューに A、B、C の順に要素を入れ、1つ取り出し、D を入れて1つ取り出し、E を入れて1つ取り出した。取り出された要素を順に並べたものはどれか。

  1. AA, B, C
  2. BC, D, E
  3. CC, B, A
答えと解説を見る

正解:A. A, B, C

キューは先に入れたものから順に取り出す先入れ先出し(FIFO)の構造です。A、B、C を入れた後の最初の取り出しでは A が出ます。その後 D や E を後ろに加えても、先頭にある B、C が先に出るので、取り出される順は A、B、C で、最後に D と E が残ります。C、D、E は、そのつど最後に入れたものを出すスタック(LIFO)として扱った場合の順です。キューは、プリンタの印刷待ちや、タスク間でデータを受け渡すメッセージキュー、幅優先探索などに使われます。

頂点が100万個、辺が300万本ほどの道路網のように、頂点の数に比べて辺の少ない(疎な)グラフをメモリに記憶する方法として適切なものはどれか。

  1. A隣接行列。2つの頂点の間に辺があるかを O(1) で調べられ、記憶領域も最も少なく済む
  2. B隣接リスト。記憶領域は頂点の数と辺の数の和に比例し、ある頂点から出る辺を順にたどるのに向いている
  3. C隣接行列。記憶領域は辺の数だけに比例する
答えと解説を見る

正解:B. 隣接リスト。記憶領域は頂点の数と辺の数の和に比例し、ある頂点から出る辺を順にたどるのに向いている

隣接行列は頂点数 V に対して V×V の表を使うので、100万頂点では10¹²個の要素が必要で、1要素1ビットでも約125 GBになります。隣接リストは各頂点につながる頂点だけを並べるので、記憶領域は O(V + E) で、この例なら数百万件程度で済みます。隣接行列は辺の有無を O(1) で調べられる利点があり、辺の多い(密な)グラフや頂点の少ないグラフに向いています。幅優先探索やダイクストラ法のように、頂点から出る辺を順にたどる処理では、隣接リストの方が効率よく動きます。

解説の中の「幅優先探索」

「幅優先探索」が出てくる問題(4問)

  1. 空のキューに A、B、C の順に要素を入れ、1つ取り出し、D を入れて1つ取り出し、E を入れて1つ取り出した。取り出された要素を順に並べたものはどれか。
  2. 頂点が100万個、辺が300万本ほどの道路網のように、頂点の数に比べて辺の少ない(疎な)グラフをメモリに記憶する方法として適切なものはどれか。
  3. 辺に重みのないグラフで、出発点から各頂点までの最短の辺の数を求めたい。適した探索の方法と、そのとき使うデータ構造の組はどれか。
  4. 辺に向きのないグラフで、各頂点の隣の頂点が次のとおりである。A: B, C / B: A, D, E / C: A, F / D: B / E: B, F / F: C, E。頂点 A から再帰的な深さ優先探索を行う。隣の頂点はここに書いた順に調べ、まだ訪れていない頂点が見つかったらすぐにその頂点へ進む。頂点を訪れる順はどれか。

データ構造とアルゴリズムの参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

半導体・電子回路・情報の計算ツール

関連する用語

キュー スタック 深さ優先探索 再帰 ダイクストラ法 安定ソート 計算量 動的計画法 貪欲法 二分探索

用語集の一覧へ