【徹底検証】ウサカメ算は「公式」で解くべきか? それとも「アルゴリズム」でイクべきか?――結論、公式暗記より「差分を追うアルゴリズム」が強すぎる説
算数界隈でおなじみの「ウサギとカメ」問題。
ウサギが先に走る、寝る、カメが追いつく、ウサギが再び走る――。
ここでオタクくんを悩ませるのが、
「旅人算の公式を覚えて解くべきなのか?」
「状況をアルゴリズムとして処理すべきなのか?」
という問題である。
結論から言えば――
「公式はアルゴリズムを圧縮したショートカット」
なのである。
つまり、
初学者→アルゴリズム
習熟者→公式
難問→アルゴリズムに戻る
この三段変形が最強説を、徹底検証していきたい。
■そもそもウサカメ算とは何なのか
いわゆる「ウサギとカメ」の問題は、数学的には旅人算・追いつき算の典型例である。
旅人算では、同じ方向に進む2者が追いつく場合、
距離の差 ÷ 速さの差 = 追いつくまでの時間
という公式が使える。
実際、旅人算の基本は「2人の距離がどれだけ縮まったか」を考えることであり、追いつき算では速さの差がその縮まり方になる。0
例えば、
- カメ:分速40m
- ウサギ:分速60m
- 最初の差:200m
ならば、
200 ÷ (60-40) = 10分
で追いつく。
はい、公式一発。
しかしここで重要なのは――。
この公式、突然空から降ってきたわけではない。
■公式の正体、実は「アルゴリズムの圧縮版」だった
先ほどの問題を、公式を使わずに考えてみよう。
ウサギは1分間に60m進む。
カメは1分間に40m進む。
つまり1分経過するごとに、
60-40=20m
ずつ差が縮まる。
最初は200m。
だから、
200 → 180 → 160 → 140 → …… → 20 → 0
と差が減少していく。
200mを1回20mずつ削る。
したがって、
200 ÷ 20 = 10
分。
これを一般化したものが、
「距離の差 ÷ 速さの差」
なのである。
つまり公式とは、
「毎ターン何m差が縮むかを計算して、残り距離が0になるまで回す」
というアルゴリズムを、一行に圧縮したもの。
ここが本質である。
■「公式」と「アルゴリズム」は対立していない
オタクくんはしばしば、
「公式暗記派」vs「考え方重視派」
という対立構造を作りがちである。
しかしウサカメ算については、これはほぼ偽の二項対立である。
| 方法 | やっていること | 特徴 |
|---|---|---|
| 公式 | 差÷速さの差 | 高速・省エネ |
| アルゴリズム | 差を毎回更新 | 汎用性が高い |
| グラフ | 位置を時間で追跡 | 複雑な状況に強い |
要するに、
公式=完成したアルゴリズム
なのである。
■問題が単純なら「公式」が圧倒的に強い
例えば、
「カメが100m先を分速30mで進んでいる。ウサギは分速50m。何分で追いつくか」
みたいな問題。
これを毎分シミュレーションする必要はない。
100 ÷ (50-30)
=5分。
終了。
ここで「アルゴリズムが大事だから、1分目は80m、2分目は60m……」などとやっていたら、
算数の問題に対して計算量O(n)をぶつけている。
公式ならO(1)。
完全に公式の勝利である。
■ところが「ウサギが寝る」と一気に話が変わる
ウサカメ問題が面白くなるのはここからだ。
例えば実際の入試問題では、ウサギが途中で昼寝をする設定が普通に登場する。
2023年の開成中学の問題でも、ウサギが残り100mで昼寝をし、カメが追いつき、その後ウサギが再加速するという複雑な設定が出題されている。1
さらに近年の入試問題でも、ウサギが昼寝→逆方向に走る→向きを変える、といった展開まで登場している。2
こうなると、
「追いつき算の公式を覚えました!」
だけでは足りない。
なぜなら途中で状態が変わるからである。
■ここで「アルゴリズム」が覚醒する
複雑なウサカメ問題は、こう考えると一気に楽になる。
①現在の位置を確認
↓
②現在の速度を確認
↓
③一定時間後の位置を更新
↓
④イベントが発生したら状態を変更
↓
⑤ゴール条件を満たしたら終了
これ、完全にアルゴリズムである。
プログラミング的に書けば、
while ゴールしていない:
現在位置を更新
時間を更新
if ウサギが寝た:
ウサギの速度 = 0
if ウサギが起きた:
ウサギの速度 = 新しい速度
if 追いついた:
状態を変更
となる。
ウサカメ算、実質シミュレーション問題説。
■実は「ダイヤグラム」はアルゴリズムの可視化である
ここで非常に重要なのがダイヤグラム。
ウサギとカメの問題では、時間を横軸、距離を縦軸にして2匹の動きを線で表すと、状況が非常に見やすくなる。
実際、開成中学のウサギとカメ問題についても、解説ではグラフ化して条件を整理する方法が紹介されている。3
これは単なる「絵」ではない。
状態遷移を目で見えるようにしたものである。
例えば、
- ウサギが走る → 線が急上昇
- ウサギが寝る → 線が水平
- ウサギが再び走る → また上昇
- カメ → 一定の傾きで直線
となる。
つまり、
ダイヤグラム=ウサカメアルゴリズムの可視化
なのである。
■では「公式だけ暗記」はダメなのか?
いや、全然ダメではない。
むしろ使える公式はガンガン使うべきである。
数学・算数において、公式とは人類が過去に何度も同じ計算をするのが面倒になって圧縮した知識だからだ。
「追いつくまでの時間」を毎回ゼロから考える必要はない。
距離÷速さの差
で済むなら、それを使えばいい。
問題は、
「公式を使える条件を理解しているか」
である。
■公式暗記だけのオタクくん、ここで死亡
例えば、
「ウサギが60分間寝ています」
と言われた瞬間に、
「追いつき算だから距離÷速さの差!」
とやる。
ところが、
寝ている間はウサギの速度=0。
つまり通常の追いつき算とは状態が違う。
さらに、起きた後の速度が変わるなら、もう一度状態が変化する。
こうなると、
問題全体に一つの公式を適用する
という発想そのものが危険になる。
■「区間分割」というアルゴリズムが最強
複雑な問題への実戦的な攻略法は、
「時間を状態ごとに分割する」
ことである。
| 区間 | ウサギ | カメ | 考えること |
|---|---|---|---|
| ① | 走る | 走る | 速さの差 |
| ② | 寝る | 走る | カメだけ進む |
| ③ | 再び走る | 走る | 再び速さの差 |
こうすれば、各区間では単純な公式を使える。
つまり、
アルゴリズムで問題を分解 → 各区間で公式を使用
というハイブリッド戦略になる。
■「公式 vs アルゴリズム」の最終判定
| 状況 | 推奨 | 理由 |
|---|---|---|
| 単純な追いつき | 公式 | 一撃で終わる |
| 出会い算 | 公式 | 速さの和で処理できる |
| 昼寝あり | アルゴリズム+公式 | 状態が変化する |
| 速度変更あり | アルゴリズム+公式 | 区間分割が必要 |
| 逆走あり | ダイヤグラム | 状況把握が重要 |
| 条件が複雑 | アルゴリズム | 公式一本では破綻しやすい |
■結論:「公式で解く」のではなく「アルゴリズムを公式で高速化する」が正解
今回の検証をまとめると、
ウサカメ算は「公式かアルゴリズムか」の二択ではない。
むしろ、
アルゴリズムが本体。
公式は、そのアルゴリズムを圧縮した高速化手法。
と考えるのが最も美しい。
だから学習順序としては、
①まず「位置・速度・時間がどう変化するか」を追う
↓
②その結果として「速さの差」「速さの和」を理解する
↓
③公式として圧縮する
↓
④難問では再びアルゴリズムに戻る
これが最強。
実際、旅人算の教材でも、道のりの図やダイヤグラムで状況を把握し、そのうえで公式を使う方法が推奨されている。4
要するに――
「公式を覚えるな!」ではない。
「公式の中身をアルゴリズムとして理解した上で、公式を使え!」
なのである。
そしてこれ、ウサカメ算だけではない。
算数・数学の公式のかなりの部分に通用する思想である。
公式は魔法ではない。
人類が何度も繰り返したアルゴリズムを、使いやすい形に圧縮したもの。
そう考えると、ウサカメ算は突然「アルゴリズム教育の入口」に見えてくるのである。
――ウサギとカメ、実は小学生に「状態遷移」と「計算量」を教えていた説、爆誕。
宜しくお願い致します。
5