検索アルゴリズム

こんにちは。腕にいつできたかわからない腫れがある中の人です。さて、昨日の人はソートについて書いていたので、今日は検索アルゴリズム(探索)にしようと思います。

線形探索

先頭から順に、探しているデータと一致するまでデータを探索する方法です。

例)「3,7,4,2,1,5,6」というデータ群から「1」を探索する:

3は「1」とは異なるので次へ

7は「1」と異なるので次へ

「1」が見つかったので終了。

力任せ法

文字列の検索方法で、文字列の中に検索語句があるかどうか調べるやり方です。文字列の先頭から1文字ずつ 検索語句と比較を繰り返していき、全部一致したらそこで処理終了します。ほぼ線形探索じゃん。

二分探索(バイナリサーチ)

ソート(昨日のブログを見てね)済みのアルゴリズムに対する方法。

ソート済み配列に対する探索アルゴリズムの1つ。

例)ソート済みデータ「6,11,19,26,34,40,48,53,62」から「40」を探す:

  1. 40は真ん中の値(中央値)の34より大きく、最大値の62より小さい
  2. 40は34より大きく、絞った部分のデータのほぼ真ん中の値(中央値ではない)48より小さい→48は左から6番目。

ここではたかだか9個のデータですが、データ数が大きくなると便利になります。

幅優先探索(横型探索

グラフの根ノードから、隣接した全てのノードを探索する。見つけたノードのそれぞれに対して同様のことを繰り返して探索対象ノードを見つけます。例えば、図のグラフ(根ノードはA)から「J」を見つけるとき、Aからまずつながっているノードの1つのB以下をE→F→Gとたどる。同じようにC以下の部分を調べるとHしかないので、Dへ移動し、I→JとあるからJが見つかる。

深さ優先探索(縦型探索

グラフの根ノードから、同じ深さにあるノードを探索する。見つからなければさらに深い部分のノードを探索していく。

例えば、図のグラフ(根ノードはA)から「G」を見つけるとき、Aの次に深いノードをB→C→Dとたどる。さらに、一段深いノードをE→F→H→I →Kとたどる。最後にさらに一段深いノードに行くと、「G」を発見できる。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です