プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

リトルオー記法(o)とは?定義・数式・具体例をわかりやすく解説

リトルオー記法(o)とは

アルゴリズムの計算量を評価するための漸近記法には、ビッグオー(O)、ビッグオメガ(Ω)、ビッグシータ(Θ)がよく知られていますが、これら以外にもいくつかの記法が存在します。そのひとつがリトルオー記法(o)です。

リトルオー記法は、タイトにならない上界(緩い上界)を表すために用いられます。つまり、f(n) が g(n) よりも「厳密に小さい」こと、すなわち両者の増加の度合いが本質的に異なることを表現します。

リトルオー記法の定義

正の実数を扱う2つの関数 f(n)、g(n) を考えます。任意の正の定数 c > 0 に対して、ある整数 n₀ ≥ 1 が存在し、すべての n ≥ n₀ において 0 ≤ f(n) < c・g(n) が成り立つとき、f(n) = o(g(n)) と定義されます。

リトルオー記法の数学的な関係式

この関係を極限を用いて表すと、f(n) = o(g(n)) は次のように書けます。

lim(n → ∞) f(n) / g(n) = 0

これは、n が無限大へ近づくにつれて f(n) と g(n) の比が 0 に収束することを意味します。言い換えると、g(n) の方が f(n) よりも圧倒的に速く増加するということです。

リトルオー記法の具体例

f(n) = n2、g(n) = n3 のとき、f(n) = o(g(n)) が成り立つかどうかを確認してみましょう。

lim(n → ∞) n2 / n3 = lim(n → ∞) 1 / n = 0

結果は 0 となり、前述の関係式を満たします。したがって、f(n) = o(g(n)) が成立します。これは、n3 が n2 よりも本質的に速く増加することを示しています。

ビッグオー記法(O)との違い

ビッグオー記法は「タイトな上界も含めて」 f(n) ≤ c・g(n) を満たすことを許容しますが、リトルオー記法では、両者が同じオーダーになるような場合は除外されます。

例えば、n2 = O(n2) は成り立ちますが、n2 = o(n2) は成り立ちません(比が 1 となり、0 に収束しないためです)。この点が両者の大きな違いです。

  1. Rubyで学ぶビッグオー(Big-O)記法:アルゴリズムの効率を直感的に理解する

    かつて「それのビッグオー記法は何ですか?」という質問を聞くことほど怖いものはありませんでした。学校で習った記憶はあるものの、数学(決して得意科目ではありませんでした)に関わる話題だったため、記憶から完全に消し去っていたのです。 しかし、キャリアが進むにつれて、私は次のような場面に直面するようになりました。 パフォーマンスチャートを眺める 遅いクエリのデバッグに苦戦する 「負荷が増えたときにコードは耐えられるのか検討しましたか?」と問われる そろそろ原点回帰して(分かりますかね?)ビッグオーを学び直そうと決めたとき、その驚くほどシンプルな本質に気づきました。この記事では学んだことを共有

  2. iPhoneのメッセージに表示される三日月マーク(月アイコン)とは?意味と消し方を徹底解説

    iPhoneでメッセージアプリを開いたとき、会話の横に小さな三日月(月)マークが表示されていることに気づいたことはありませんか?「このアイコンは何を意味しているの?」「なぜ表示されるの?」と疑問に思った方は多いはずです。実際、「iPhone 三日月 マーク 意味」といったキーワードで検索するユーザーは非常に多く、この記号の正確な機能を知りたいという人が後を絶ちません。 この記事では、メッセージ横の三日月マークの意味を詳しく解説し、そのマークを消すための手順もわかりやすくご紹介します。最後まで読めば、月アイコンに関する疑問がすべて解決するでしょう。 iPhoneのメッセージ横にある三日月マークと