「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

2分検索

pointこの用語のポイント

pointデータの探し方だよ

point「真ん中から半分に分けて条件に合わない方を消す」を何回もやることで、候補を絞り込んでいくよ

pointデータが順番に並んでいるときに使えるよ

point個人的には「2分『探』索」という表現の方が馴染みがあるよ

スポンサーリンク

簡単に書くよ

2分検索(読:ニブンケンサク 英:binary search)とは

多分「2分探索」のこと。
用語の中身としては

「半分ずつ消去法」なデータの探し方
です。
もう少し具体的に書くと

データが順番に並んでいる前提で、まずは真ん中のデータを取り出して「探しているデータは、これより大きい?」を確認する。もし「大きいよ!」だったら、真ん中のデータとそれより小さいデータを全部消す(「小さいよ!」だったら大きい方を消す)。残ったデータの中から真ん中のデータを取り出して「探しているデータは、これより大きい?」を確認する。……というのを繰り返すことで、条件に合わないデータを半分ずつ消していって、目的のデータを見つける やり方
です。


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として「2分探索」について結構ガッツリ説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

2分探索は、データが順番に並んでいる前提で

1.真ん中のデータを取り出す
2.探しているデータと1で取り出したデータを比較する
3-1.「探しているデータと1で取り出したデータが同じ」だったら、それが探しているデータ
3-2.「探しているデータの方が1で取り出したデータよりも大きい」だったら1で取り出したデータとそれよりも小さいデータを全部消す
3-3.「探しているデータの方が1で取り出したデータよりも小さい」だったら1で取り出したデータとそれよりも大きいデータを全部消す
4.残っているデータの中から真ん中のデータを取り出す


を繰り返すことで目的のデータを見つける やり方です。

……と言葉で説明されてもサッパリ分かりませんよね。

大丈夫です。
例を挙げて説明します。

例えば、そうですね。
ここに「1」から「9」までの数字が小さい順に並んだ状態であったとしましょう。

2分検索

この中から2分探索で「8」を探すことにします。

2分検索2

まずは真ん中の数字を取り出します。
「5」ですね。

2分検索3

次に、探している数字が真ん中の数字よりも大きいか小さいかを確認します。

1.探している数字は「5」だよ
2.探している数字は「5」より大きいよ
3.探している数字は「5」より小さいよ


のどれかを確認するわけです。

2分検索4

今回、探しているのは「8」です。
ということは

2.探している数字は「5」より大きいよ

になりますね。

2分検索5

探している数字が「5」より大きいと分かった時点で「1」「2」「3」「4」「5」は消せます。
「5」以下の数字は、探している数字ではないからです。

2分検索6

次に、残った数字の中から、さっきと同じように真ん中の数字を取り出します。
残っている数字は「6」「7」「8」「9」の4つです。
真ん中の数字は「7」か「8」ですね。
とりあえず今回は「7」ということにしておきましょうか。

2分検索7

次に、さっきと同じように、探している数字が真ん中の数字よりも大きいか小さいかを確認します。

1.探している数字は「7」だよ
2.探している数字は「7」より大きいよ
3.探している数字は「7」より小さいよ


のどれかを確認するわけです。

2分検索8

今回、探しているのは「8」です。
ということは

2.探している数字は「7」より大きいよ

になりますね。

2分検索9

探している数字が「7」より大きいと分かった時点で「6」「7」は消せます。
「7」以下の数字は、探している数字ではないからです。

2分検索10

さぁ、いよいよラストスパートです。
残った数字の中から、さっきと同じように真ん中の数字を取り出します。

……って、残っている数字は「8」と「9」の2つしかありませんね。
とりあえず今回は「8」ということにしておきましょうか。

2分検索11

次に、さっきと同じように、探している数字が真ん中の数字よりも大きいか小さいかを確認します。

1.探している数字は「8」だよ
2.探している数字は「8」より大きいよ
3.探している数字は「8」より小さいよ


のどれかを確認するわけです。

2分検索12

今回、探しているのは「8」です。
ということは

1.探している数字は「8」だよ

になりますね。

2分検索13

これで探していたデータが見つかりました。

このような「半分ずつ消去法」なデータの探し方が2分探索です。

1.真ん中のデータを基準にして、条件に合わない方を消す
2.1を繰り返して最後まで残ったのが探しているデータ


な やり方です。

2分探索のメリットは

1.データの量が増えても、そんなに探す時間が変わらない
2.探しているデータがどれでも、見つかるまでの時間が同じくらい


でしょうか。

2分探索では1回の絞り込みで候補が半分になります。
ということは、データが倍になっても絞り込みの回数は1回しか増えないわけです。

例えば、10個の数字から1個の数字を探す場合、絞り込み回数は最大3回です。
倍の20個の数字の中から探すことになっても絞り込み回数は最大4回で済みます。
1回絞り込んだ時点で候補は(20個の半分の)10個になるからです。

これが「1.データの量が増えても、そんなに探す時間が変わらない」です。

また、2分探索では、探すデータがどれでも見つかるまでの時間が同じくらいです。

例えば、10個の数字から1個の数字を探す場合、絞り込み回数は最大で3回です。
「1」を探すのでも「8」を探すのでも(ピンポイントで真ん中の値に該当しない限り)絞り込み回数は3回になります。
探す値によって1回で済んだり100回もかかったりといったバラツキがありません。
探すのにかかる時間を、ある程度は標準化できるのです。

これが「2.探しているデータがどれでも、見つかるまでの時間が同じくらい」です。

一方のデメリットは

データが順番に並んでいないと使えない

でしょうか。

バラバラのデータに対して2分探索を使いたい場合は、順番を並べ直す必要があります。
順番を並べ直すのが大変な場合は、2分探索を使わない方が良かったりするわけです。

以上を踏まえて

多分「2分探索」と同じ意味で使っている表現

が「2分検索」です。

2分検索14

個人的には「2分索」という言い方の方が一般的だと思っていますけどね。
「2分検索」と表現する人もいるようです。
あるいは、もしかしたら「2分探索で検索する」という意図で「2分検索」と表現しているのかもしれません。
そこら辺は文脈から判断してください。


image piyo2

一言でまとめるよ

まぁ「2分検索」って単語が出てきたら「順番に並んだデータを真ん中で半分に分けて候補を絞っていく やり方なんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像059
書籍画像002

おまけ

■検索してみる?




書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本
ウォーターサーバーのキャッチコピーを100本考える方法
AI用語図鑑 ビジネス・開発・試験対策に使える厳選キーワード256