二分法                                    戻る

 方程式 F(x)=0 において、もしも、ある区間[ a ,b ]において、例えば、

  F(a)<0 、F(b)>0

であるとき、区間[ a ,b ]内に、 F(α)=0 となる解が少なくとも一つ存在することは、
中間値の定理が教えるところである。

 今、数列{a}、{b}を考え、F(a1)<0 、F(b1)>0 とする。

もしも、 F((a1+b1)/2)<0 ならば、 a2=(a1+b1)/2 、b2=b1 と定め、

     F((a1+b1)/2)>0 ならば、 a2=a1 、b2=(a1+b1)/2 と定める。

 同様にして、数列{a}、{b}を定義すれば、 a 、b は段々と解αに近づいていく。

 これが数値解析における基本的な考え方で「二分法」と言われる。

 関数 F(x) が単調増加な連続関数のとき、二分法は、速くはないが確実に解に収束する。

 解を求めるアルゴリズムとしては、他にNewtonの方法があるが、それぞれ一長一短が
あり、使い分ける必要があるだろう。(二分法では、解の範囲が必ず小さくなるが、Newton
の方法では、期待できない場合がある。)

 近似解の範囲がεより小さくするためには、試行回数をnとして、

   (b−a)/2<ε

でなければならない。すなわち、

   n>log2{(b−a)/ε}

が成り立つ。この不等式により、試行回数の目安が分かる。


 この「二分法」のアイデアを次のゲームに応用してみよう。

数当てゲーム

 一人が1〜50の中から一つの数を選び、その数が何かを他の人が当てる。

 「○○ですか?」と当たるまで、数を選んだ人に聞くが、聞かれた人は、選んだ数よりも
「大きい」「小さい」「ビンゴ」とだけ答える。

 次の2通りの聞き方が考えられる。最も効率のよい聞き方は(B)である。

(A) 1から順番に聞いていく。

(B) 1〜50の真ん中の数から聞いていき、もし答えが

   「小さい」なら、聞いた数より大きい数の真ん中の数を聞く。
   「大きい」なら、聞いた数より小さい数の真ん中の数を聞く。

  ただし、真ん中の数が2つならば、小さい方を聞くものとする。

 (B)の聞き方が、「二分法」の考え方で、コンピュータが大量の情報の中から目当てのもの
を探すときに使われる方法である。

例 選ばれた数が「41」のとき、

(1) [(1+50)/2]=25 から、([ ]はガウスの記号) まず、「25ですか?」と聞く。

(2) 答えは「小さい」なので、今度は、26〜50の真ん中の数[(26+50)/2]=38 から
   「38ですか?」と聞く。

(3) 答えは「小さい」なので、今度は、39〜50の真ん中の数[(39+50)/2]=44 から
   「44ですか?」と聞く。

(4) 答えは「大きい」なので、今度は、39〜43の真ん中の数[(39+43)/2]=41 から
   「41ですか?」と聞く。

(5) 答えは「ビンゴ」となる。

 以上から、わずかに4回の質問で、答えに到達することができた。「二分法」のアルゴリズ
ムの効率のよさが実感できる。


 実は、「わずかに4回の質問で、答えに到達することができた」というのは言い過ぎで、た
またま運がよかっただけである。

例 選ばれた数が「39」のとき、

(1) [(1+50)/2]=25 から、([ ]はガウスの記号) まず、「25ですか?」と聞く。

(2) 答えは「小さい」なので、今度は、26〜50の真ん中の数[(26+50)/2]=38 から
   「38ですか?」と聞く。

(3) 答えは「小さい」なので、今度は、39〜50の真ん中の数[(39+50)/2]=44 から
   「44ですか?」と聞く。

(4) 答えは「小さい」なので、今度は、39〜43の真ん中の数[(39+43)/2]=41 から
   「41ですか?」と聞く。

(5) 答えは「小さい」なので、今度は、39〜40の真ん中の数[(39+40)/2]=39 から
   「39ですか?」と聞く。

(6) 答えは「ビンゴ」となる。

 この場合は、5回の質問で、答えに到達することができた。

 そこで、疑問が湧いた。質問回数が最も多くなるのは、どんな数を選んだ場合だろうか?

 1〜50について、質問回数を調査した。

10 11 12
質問回数
 
13 14 15 16 17 18 19 20 21 22 23 24
質問回数
 
25 26 27 28 29 30 31 32 33 34 35 36
質問回数
 
37 38 39 40 41 42 43 44 45 46 47 48
質問回数
 
49 50
質問回数

 質問回数毎の度数分布表を作成してみた。

質問回数
度数 16 19

 上表から、質問回数の平均は、 243/50=4.86 であるが、5回・6回が全体の7割
を占める。

 冒頭の試行回数の目安の不等式で、 a=1、b=50、ε=2 として計算すると、

  n>log2(49/2)=4.61・・・

となる。この不等式からも、試行回数は5回以上必要ということが分かる。



  以下、工事中!