概要
Dynamic Programming (動的計画法)の「programming」は 「計画立案」 の意味 1950年代 にRichard Bellmanが命名した 背景 依存関係 に基づく 最適な手順の構築 Top-down ・ Bottom-up 両方のアプローチが存在 「dynamic」の意味より「programming」の意味に 注目 する重要性
Dynamic Programmingの「programming」とは
-
Dynamic Programming の「programming」は 「ソフトウェアを書く」 意味ではなく 「計画を立てる」 意味
-
Oxford English Dictionary によると、「programming」は 管理や統制のための計画立案
-
TV programming (番組編成)のような スケジューリング に近い意味合い
-
1950年代、土木技師が「新しいビルをプログラムする」と言えば、 建設工程の計画立案 を指す
-
例: 基礎工事→構造→内装→検査 という 依存順序のある作業計画
- 各作業は 前段階の完了 が必要
- 一度済ませた作業を 繰り返さない効率化 が重要
Dynamic Programmingの本質
- Dynamic Programming は「問題解決のための 最適な手順計画」の構築
- 例: Fibonacci数列 を求める場合、fib(2)からfib(10)まで 依存順に計算
- 各fib(n)は fib(n-1), fib(n-2) の計算結果に依存
- 同じ値を何度も計算しない ための手順設計
- Top-down(再帰的分割) や Bottom-up(逐次積み上げ) いずれのアプローチも Dynamic Programming に該当
- 依存関係 を整理し、 無駄を省く計画 の立案が核
「dynamic」と「programming」の語源・背景
- Richard Bellman が1950年代に命名
- 米国防長官Wilsonは「research」や「mathematical」という言葉を 嫌悪
- Bellmanは RAND Corporation での研究活動を 目立たせないため に「dynamic programming」という名前を採用
- 「dynamic」 は「多段階」「時間変化」「否定的な意味を持たない」形容詞として選択
- 「programming」 は 計画 や 意思決定 の意味
- 「dynamic programming」 は 計画的・段階的な最適化手法 として広まる
誤解されやすい「dynamic」の意味
- 多くの人が「dynamic」の意味ばかり気にするが、 本質は「programming」
- 「dynamic programming」 は「動的なプログラミング」ではなく 「動的な計画立案」
- 「dynamic typing」 など、他の文脈での「dynamic」とは異なる意味
まとめ
- Dynamic Programming の「programming」は 「計画」
- 問題の 依存関係を整理し、無駄なく解決する計画 の策定
- Top-down/Bottom-up どちらも 本質は同じ
- Richard Bellman の命名背景を知ることで 誤解が解ける