データ構造とアルゴリズム

文字列の中からパターンを探すBM法(ボイヤー・ムーア法)の特徴として正しいものはどれか。

  1. Aパターンの末尾の文字から比べ、一致しなかったテキストの文字がパターンに含まれないなどの情報を使って、パターンを一度に大きくずらす
  2. Bテキストの先頭から1文字ずつずらしながら、毎回パターンの先頭から最後まですべての文字を比べる
  3. Cテキストとパターンの両方を整列してから二分探索で探す
答えと解説を見る

正解:A. パターンの末尾の文字から比べ、一致しなかったテキストの文字がパターンに含まれないなどの情報を使って、パターンを一度に大きくずらす

BM法は、パターンを末尾の文字から比べ、不一致になったテキストの文字がパターンに含まれなければ、パターン全体をその文字の先までずらせる、といった表を前もって作っておきます。そのため、自然な文章ではテキストの多くの文字を比べずに飛ばすことができます。テキストの長さを n、パターンの長さを m とすると、1文字ずつずらしてすべて比べる素朴な方法は最悪 O(nm) かかります。KMP法も不一致の情報を使ってずらしますが、こちらはパターンの先頭から比べ、最悪でも O(n + m) を保証します。

  • A. 正しい。末尾から比べ、不一致の文字の情報で大きくずらすのがBM法です。
  • B. 素朴な(力任せの)方法で、最悪 O(nm) かかります。
  • C. 文字列の中の位置を探す問題なので、整列すると位置の情報が失われます。
この分野を解く 分野ページへ

関連する計算ツール

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

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

データ構造とアルゴリズムのほかの問題

  1. 可変長配列で、容量が満杯のときに要素を追加すると、2倍の容量の領域を新たに確保して全要素をコピーする。容量1の空の配列に要素を1つずつ1,000個追加したとき、コピーされる要素の総数はいくつか。
  2. 要素数が多く、負荷率を0.5程度に保ったハッシュテーブルで、線形探査のオープンアドレス法が、チェイン法(連結リストでつなぐ方法)より速くなりやすい理由として最も適切なものはどれか。
  3. GPUのような並列処理の装置で並べ替えを行うときに、バイトニックソートのような、比較・交換の手順が決まったソート(ソーティングネットワーク)が使われることがある。その理由として正しいものはどれか。
  4. 要素数 n の配列で、異なる2つの要素の組をすべて1回ずつ比べる処理(i 番目の要素を、それより後ろにあるすべての要素と比べることを、i を1つずつ進めて繰り返す二重ループ)の計算量はどれか。
  5. 計算量が O(n²) のプログラムで、データ数が1,000のときに処理時間が0.5秒だった。データ数を4,000にすると、処理時間はおよそ何秒になるか。