二分法
方程式 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回以上必要ということが分かる。
以下、工事中!