答えが式できれいに出ないとき、コンピュータは近づけて求めます。 この回では、その代表である二分法と、近似につきものの誤差の呼び分け、 点と線で関係を表すグラフ、そして混み具合を計算する待ち行列を扱います。 計算問題として出るのは、待ち行列と誤差です。
出典:基本情報技術者試験 シラバス Ver9.2 大分類1 基礎理論/中分類1 基礎理論/2. 応用数学
(3)数値解析
二分法,補間法など,近似解を数値的に求める考え方や計算過程で生じる誤差を理解する。
(6)待ち行列理論
待ち行列モデルの構成要素,考え方,M/M/1 モデルにおける簡単な計算を理解する。
二分法 ── 範囲を半分にしていく
2乗して 2 になる数(√2)を、割り算と掛け算だけで求めます。 まず、答えが 1 と 2 のあいだにあることは分かります(1×1=1、2×2=4 なので)。 あとは真ん中で試して、どちら側にあるかを見るだけです。
√2 を求める(x × x = 2 になる x を探す)。まず 1 と 2 のあいだ 1回目 中点 1.5 1.5 × 1.5 = 2.25 → 2 より大きい → 1 〜 1.5 2回目 中点 1.25 1.25 × 1.25 = 1.5625 → 2 より小さい → 1.25 〜 1.5 3回目 中点 1.375 1.375 × 1.375 = 1.890625 → 2 より小さい → 1.375 〜 1.5
3回で、もとの幅 1 が 0.125 まで狭まりました(実際の √2 は 1.41421…)。
1回ごとに範囲が半分になるので、10回で約1000分の1まで狭まります。 この進め方を二分法といいます。接線を引いて次の候補を決めることで、より少ない回数で近づける方法がニュートン法です。 また、分かっている値のあいだを埋めて推定するやり方を補間法といいます。
練習
0 〜 8 の範囲から二分法を始めます。探している答えは 6.5 です。 毎回、中点より大きいか小さいかで進む側を決めるとき、2回くり返したあとの範囲はどれですか。
誤差の呼び分け
近似で求めた以上、真の値とのずれが残ります。ずれの表し方は2つです。
真の値 3.141 592 65… を 3.14 で計算した 絶対誤差 3.141 592 65 − 3.14 = 0.001 592 65 相対誤差 0.001 592 65 ÷ 3.141 592 65 = 約 0.000 5(0.05%)
大きい数を扱うときは、絶対誤差が大きくても、割合では小さいことがあります。
ずれの「大きさ」を表す2つ
絶対誤差 … 真の値と近似値の差そのもの
相対誤差 … 絶対誤差を真の値で割った割合
ずれの「原因」を表す2つ
打切り誤差 … 終わりのない計算を途中で止めたために生じるずれ
丸め誤差 … 決まった桁に収めるために切り捨て・四捨五入したずれ(1-3)
打切り誤差は「途中でやめたから」、丸め誤差は「桁が足りないから」です。 原因が違うので、対策も違います。打切り誤差はくり返しの回数を増やせば減り、丸め誤差は桁数の多い形式を使えば減ります。
グラフ ── 点と線で関係を表す
数学の「グラフ」は、折れ線グラフのことではありません。点と、それを結ぶ線で関係を表したものです。
無向グラフ(線に向きがなく、行き来できる)
A---B
\ /
C
有向グラフ(矢印の向きにだけ進める)
A-->B
^ |
| v
+---C
点を頂点、点どうしを結ぶ線を辺といいます。路線図は無向グラフ、作業の順序は有向グラフで表します。
コンピュータで扱うときは、行と列に頂点を並べた表の形にします。これを隣接行列といいます。
無向グラフ(A−B、A−C、B−C)の隣接行列
A B C
A 0 1 1 1 = 辺がある
B 1 0 1 0 = 辺がない
C 1 1 0 ← 対角線をはさんで左右対称
有向グラフ(A→B、B→C、C→A)の隣接行列
A B C
A 0 1 0 A から B へは行ける
B 0 0 1 B から A へは行けない
C 1 0 0 ← 左右対称にならない
行が「どこから」、列が「どこへ」です。無向グラフは行き来できるので、必ず左右対称になります。
待ち行列 ── 混むほど、待ち時間は跳ね上がる
レジやサーバの混み具合を計算するのが待ち行列です。 試験で出るのは、窓口が1つの形(M/M/1 モデル)です。
レジ1台。1人の対応に平均 4 秒。レジが動いている割合(利用率)は 0.5 平均待ち時間 0.5 ÷ (1 − 0.5) × 4 = 4 秒 平均応答時間 4 + 4 = 8 秒(待ち時間 + 対応の時間)
利用率は、1時間に来る人数 ÷ 1時間にさばける人数でも求まります(前者を平均到着率、後者を平均サービス率といいます)。1時間に450人来て、900人さばける力があるなら 0.5 です。
1 − 利用率は、窓口が空いている割合です。 空きが小さくなるほど、割り算の答えは大きくなります。 利用率が 1 に近づくと分母が 0 に近づくので、待ち時間は際限なく伸びます。 これは、客が等間隔ではなくばらばらに来ることを前提にした計算です。
ここで効くのが利用率です。同じ対応時間でも、利用率が上がると待ち時間は急に伸びます。
| 利用率 | 平均待ち時間(処理4秒のとき) | 現場での見え方 |
|---|---|---|
| 0.2 | 1 秒 | 行列はほとんどできない |
| 0.5 | 4 秒 | たまに1人待っている |
| 0.8 | 16 秒 | 常に行列が見える。少し混むと一気に伸びる |
| 0.9 | 36 秒 | 処理が1件遅れると、影響が長く残る |
利用率が 0.5 から 0.9 へ1.8倍になっただけで、待ち時間は 4 秒から 36 秒へ9倍に伸びます。 「まだ余裕がある」と見えるうちに手を打つ理由が、この伸び方です。
練習
1件あたりの処理に平均 4 秒かかるサーバがあります。 利用率が 0.75 のとき、平均待ち時間はいくつですか。
最適化と、そのほかの道具
残りは名前と役割を押さえます。最適化問題は、条件の中でいちばん良い答えを探す問題です。問題の呼び名と、その解き方の呼び名が別にあります。
どんな問題か
最短経路問題 … グラフの上で、ある点から別の点まで合計がいちばん小さい道を探す(解法の例:ダイクストラ法)
日程の問題 … 作業の順序を有向グラフで表し、全体にかかる最短の日数を求める。この図法が PERT で、いちばん長い経路をクリティカルパスという(第14章)
どんな解き方か
線形計画法 … 材料や時間の制限を不等式で書き、利益がいちばん大きくなる組み合わせを求める
動的計画法 … 小さい問題の答えを表に控えておき、大きい問題で計算し直さずに使い回す
⚠️ 数式処理は最適化とは別で、数値ではなく式のまま 因数分解や微分をコンピュータに行わせることを指します。
先に、ひとつ予想してみましょう
二分法を 3回でやめたため、求めた値が真の値とずれていました。このずれの名前はどれですか。
まとめ
この回で持ち帰ること
1. 二分法は、中点で試して範囲を半分にしていく。1回で幅が半分
2. 絶対誤差は差そのもの、相対誤差は真の値に対する割合
3. 打切り誤差は途中でやめたから、丸め誤差は桁が足りないから
4. グラフは頂点と辺。向きがあれば有向グラフで、隣接行列は左右対称にならない
5. 待ち行列の平均待ち時間は 利用率 ÷ (1 − 利用率) × 処理時間。利用率が上がると急に伸びる
次に読む
この記事で引用した資料
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では問題文を改変せずに引用しています。
本文の例(√2 を二分法で挟む計算、円周率の近似、3つの地点を結ぶグラフ、レジの待ち行列)と練習問題は、すべて当サイトが説明のために作ったものです。

