こんにちは。腕にいつできたかわからない腫れがある中の人です。さて、昨日の人はソートについて書いていたので、今日は検索アルゴリズム(探索)にしようと思います。
線形探索
先頭から順に、探しているデータと一致するまでデータを探索する方法です。
例)「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」を探す:
- 40は真ん中の値(中央値)の34より大きく、最大値の62より小さい
- 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」を発見できる。