seegongsik
アルゴリズム

わかりやすく 探索アルゴリズム とは

辞書で言葉を引くとき、最初から一ページずつめくったりはしません。真ん中を開いて、前か後ろかを決めます。列がそろっていれば、こうして半分ずつ切りながら、ずっと速く見つけられます。

01

最初から順番に

いちばん簡単な探し方は、最初から一つずつ見ることです。
「これかな? 違う。次は? 違う」。見つかるまでめくり続けます。
確実ではありますが、探す値が後ろのほうにあると時間がかかります。

2
5
8
11
13
17
21
25
前から一マスずつ確かめます。探す値が後ろにあるほど時間がかかります。

「一つずつ探す」を押すと、前から一マスずつ確かめます。探す値は13。

マスが少なければ、それでかまいません。
でも何千、何万とあったら、一つずつ見ていてはとても時間がかかります。
もっとよい方法があります。列がそろっているときに使える、賢い方法です。

02

真ん中を開く

列がそろっていれば、こうします。まず真ん中を開いて見ます。
探す値がそれより大きければ前半分を捨て、小さければ後ろ半分を捨てます。
一回見るたびに、半分が消えるのです。

2
5
8
11
13
17
21
25
真ん中の値と比べて、探す値のない半分をまるごと捨てます。

「真ん中を見る」を押すたびに、探す値のない半分をまるごと捨てます。探す値は13。

一度に半分を捨てるので、残りがぐっと減ります。
8マスが4マスに、4マスが2マスに、2マスが1マスに。
何回かで、たった一マスまで絞り込めます。

03

一つずつ vs 半分ずつ

二つを並べて、同じ値を探してみます。
一つずつ探すほうは、後ろにある値まで何度も見なければならず、半分ずつのほうは何回かで終わります。
答えは同じなのに、歩数がまるで違います。

一つずつ遅い
2
5
8
11
13
17
21
25
半分ずつ速い
2
5
8
11
13
17
21
25
半分ずつ切れば、ずっと少ない歩数で同じ値を見つけられます。

同じ値(13)を探して、歩数を比べます。一つずつ = 遅い · 半分ずつ = 速い。

マスが増えるほど、差は広がります。
千個を一つずつ見ると最大で千回かかりますが、半分ずつなら十回ほどですみます。
この差は、大きなデータではとてつもないものになります。

04

なぜ並べ替えが先なのか

半分ずつ切るには、条件が一つあります。列がそろっていることです。
並んでいてこそ、「真ん中より大きければ前は捨ててよい」が成り立つからです。
ばらばらなら、半分を捨てることはできません。

2
5
8
11
13
17
21
25
列がそろっています。真ん中を基準に半分を捨てられます。
前に列をそろえておいたおかげで、ここで素早く探せます。

並んでいるときだけ、半分ずつ切る方法が使えます。列がそろう → 成り立つ · ばらばら → 成り立たない。

だから並べ替えと探索は、相棒どうしです。
一度列をそろえておけば、そこから先はずっと速く探せます。
整えるのにかけた手間が、いつまでも報われるのです。

05

ここまで来た道

探すことは、いつも身近にあります。
辞書、電話帳、検索窓に打った一つの言葉。その裏では、半分ずつ切るような方法が素早く答えを見つけています。
順番、並べ替え、探索まで、これで一本につながりました。

探索 = ほしいものを素早く取り出す
一つずつは遅い · そろえば半分ずつ · ずっと速く。
順番
決まった段階
並べ替え
列を作る
探索
素早く取り出す
次のレッスンからは、アルゴリズムがどれくらい速いかを測る方法へ、さらに深く進みます。

順番 → 並べ替え → 探索、ここまで来ました。探索 = ほしいものを素早く取り出すこと。

もうわかったでしょう。アルゴリズムはたいそうなものではありません。
順番を決め、整え、賢く探すこと。
小さな工夫が集まって、大きなことをやってのけるのです。

一言でいうと探索とは、ほしいものを取り出すことです。一つずつ見ると遅いですが、列がそろっていれば半分ずつ切りながら、ずっと速く見つけられます。半分ずつ切る方法は並んでいるときにしか使えないので、並べ替えと探索は相棒どうしで、一度列をそろえれば、いつまでも速くなります。
← アルゴリズム
このページがお役に立ったなら支援する