平成28年度 秋期 午前 問2
基礎理論
アルゴリズムに関する問題
0 ≦ x ≦ 1 の範囲で単調に増加する連続関数 f(x) が f(0) < 0 ≦ f(1) を満たすときに,区間内で f(x) = 0 である x の値を近似的に求めるアルゴリズムにおいて,(2) は何回実行されるか。
〔アルゴリズム〕
(1) x0 ← 0,x1 ← 1 とする。
(2) x ← (x0+x1)/2 とする。
(3) x1 - x < 0.001 ならば x の値を近似値として終了する。
(4) f(x) ≧ 0 ならば x1 ← x として,そうでなければ x0 ← x とする。
(5) (2) に戻る。
- ア10
- イ20
- ウ100
- エ1,000
答えと解説を見る
✓ これが正解ア10
解説
区間を半分にする操作が10回で0.001を下回ります。
このアルゴリズムは、答えが入っている区間を毎回まん中で切り、どちら側に答えがあるかを判定して区間を半分に詰めていく手順です。最初の区間は 0 から 1 までなので幅は 1、まん中を求める処理を 1 回通るごとに幅は 1/2 になり、n 回通れば 1/2 の n 乗になります。終了の条件は、そのとき着目している側の幅が 0.001 より小さくなることです。そこで 2 の累乗を並べると、2 の 9 乗は 512 なので 1/512 = 0.00195… でまだ条件を満たさず、2 の 10 乗は 1,024 なので 1/1,024 = 0.00097… となって初めて条件を満たします。よってまん中を求める処理は 10 回実行されます。半分にする繰返しの回数は 2 を底とする対数で決まるため、精度を 1 桁厳しくしても回数は 3 回か 4 回しか増えません。2 の 10 乗がおよそ 1,000 であることを覚えておくと、近似値を求めるこの型の問は暗算で片づきます。
ほかの選択肢はなぜ違うのか
- イ20:正しい 10 回を倍にした形の数で、手順のどの読み方からも出てきません。幅が掛け算で半分になるなら 10 回で足り、仮に毎回 1/2 ずつ引いていくと読んだとしても 2 回で幅が尽きてしまいます。
- ウ100:桁の見当だけで置いた値です。実際に数えると 7 回目で 1/128、10 回目で 1/1,024 に達して手順が止まるので、100 回目まで進むことはありません。
- エ1,000:終了条件に現れる 0.001 の分母 1,000 を、そのまま実行回数と読み替えた数です。幅を 1/1,000 まで詰めるのに必要なのは 10 回であって、1,000 回は使いません。
この問題の用語
- アルゴリズム問題を解くための、決まった手順や考え方そのものです。同じ問題でも手順によって、処理にかかる時間や必要な記憶量が変わります。
出典:平成28年度 秋期 応用情報技術者試験 午前 問2
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)