O記法の「=」って実は正しくない?!
はじめに
アルゴリズムの計算量を表すとき、こんな表記を見たことがあるはずです。
この「=」、実は数学的には正しくありません。
「え、どういうこと?」と思った方、ご安心ください。この記事では、この「=」の正体と、なぜこの書き方が許されているのかを解説します。

O 記法の正式な定義
まず、
具体的には、「
例えば、以下の関数はすべて
n^2 2n^2 + 3n + 1 -
(n より小さいので当然OK)n^2 -
(定数も含まれる)1000
本当は「\in 」で書くべき
しかし、実際の教科書や論文では、ほとんどの場合こう書かれています。
なぜでしょうか?
「適切な乱用」という文化
実は、この「=」の使い方は記法の乱用(abuse of notation)として広く認識されています。
「乱用」と聞くとネガティブに聞こえますが、数学の世界では意味を正しく理解した上での省略や簡略化は許容されています。むしろ推奨されることもあります。
「=」を使う利点
では、具体的にどんな利点があるのでしょうか?
利点1:式変形が自然にできる
再帰的なアルゴリズムの計算量は、漸化式で表されることがあります。
例えばマージソートの計算量を
ここで
「
利点2:連鎖的な式変形ができる
「=」を使えば、次のように式を連鎖させることができます。
「
等号の解釈ルール
ただし、この「=」の解釈にはルールがあります。
ルール1:右辺に単独で現れる場合
ルール2:式の中に現れる場合
式の一部として漸近記法が現れる場合、それは「何らかの具体的な関数」を表します。
上の例では、
ルール3:左辺に現れる場合
左辺に漸近記法が現れる場合は、「どんな関数を当てはめても等式が成り立つ」 という意味です。
例えば:
-
に\Theta(n) を当てはめると →3n →2n^2 + 3n に属する ✓\Theta(n^2) -
に\Theta(n) を当てはめると →100n + 5 →2n^2 + 100n + 5 に属する ✓\Theta(n^2)
まとめ
-
は関数の集合として定義されているO(g(n)) - 厳密には
と書くべきf(n) \in O(g(n)) - しかし慣習的に
と書く(「適切な乱用」)f(n) = O(g(n)) - この乱用には明確な解釈ルールがある
- 利点:式変形が自然にでき、余計な詳細を気にせず済む
参考文献
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein. Introduction to Algorithms, Fourth Edition. MIT Press, 2022.
Discussion