情報Ⅰ 最強120講義

待ち行列のシミュレーション|情報Ⅰ 最強120講義 第62講

数強塾グループの一流講師陣 一流のライブ授業×最高品質の映像授業×サボれないコーチング

今日の一問
次の問いに答えなさい。
セミセルフレジの場合には,精算をレジ係が行わないためレジを待つ時間が短く済み
文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第1章 情報社会の問題解決(令和2年)
——さて、どこから手をつける?
答えと考え方は、この記事の中で順を追って解説します。

こんにちは、数強塾代表の藤原進之介です。この記事は参考書『藤原進之介の最強120講義』の第62講「待ち行列のシミュレーション」のWeb版です。共通テスト「情報Ⅰ」での重要度はA(頻出。得点差がつく)、情報Ⅱでの接続先は(3)情報とデータサイエンス/(4)情報システムとプログラミングです。

2026年1月実施の共通テスト「情報Ⅰ」第3問は、まさに「待ち時間」を題材にしたプログラミング問題でした。配点は25点。この講では、なぜ平均が足りているのに行列ができてしまうのかを原理から説明し、手で追えるトレース表と、実際に実行した数値実験で確かめます。そして同じ考え方が情報Ⅱでは「性能」「応答時間」「非機能要件」という別の名前で戻ってくることまでお見せします。

1. この講の問い

1分に1人来て、1分で処理できるなら誰も待たないはずなのに、なぜ現実には行列ができるのか。

2. 結論

この講の結論

行列は「処理能力が足りない」から生まれるとは限りません。平均が足りていても、到着や処理時間がばらつけば行列は必ず生まれます。理由は、窓口が空いていた時間は次に繰り越せないのに、混んだときの遅れだけは次の客に繰り越されるという非対称性にあります。そして待ち時間の計算は、たった1本の漸化式を1人ずつ進めるだけで終わります。

開始時刻 = max( 到着時刻 , 直前の客の終了時刻 )

3. なぜそうなるのか

3-1. 「待ち時間」を定義するところから始める

日常語の「行列」は、目に見える人の列です。しかしシミュレーションで扱うには、数として定義しなければなりません。1人の客について次の3つの時刻を考えます。

  • 到着時刻:その客が来た時刻
  • 開始時刻:その客のサービスが始まった時刻
  • 終了時刻:その客のサービスが終わった時刻

そして 待ち時間 = 開始時刻 − 到着時刻終了時刻 = 開始時刻 + 処理時間 です。定義してしまえば、残る問題は1つだけになります。開始時刻はどう決まるのか。

3-2. 核心の漸化式は max ひとつ

窓口が1つで、先着順で、来た客は必ず並ぶとします。すると、ある客のサービスが始められる条件は2つです。

  • その客が到着していること
  • 窓口が空いていること(=直前の客が終わっていること)

両方が満たされた瞬間にサービスが始まるので、開始時刻は「到着時刻」と「直前の客の終了時刻」の遅いほうになります。これが第62講のすべてです。空いていれば到着時刻がそのまま開始時刻になり、混んでいれば直前の客の終了時刻まで待たされる。max はこの「どちらか遅いほう」を1文字で書いた記号にすぎません。

第60講で扱った確定モデルは「次の値 = 今の値 + 変化分」という漸化式でした。待ち行列も形はまったく同じで、1ステップずつ時刻を進めるだけです。違うのは、足し算のかわりに max が入ることだけ。「シミュレーション=1件ずつ進める」という発想は、確定モデルからそのまま持ち込めます。

3-3. なぜ平均が足りていても待つのか

ここが本講の芯です。

平均到着間隔が3分、平均処理時間が2.5分だとします。1人あたり0.5分の余裕があるので、平均だけ見れば行列はできないはずです。ところが実際には待ちが発生します。

理由は非対称性です。

  • 客が来ない時間、窓口は空いています。しかしその空き時間は貯金できません。次に混んだときに使うことはできず、そのまま消えます。
  • 逆に、たまたま客が続けて来たり処理に手間取ったりすると、その遅れは次の客に繰り越されます。

つまり、余裕は消え、遅れだけが残る。これを繰り返すと、平均としては余裕があるのに、待ち時間の平均はゼロになりません。「平均が足りているのに行列ができる」のは不思議な現象ではなく、足し引きが対称でないことの当然の帰結です。

もう一つ大事なのは、ばらつきは到着側にも処理側にもあることです。到着が完全に等間隔でも、処理時間がばらつけば行列はできます。処理時間が完全に一定でも、到着がばらつけば行列はできます。4-3でこれを分けて実測します。

3-4. なぜ利用率が1に近づくと待ち時間が急に伸びるのか

利用率とは、窓口が働いている時間の割合のことです。ここでは「利用率 = 平均処理時間 ÷ 平均到着間隔」で考えます。平均到着間隔3分・平均処理時間2.5分なら 2.5 ÷ 3 ≒ 0.833 です。

遅れを取り戻せるのは「客が来ていない、すきまの時間」だけです。利用率が上がるほど、そのすきまが短くなる。利用率0.5なら半分がすきまですが、0.9ならすきまは1割しかありません。0.95なら5%。取り戻す力は「1 − 利用率」に比例して弱くなっていきます。

したがって待ち時間は利用率に比例して伸びるのではなく、1に近づくにつれて跳ね上がります。4-4で実測すると、利用率0.5から0.95へ(1.9倍)動かしただけで、平均待ち時間は約17倍になります。これが「あと少し混んだだけで急に耐えられなくなる」の正体です。

同じ理由で、窓口を1本増やす効果は、混んでいるときほど劇的になります。空いている店に窓口を足しても大して変わりませんが、限界近くで動いている店に1本足すと待ち時間が桁で変わります。4-5で実測します。

なお現実の対策は「窓口を増やす」だけではありません。文部科学省の「情報Ⅰ」教員研修用教材の第1章には、セルフレジの説明としてこう書かれています。

セミセルフレジの場合には,精算をレジ係が行わないためレジを待つ時間が短く済み

文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第1章 情報社会の問題解決(令和2年)

セミセルフレジは、レジ係の仕事から「精算」を切り離すことで1人あたりの処理時間そのものを短くしています。同じ教材は完全セルフレジについて「複数のレジを一人のスタッフで対応できる」とも書いています。こちらは窓口の本数を増やす打ち手です。待ち行列の話は、情報Ⅰの第1章(情報社会の問題解決)にも、第3章(モデル化とシミュレーション)にも顔を出しているのです。

3-5. なぜ公式ではなくシミュレーションなのか

待ち行列には数学的な理論があります。情報処理推進機構(IPA)の基本情報技術者試験シラバス Ver.9.2 には、独立した項目として載っています。

(6)待ち行列理論 待ち行列モデルの構成要素,考え方,M/M/1モデルにおける簡単な計算を理解する。
用語例 サービス時間,待ち時間,到着間隔,平均到着率,平均サービス率

情報処理推進機構「基本情報技術者試験(レベル2)シラバス Ver.9.2」大分類1 基礎理論・2 応用数学

つまり公式はあるのです。ではなぜ高校でシミュレーションをするのか。公式が使える前提が非常に狭いからです。

M/M/1 という名前は「到着がある特定の性質を持ち、処理時間もある特定の性質を持ち、窓口が1本」という3つの前提を並べた記号です。前提が1つでも崩れると式は使えません。窓口を2本にする、処理時間の分布を変える、長い列を見て帰ってしまう客を入れる、休憩時間を入れる——現実に近づけるほど、式は解けなくなります。

一方、1人ずつ時刻を進める方法は前提を選びません。開始時刻を決める式の右辺を書き換えるだけで、どんな条件でも答えが出ます。式が解けないところから先はシミュレーションの領分なのです。

3-6. 前提を書かないシミュレーションは意味がない

だからこそ、何を仮定したかを書かないシミュレーションには価値がありません。最低でも次は決めて明記します。

決めること 選択肢の例
並ぶ順 先着順/優先度つき
窓口の数 1本/複数本
列の作り方 全体で1列/窓口ごとに1列
諦める客 いない/列が長いと帰る
交替の時間 考えない/数秒かかる
処理時間 全員同じ/客によって違う

学習指導要領解説 情報編は、情報Ⅰの内容の取扱いでこう指示しています。

アの(ウ)及びイの(ウ)については,コンピュータを使う場合と使わない場合の双方を体験させるとともに,モデルの違いによって結果に違いが出ることについても触れるようにする

文部科学省「高等学校学習指導要領(平成30年告示)解説 情報編」平成30年7月(情報Ⅰ 内容の取扱い(4))

「モデルによって答えが違う」は感想ではなく、国が教えろと書いている内容です。モデルの分類そのものは第59講「モデル化の分類(静的/動的・確定/確率)」で扱いました。確率的なばらつきの作り方は第61講「乱数と確率モデル・モンテカルロ法」を参照してください。

4. 手で確かめる

4-1. トレース表を手で1人ずつ埋める

窓口1本・先着順・交替時間なし。到着時刻と処理時間を次のように与えます(本記事オリジナルの数値です)。

1人目 2人目 3人目 4人目 5人目 6人目 7人目 8人目
到着時刻 0 2 3 9 12 13 20 21
処理時間 3 2 4 2 3 2 2 2

平均到着間隔は (21 − 0) ÷ 7 = 3.0分、平均処理時間は 20 ÷ 8 = 2.5分。平均では余裕があります。

埋め方は3ステップの繰り返しです。①開始時刻 = max(到着時刻, 1つ上の行の終了時刻) ②終了時刻 = 開始時刻 + 処理時間 ③待ち時間 = 開始時刻 − 到着時刻。

到着 開始 終了 待ち
1人目 0 max(0, 0) = 0 3 0
2人目 2 max(2, 3) = 3 5 1
3人目 3 max(3, 5) = 5 9 2
4人目 9 max(9, 9) = 9 11 0
5人目 12 max(12, 11) = 12 15 0
6人目 13 max(13, 15) = 15 17 2
7人目 20 max(20, 17) = 20 22 0
8人目 21 max(21, 22) = 22 24 1

合計6分、平均0.75分、最長2分。平均処理時間2.5分が平均到着間隔3.0分を下回っているのに、8人中4人が待たされました。3-3で述べた非対称性が、この表の中で起きています。4人目のところで待ちが0に戻っているのは、9分までに客が来ない「すきま」があったから。そのすきまが遅れを吸収しています。

表の作り方そのものは第54講「トレース──プログラムを手で追う技術」と同じです。列を「役割」で立て、1行を1人分にする。それだけで頭の中が溢れなくなります。

4-2. 時間の上で客が重なる様子を見る

同じ8人分を時間軸に並べると、行列がどこで生まれてどこで消えるかが目で見えます。

0 2 4 6 8 10 12 14 16 18 20 22 24 (分) 1人目 2人目 3人目 4人目 5人目 6人目 7人目 8人目 1 2 2 1 待ち時間 処理時間(体験中)

図:8人の来客と窓口1本。黄色が待ち時間、青が処理時間。9分から12分にできた「すきま」が遅れを吸収し、いったん待ちが消えている。

3人目の処理が5分から9分まで続いている間、その裏で列が伸び、次の客が来るまでのすきまで吸収される。すきまが遅れを吸収し、吸収しきれなかった分だけが次に繰り越されていく——この構造が図で追えれば、この講は理解できています。

4-3. Python で同じ計算をさせて一致を確かめる

以下はすべて手元の Python 3 で実際に実行し、出力を確認したものです。

Touchaku = [0, 2, 3, 9, 12, 13, 20, 21]
Shori    = [3, 2, 4, 2,  3,  2,  2,  2]
owari = 0
machi = []
for i in range(len(Touchaku)):
    kaishi = max(Touchaku[i], owari)
    owari  = kaishi + Shori[i]
    machi.append(kaishi - Touchaku[i])
    print(i + 1, "人目  開始", kaishi, " 終了", owari, " 待ち", kaishi - Touchaku[i])
print("平均待ち時間", sum(machi) / len(machi), "分  最長", max(machi), "分")

出力:

1 人目  開始 0  終了 3  待ち 0
2 人目  開始 3  終了 5  待ち 1
3 人目  開始 5  終了 9  待ち 2
4 人目  開始 9  終了 11  待ち 0
5 人目  開始 12  終了 15  待ち 0
6 人目  開始 15  終了 17  待ち 2
7 人目  開始 20  終了 22  待ち 0
8 人目  開始 22  終了 24  待ち 1
平均待ち時間 0.75 分  最長 2 分

手計算と完全に一致しました。注目すべきは変数 owari が1つしかないことです。「直前の客の終了時刻」さえ覚えていれば、それより前の客のことは一切覚えなくてよい。だから8人でも80万人でも同じ長さのプログラムで済みます。

4-4. 到着のばらつきと処理のばらつきを分けて測る

「ばらつきが行列を作る」を数で見ます。平均到着間隔3.0分・平均処理時間2.5分を固定したまま、それぞれを一定にした場合とばらつかせた場合の4通りを、20万人分ずつ回します。乱数の種は固定しているので、同じコードなら誰が実行しても同じ数字が出ます。

import random
def sim(gaps, svcs):
    t = 0.0
    owari = 0.0
    machi = []
    for g, s in zip(gaps, svcs):
        t += g
        kaishi = max(t, owari)
        machi.append(kaishi - t)
        owari = kaishi + s
    heikin = sum(machi) / len(machi)
    waritai = sum(1 for x in machi if x > 0) / len(machi)
    return heikin, max(machi), waritai
#
def retsu(kind, heikin, n, tane):
    r = random.Random(tane)
    if kind == "一定":
        return [heikin] * n
    return [r.expovariate(1 / heikin) for _ in range(n)]
#
N = 200000
for a in ("一定", "ばらつく"):
    for s in ("一定", "ばらつく"):
        h, mx, w = sim(retsu(a, 3.0, N, 20260803), retsu(s, 2.5, N, 62620803))
        print(a, s, round(h, 3), round(mx, 2), round(w * 100, 2))

結果を表にしました。

到着 処理 平均待ち時間 最長待ち時間 待たされた人の割合
一定 一定 0.000分 0.00分 0.00%
一定 ばらつく 5.737分 81.18分 69.07%
ばらつく 一定 5.909分 57.24分 82.66%
ばらつく ばらつく 12.081分 114.92分 82.95%

4行とも平均到着間隔3.0分・平均処理時間2.5分です。平均はまったく同じ。それでも1行目は誰も待たず、4行目は平均12分待たされます。

そして片方だけばらつかせた2行目・3行目が約5.7〜5.9分、両方ばらつかせると12.1分。ばらつきの源が2つあると、待ち時間はおよそ2倍になる。「行列の原因は混雑ではなくばらつきである」という主張は、この表1枚で確かめられます。

4-5. 利用率を上げると、待ち時間はどう伸びるか

次に、平均処理時間を2.5分に固定したまま到着の間隔だけを縮めて、利用率を0.50から0.95まで動かします。

mu = 1 / 2.5
for rho in (0.50, 0.60, 0.70, 0.80, 0.90, 0.95):
    lam = mu * rho
    h, mx, w = sim(retsu("ばらつく", 1 / lam, N, 20260803),
                   retsu("ばらつく", 2.5, N, 62620803))
    print(rho, round(h, 3), round(rho / (mu - lam), 3), round(mx, 2))
利用率 平均待ち時間(実測) 理論値 最長待ち時間
0.50 2.484分 2.500分 50.87分
0.60 3.708分 3.750分 66.36分
0.70 5.760分 5.833分 91.14分
0.80 9.752分 10.000分 109.72分
0.90 21.429分 22.500分 155.55分
0.95 43.122分 47.500分 292.18分

利用率は0.50から0.95へ1.9倍にしただけです。ところが平均待ち時間は2.484分から43.122分へ、約17倍になりました。線形ではまったくありません。0.80から0.90へ動かしたところだけを見ても、待ち時間は2.2倍になっています。

「理論値」の列は、3-5で触れた M/M/1 の前提が成り立つ場合に知られている値です。実測がこれとほぼ一致していることが、シミュレーションが正しく動いている証拠になります。

ただし利用率0.95の行だけ、実測43.122分と理論値47.5分が4分以上ずれています。これは誤りではなく、混んでいるほど、シミュレーションの答えが落ち着くまでに長く回さなければならないことの現れです。実際、同じ関数で人数を20万人から200万人に増やし、到着の種を1・2・3、処理の種を1001・1002・1003として回すと、結果はそれぞれ47.724分・46.994分・48.271分となり、理論値47.5分をはさんで落ち着きます(これも実行して確認しました)。乱数を使った答えは、回数が足りないとずれる。第61講のモンテカルロ法と同じ注意が、そのまま待ち行列にも当てはまります。

4-6. 窓口を1本から2本にすると何が起きるか

同じ客の列(同じ乱数の種)に対して、窓口の数だけを1本から2本に変えます。全体で1列に並び、空いた窓口から順に案内する方式です。

import heapq
def sim_madoguchi(gaps, svcs, c):
    aki = [0.0] * c
    heapq.heapify(aki)
    t = 0.0
    machi = []
    for g, s in zip(gaps, svcs):
        t += g
        e = heapq.heappop(aki)       # 最も早く空く窓口
        kaishi = max(t, e)
        machi.append(kaishi - t)
        heapq.heappush(aki, kaishi + s)
    return sum(machi) / len(machi)
窓口1本のときの利用率 窓口1本 窓口2本 短縮した時間
0.50 2.484分 0.166分 2.319分
0.70 5.760分 0.347分 5.413分
0.90 21.429分 0.635分 20.795分

窓口を2本にすれば、1本あたりの利用率は半分になります。だから効くのは当然なのですが、効き方の大きさが違うことに注目してください。空いている店(利用率0.50)では2.3分しか減らないのに、混んでいる店(利用率0.90)では20.8分減ります。同じ「窓口1本の追加」なのに、得られるものが9倍違う。

これが3-4で述べた「1に近づくほど急に伸びる」の裏返しです。急な坂を下るのだから、1歩下がるだけで高度が大きく下がります。混んでいる場所ほど、小さな増強が大きく効く。行列の直感に反するもう一つの事実です。

5. 共通テストではこう出る(重要度A)

5-1. 2026年度の第3問がまさにこれだった

2026年1月実施の大学入学共通テスト「情報Ⅰ」第3問は、まさにこの講の題材でした。配点は25点です(大学入試センター「令和8年度本試験 情報Ⅰ 正解表」で確認。100点満点中、第1問20点・第3問25点)。

ありがたいことに、大学入試センター自身が問題作成部会の自己評価という形で、この問題のねらいを公表しています。以下はその原文です。当塾では問題文・選択肢・図表・プログラムは転載しません。引用するのは、センターが別に公開している自己評価の文章だけです。

プログラミングの基礎能力に関する問題である。文化祭のゲーム展示における来訪者の待ち時間を題材とし,設定した条件を満たす体験時間を調べるプログラムの作成・評価・改善を通じて,思考力・判断力・表現力等を問う問題とした。大学入試センター「令和8年度大学入学共通テスト 問題評価・分析委員会報告書『情報Ⅰ』」問題作成部会の見解

3問構成の役割分担も、同じ資料が明記しています。

問1では,問題文で説明されている条件設定を読み取り,具体的なデータに対して手作業で解を求める手順を考察する力を問う問題とした。問2では,繰り返しや関数を用いて問1で読み取った状況を適切に表現する力,問3では,繰り返しや条件分岐の理解力,求められた出力を得る手順の全体構造を理解し,改善するための力を問う問題とした。同上

つまり問1=手作業/問2=コード化/問3=改善。まとめると次の3段です。

問1:プログラムを使わずに、図と表で待ち時間を整理する

到着時刻・開始時刻・終了時刻・待ち時間を1人ずつ埋め、開始時刻の決まり方を言葉で確定させる段階。ここでプログラミングの知識は要りません。

問2:問1で確定した考え方を配列とプログラムに落とす

センターの言う「基本的なコードで表現する」段階です。到着時刻・開始時刻・終了時刻をそれぞれ配列に持ち、繰り返しの中で1人ずつ求めていくことになります。この形にしたとき必ず山場になるのが、「本人」と「直前の人」のどちらの添字を使うかです。

問3:条件を満たす体験時間を探し、処理回数を減らすよう改良する

センターの言う「全体構造を理解し,改善するための力」を問う段階です。出力を変えずに手数を減らす——たとえば答えが確定した時点で繰り返しを打ち切る、といった改良が典型になります。

この3段構成は、第54講(トレース)で示した「手で追う → コードにする → 直す」とまったく同じ順序です。そして問1の「手作業で解を求める手順」とは、まさに4-1で作ったトレース表のことです。表を作る手が止まると、問2・問3にはたどり着けません。

さらに同じ資料は、この構成が偶然ではないことも書いています。

問題作成に当たっては,令和7年度試験を踏襲し,問1は問題設定の正しい理解を問うための手作業で解を求める問題を,問2は問1で整理したアルゴリズムを基本的なコードで表現する問題を扱った。同上

「踏襲」と明言されている以上、次年度以降も問1が手作業である可能性は高いと考えて準備するのが合理的です。なお、令和8年度の第3問には新しい要素もありました。

令和8年度試験の新たな試みとして,プログラム表記で関数を取り扱った。同上

関数の定義と呼び出しは、これまで出題例が乏しかったところです。待ち行列の計算は「1人分の処理」を関数に切り出すのに向いているので、対策としては4-2のコードを関数の形に書き直して練習しておくとよいでしょう。

5-2. 正答率が公表されている——どこで差がついたか

この講の重要度をAとした根拠は、センターが公表した正答率にあります。

正答率は,条件設定の理解を問う問題は8割以上,プログラム中の空欄を埋める問題は4〜8割,プログラムの改善を扱った問題は4割程度,プログラムの動きを問う問題は約2割であった。全体としては6割弱で,いずれの問題も識別力は高かった。同上

読み取れることは3つあります。

  1. 問1(条件設定の理解)は8割以上が正解している。ここを落とすと、他の受験生に対して一方的に損をします。トレース表は「差がつく問題」ではなく「落とすと致命傷の問題」です。
  2. 「プログラムの動きを問う問題」が約2割。5人に1人しか取れていない。ここが最大の差がつきどころで、必要なのは書く力ではなく追う力です。第54講のトレースがそのまま効きます。
  3. 「いずれの問題も識別力は高かった」——つまり、できる受験生とそうでない受験生をきれいに分けた問題だった、ということです。

高等学校側の評価も公表されており、問3については次のように述べられています。

「プログラムの長さは 14 行と標準的な分量ながら,正確にシミュレーションする論理的思考力が試される良問であった」(高校評価)同上

14行です。長大なプログラムではありません。それでも正答率が2割台まで落ちる。量ではなく、1行ずつ状態を追えるかどうかが問われていることの証拠です。

参考までに、2026年度の情報Ⅰの平均点は56.59点(受験者305,202人、標準偏差15.72)でした。前年の69.26点(受験者279,718人)から約12.7点下がっています。第3問だけが原因だとは言えませんが、25点分がこの題材だったことは事実です。出典:いずれも大学入試センター「令和8年度大学入学共通テスト 問題評価・分析委員会報告書『情報Ⅰ』」および同「令和8年度本試験 情報Ⅰ 正解表」。

5-3. 出題で必ず引っかかる4点

(1)「待ち行列」は出題側の言葉ではない

上に引いたセンター自身の説明を、もう一度よく見てください。使われているのは「来訪者の待ち時間」「体験時間」という日常語だけで、「待ち行列」も「シミュレーション」も出てきません(高校側の講評に「シミュレーションする」が出てくるだけです)。用語を暗記していても、問題文の中でそれと気づく手がかりにはなりません。この講で身につけるべきは用語ではなく、開始時刻の決まり方という手続きそのものです。

(2)配列の添字が0からか1からかを、必ず問題文で確認する

大学入試センターの「共通テスト用プログラム表記」には、こう明記されています。

※特に説明がない場合,配列の要素を指定する添字は0から始まる大学入試センター「共通テスト用プログラム表記」

裏を返せば、「特に説明がある場合」は0始まりではないということです。到着順を表す配列は1番目・2番目…と数えたほうが自然なので、1始まりで与えられることが十分あり得ます。問題文の宣言が既定より優先されます。1始まりでも0始まりでも「i番目の客の直前」は i−1 番ですが、ループの開始値と終了値が1ずつずれます。表記の既定を覚えたうえで、毎回宣言を読む——これが正しい構えです。

(3)「本人」と「直前の人」を取り違える

開始時刻の式には、本人の到着時刻と直前の客の終了時刻が入ります。本人の終了時刻でも、直前の客の到着時刻でもありません。選択肢はこの4通りをすべて並べてきます。4-1の表を1行だけ書けば即座に判定できます。

(4)改良問題では「答え」ではなく「動き」が問われる

センターの自己評価が「求められた出力を得る手順の全体構造を理解し,改善するための力」と書いているとおり、改良では出力が変わりません。変わるのは処理の回数や順序だけです。だから設問は「何回実行されたか」「どの行が不要になるか」という動きを聞いてきます。正答率が約2割まで落ちたのがこの型です。答え合わせの習慣しかないと、ここで手が止まります。

なお、共通テスト用プログラム表記では代入は「=」、比較は「==」です。流れ図では代入を「←」と書きます(センターの表記例では、同じ二分探索が流れ図側で「下限添字←0」、プログラム表記側で「hidari=0」と書き分けられています)。この2つを混ぜないでください第47講で大学入試センターの例示資料により確認済み)。論理演算は and / or / not を使います。変数と代入そのものの扱いは第48講にまとめました。

5-4. 練習用の自作問題(本記事オリジナル)

問題

窓口1本・先着順・交替時間なし。来訪者の到着時刻が 0, 2, 3, 9, 12, 13, 20, 21(分)で、体験時間は全員同じ T 分とする。最長待ち時間が10分未満になる T の最大値を求めよ。

解答

T を1から順に試して最長待ち時間を求めます(下表はプログラムで求め、T=3分と4分は手計算でも確認しました)。

体験時間 T 1分 2分 3分 4分 5分 6分
最長待ち時間 0分 1分 3分 7分 14分 21分
平均待ち時間 0.000分 0.375分 1.000分 4.000分 7.500分 11.000分

10分未満に収まるのは T = 4分まで。答えは4分。

ここでも非線形が顔を出します。Tを3分から4分に1分だけ延ばすと最長待ちは3分から7分に、さらに1分延ばすと14分に跳ね上がります。「1人あたり1分だけなら大丈夫だろう」が通用しない。3-4で見た「利用率が1に近づくと急に伸びる」が、この小さな表の中でも同じ形で現れています。

T=5分で打ち切ってよい理由も確認しておいてください。T を増やせば最長待ち時間は決して減らないので、いったん10分以上になったらそれ以降を調べる必要がありません。これが改良問題の考え方そのものです。処理量を見積もる話は第57講「計算量の考え方」につながります。

6. 情報Ⅱではこうなる

6-1. まず、語の数を数えてみる

この講のキーワードが、国の3つの文書に何回出てくるかを全文検索で数えました(2026年8月3日実施)。数えた範囲は、学習指導要領解説 情報編の全文/情報Ⅰ教員研修用教材の序章+第1〜4章/情報Ⅱ教員研修用教材の序章+第1〜5章(第3章は前半・後半の2分冊とも)です。PDFの改行で語が分断されるのを避けるため、空白をすべて除いてから数えています。

学習指導要領解説 情報編 情報Ⅰ 教員研修用教材
(序章+第1〜4章)
情報Ⅱ 教員研修用教材
(序章+第1〜5章)
待ち行列 0回 1回(第3章) 0回
待ち時間 0回 0回 0回
非機能 0回 0回 8回(すべて第4章)
性能テスト 0回 0回 6回(すべて第4章)
応答時間 0回 0回 1回(第4章)

数え方について、2つ申し添えます。どちらも、この表を自分で再現しようとした人が必ずぶつかるところです。

ひとつめ:「行列」だけで検索してはいけない

「待ち行列」を探そうとして「行列」で数えると、情報Ⅰ第4章に22回、情報Ⅱ第3章前半に21回、後半に10回、第5章に2回もヒットします。合計55回。しかし1件ずつ中身を見ると、すべて数学の「行列(matrix)」でした。隣接行列・疎行列・散布図行列・相関係数行列・相関行列・共分散行列・分散共分散行列・混同行列・ピクセル行列——待ち行列は1件もありません。同じ2文字が、まったく別の意味で使われている。素朴に数えると、情報Ⅱが待ち行列を55回も扱っているように見えてしまいます。

ふたつめ:「応答時間」は素朴に検索すると0回と出る

情報Ⅱ教員研修用教材の第4章に確かに1回あるのですが、その語が表のセルの中で「応答時」と「間」に改行で分断されているため、PDFからテキストを取り出して検索しても引っかかりません。空白を除いてから数えて、はじめて見つかります。「0回だった」は、しばしば「探し方が悪かった」の言い換えです。

さて、「待ち行列」のたった1回は、情報Ⅰ教員研修用教材の第3章 学習16で、動的モデルの例として名前が挙がるだけです。

動的モデルはレジの待ち行列や,気象予測,生物の成長など,時間的要素を含んだ事象のモデルである

文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第3章 学習16 確定モデルと確率モデル(令和2年)

同じ学習16が実際に手を動かさせるのは、確定モデルの複利計算と、確率モデルのサイコロ・モンテカルロ法です。待ち行列のシミュレーションのやり方は、国の教材のどこにも書かれていません。文部科学省が公開している実践事例のうち確率モデルを扱った事例(北海道札幌北高等学校、2023年)も、題材はじゃんけんでした。

一方、検定教科書には載っています。日本文教出版の「情報Ⅰ」(116-901、令和9年度版)は、公式サイトの紹介で P.122・123「確率モデルのシミュレーション②(アトラクションの待ち行列)」と明記しています。制度の本文にはないが、教科書と共通テストには在る。本書が繰り返し指摘している「情報Ⅰの空白」の典型例が、またここに1つ増えました。

6-2. 情報Ⅰは「現象を再現する」、情報Ⅱは「守るべき数値を決めて検査する」

では情報Ⅱ側には何があるのか。待ち行列という語ではなく、「性能」「応答時間」「非機能要件」という言葉で入ってきます。しかも扱いの位置が変わります。

よりよい情報システムを開発するために,情報システムに求められる機能や性能を明確化する要件定義

文部科学省「高等学校学習指導要領(平成30年告示)解説 情報編」平成30年7月(情報Ⅱ (4)ア(イ))

性能が「要件定義」の対象になる。つまり「何分以内に応答すること」を先に決める側に回るのです。情報Ⅱ教員研修用教材の第4章 学習19 は、処理形態の表の中でオンライントランザクション処理をこう説明しています。

データの発生と同時に処理するが,高い信頼性と即時性が要求され,多数の端末からの同時要求に対しても,応答時間を維持できるようにすることが重要である

文部科学省「高等学校情報科『情報Ⅱ』教員研修用教材」第4章 学習19 情報システム全体の情報の流れ(令和2年6月)

「多数の端末からの同時要求」は、まさに到着がばらつく客の流れです。そして「応答時間を維持する」は、この講で測った待ち時間に上限を設けることに他なりません。そして学習24・学習25では、それがテスト工程になります。

そのシステムが複数ユーザーで同時利用する性質のシステムであれば,多数のユーザーからアクセスされて負荷が高くなったときでも正常に動作するかどうかの性能テストは非常に重要になる

同 第4章 学習24 分割したシステムの結合とテスト

非機能テストと呼ばれるテストでは,プログラムの機能ではなく処理速度や反応速度など,ユーザーが操作する際に不満がないレベルのものであるかをテストしていく。性能テストとは,情報システムを実際と同じように動かしてみて,要件を満たす性能が出るかどうかを確認するテストである

同 第4章 学習25 情報システムの評価・改善

「負荷が高くなったとき」に何が起きるかを予測する道具が、この講の待ち行列モデルです。4-5の表を思い出してください。利用率0.80から0.90へ動かすだけで待ち時間が2.2倍になる。平均で足りているから大丈夫、という設計が最も危ないことを、情報Ⅰの段階で数として知っているかどうか。ここが情報Ⅱの性能設計の入口になります。

6-3. 「待ち」は情報Ⅱ教材に1か所だけ残っている——それがテスト項目だった

6-1の表で「待ち時間」は情報Ⅱ側0回でした。では「待ち」の2文字ならどうか。数えると、情報Ⅱ教員研修用教材の第4章に1件だけあります。そしてその1件が、この講と情報Ⅱの関係を一言で示していました。

場所は第4章 学習24「ユースケーステストによる機能テスト」。図書館システムを題材に、利用者の視点でテスト項目を洗い出す場面です。教材はこう説明します。

システムを,開発側からの視点の他に,利用する側の視点でテストすることも有用である。利用者の使用事例であるユースケースを列挙し,図書検索機能であれば「どの項目を(例えば書名)」「どのキーワードで(例えばPython入門)」「検索件数は(例えば10件表示されたら多すぎるかどうか)」などを利用する視点から想定しテストを行う。

文部科学省「高等学校情報科『情報Ⅱ』教員研修用教材」第4章 学習24(令和2年6月)

そして続く図表4「ユースケーステストの検討例」に、予約機能の検討項目が4つ並んでいます。

誰が / どの書籍を / いつ / 何人待ちか

「何人待ちか」。情報Ⅱの教材で「待ち」という語が使われる唯一の実質的な箇所が、テストで確認すべき項目のリストなのです。

この一語に、情報Ⅰと情報Ⅱの違いが凝縮されています。

  • 情報Ⅰ:与えられた到着時刻と処理時間から、何人待つことになるかを計算する(4-1のトレース表)。
  • 情報Ⅱ:システムを作る前に、「何人待ちか」を確認すべき項目として書き出す。そして作った後に、本当にその値が出るかをテストする。

同じ「待ち人数」が、情報Ⅰでは求める答え、情報Ⅱでは検査する項目になる。計算できる人が、要件を書ける人になる——この講の出口はそこです。

6-4. 「改良」は情報Ⅰの段階から要求されている

見落とされがちですが、性能の話は情報Ⅱを待たずに情報Ⅰの内容の取扱いに書かれています。

内容の(3)のアの(イ)及びイの(イ)については,関数の定義・使用によりプログラムの構造を整理するとともに,性能を改善する工夫の必要性についても触れるようにする

文部科学省「高等学校学習指導要領(平成30年告示)解説 情報編」平成30年7月(情報Ⅰ 内容の取扱い(4))

2026年度第3問の問3が「処理回数を減らす改良」を問うたのは、思いつきではなくこの一文に対応しています。答えが合っていればよい、から、同じ答えをより少ない手数で出せへ。情報Ⅰの段階でその要求は始まっています。

6-5. その先——大学・資格試験ではどう扱われるか

IPA の基本情報技術者試験シラバス Ver.9.2 では、待ち行列理論は「応用数学」の独立項目です(3-5に引用しました)。そして別の大分類には、その使いどころが並んでいます。

①システムの性能指標 システムの性能を評価する際の評価項目の考え方を理解する。
用語例 レスポンスタイム(応答時間),ターンアラウンドタイム,スループット,ベンチマーク
②キャパシティプランニング (中略)性能要件からサーバ,ストレージなどの性能諸元を見積り

情報処理推進機構「基本情報技術者試験(レベル2)シラバス Ver.9.2」システムの評価指標

待ち行列 → 応答時間・スループット → どれだけのサーバを用意するか(キャパシティプランニング)という一本道です。文化祭のゲーム展示に何人並ぶかを数えることと、サービスに何台サーバを置くかを決めることは、同じ漸化式の上に乗っています。

6-6. 対比でまとめる

情報Ⅰ 情報Ⅱ
待ち行列の位置 動的モデルの(教材では名前のみ)。手続きは教科書と共通テスト側にある 語としては現れない。「性能」「応答時間」「非機能要件」として現れる
何をするか 与えられた条件で待ち時間を再現する 守るべき応答時間を決め、負荷をかけて検査する
ばらつきの扱い 結果がぶれる原因 「負荷が高まったとき」を想定するための前提
出口 待ち時間の平均・最長 要件定義/性能テスト/システム構成の決定
その先 待ち行列理論・レスポンスタイム・キャパシティプランニング(IPA)

情報Ⅰが「起きたことを再現する」で終わり、情報Ⅱは「起きてほしくないことを起こさないように設計する」まで行く。待ち行列は、その差がいちばん見えやすい題材です。

まとめ

  • 待ち時間 = 開始時刻 − 到着時刻。そして 開始時刻 = max(到着時刻, 直前の客の終了時刻)。この漸化式1本ですべてが決まる。
  • 行列は能力不足だけが原因ではない。空き時間は貯金できないのに遅れは繰り越されるという非対称性のため、平均が足りていてもばらつきがあれば行列は生まれる。
  • 到着側・処理側のどちらのばらつきでも行列はできる。両方あると待ち時間はおよそ2倍になる(実測5.7〜5.9分 → 12.1分)。
  • 利用率が1に近づくと待ち時間は跳ね上がる。0.50→0.95(1.9倍)で待ち時間は約17倍。だから窓口を1本足す効果は、混んでいるときほど大きい。
  • 公式(M/M/1)は前提が狭い。条件を足すと解けなくなるので、1件ずつ進めるシミュレーションに切り替える。
  • 前提(先着順か・窓口は何本か・諦める客はいるか)を書かないシミュレーションは意味がない。
  • 共通テストは「手で整理 → コード化 → 改良」の3段で出る。問1のトレース表が全体の土台。
  • 情報Ⅱでは「待ち行列」という語ではなく、要件定義・応答時間・性能テストとして同じ問題が戻ってくる。

出典(すべて2026年8月3日に取得)

  • 文部科学省「高等学校学習指導要領(平成30年告示)解説 情報編」平成30年7月
  • 文部科学省「高等学校情報科『情報Ⅰ』教員研修用教材」第1章・第3章(令和2年)
  • 文部科学省「高等学校情報科『情報Ⅱ』教員研修用教材」第4章 情報システムとプログラミング(令和2年6月)
  • 文部科学省「高等学校情報科 実践事例」プログラミングとシミュレーション(確率モデル)北海道札幌北高等学校(2023年)
  • 大学入試センター「令和8年度大学入学共通テスト 問題評価・分析委員会報告書『情報Ⅰ』」(問題作成部会の見解・自己評価)
  • 大学入試センター「令和8年度 本試験 情報Ⅰ 正解表」(各大問の配点)/「共通テスト用プログラム表記」/「令和7年度大学入学共通テスト 試作問題『情報』の概要」(2022年11月9日)
  • 情報処理推進機構(IPA)「基本情報技術者試験(レベル2)シラバス Ver.9.2」
  • 日本文教出版「情報Ⅰ」(116-901、令和9年度版)教科書紹介ページ

本書『藤原進之介の最強120講義』の全体像と各講の一覧は情報Ⅰ 最強120講義(目次)にまとめています。共通テスト情報Ⅰの学習計画については共通テスト「情報Ⅰ」対策はいつから何をやるべきか、実際に得点を伸ばした事例は36点から本番92点へ伸ばした指導実例をご覧ください。制度の話は2026年8月時点の情報です。

執筆:藤原進之介(数強塾グループ代表)

オンライン数学専門塾「数強塾」代表。累計3,500名以上の中高一貫校生を指導。東進ハイスクール・東進衛星予備校・代々木ゼミナールなど出講実績あり。情報Ⅰの参考書を複数執筆しており、KADOKAWA『ゼロから始める情報I』、Gakken『きめる!共通テスト 情報Ⅰ』などがあります。本記事は参考書『藤原進之介の最強120講義』第62講のWeb版です。

藤原進之介のプロフィールを見る

「情報Ⅰ、独学でいけるのか不安」という方へ

数強塾では数学と情報Ⅰの両方に対応したオンライン個別指導を行っています。学習相談は無料、体験授業は3,000円(税込)でお受けしています。

体験授業のご案内つまずき診断(無料・約2分)

情報Ⅰ・情報Ⅱの勉強で詰まっていませんか

この記事を書いているのは、情報Ⅰ専門のオンライン個別指導「情報ラボ」(数強塾グループ)です。講義も過去問も無料で公開しているので、まず全部使ってみてください。

情報Ⅰについて相談する(無料)体験授業(3,000円)

お問い合わせの際は、内容欄に「情報Ⅰ希望」とご記入ください。担当者が直接お返事します。

数強塾オンラインのご案内

体験授業に申し込む入塾受け入れ状況(残席)数学つまずき診断(無料)体験授業の事前案内保護者の方へ高1・高2の方へ医学部志望の方へ保護者様からの声料金・指導システム指導事例・合格実績大学受験 合格実績(集計ルール開示)数強塾グループの理念学校別の数学対策数学の勉強法(記事一覧)数強塾プレミアム(映像授業)獣医学部専門コース鉄緑会・SAPIX等との併用サポート過去問解説・数学問題集情報Ⅰ・情報Ⅱ専門「情報ラボ」情報の過去問アーカイブ(無料PDF)解法テクニック事典(公式・裏ワザ)入試数学の定石(解き方の型・全27章)数学の要点辞典まとめ(中1〜数学III)中1数学の要点辞典(全7単元)中2数学の要点辞典(全6単元)中3数学の要点辞典(全8単元)数学I・Aの要点辞典(全9単元)数学II・B・Cの要点辞典(全12単元)数学IIIの要点辞典(全7単元)論理と証明の要点辞典(全8章)2026年 夏期講習会2026年 冬期講習会代表・藤原進之介について