二分法                                    戻る

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

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

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

 今、数列{an}、{bn}を考え、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 と定める。

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

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

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

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

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

   (b−a)/2n<ε

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

   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について、質問回数を調査した。

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

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

質問回数 1 2 3 4 5 6
度数 1 2 4 8 16 19

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

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

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

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



  以下、工事中!