ネストされたビッグO表記


8

グラフがあるとしましょうでの縁。実行時間がでBFSを実行したい。| E | = O V 2G O V + E |G||E|=O(V2)GO(V+E)

このグラフの実行時間はで、簡略化すると書くのは自然なことです。O V 2O(O(V2)+V)O(V2)

このような「ネストされたOを削除する」ショートカットを使用することの落とし穴はありますか(この場合だけでなく、より一般的に)?


4
big-Oの定義に取り組むと、ネストされたOは自然で冗長なものであり、内側のOを削除するルールが正しいことがわかります。
Dave Clarke

VはO(V ^ 2)にあるので、あなたが何をしているのかわからない場合は、O(V ^ 2)をVに置き換えることができると思いますか?
Unfun Cat

3
自分が何をしているかわからない場合は、恣意的に間違ったことができます。
Dave Clarke

4
確かに。=ではない=ビッグオーランドでは。
Dave Clarke

3
ランダウ記法の=についてのmath.SEに関するこの優れた質問も参照してください。
ラファエル

回答:


14

まず、推奨事項から始めましょう。ランダウ記法は、丸めを扱うのと同じように(すべきです)丸めはめったに行わず、丸めを遅くします。よりも正確なものがわかっている場合は、すべての計算が完了するまでそれを使用し、最後にLandauifyを使用します。O(.)


質問については、この表記の乱用を調べてみましょうlet。ようなものをどのように解釈しますか?をその定義に完全に置き換える必要があります。つまり、OhO(f+O(g))O

gO(g).hO(f+g)

その後

gO(g).d>0.n.h(n)d(f(n)+g(n))

これは

c>0.d>0.n.h(n)d(f(n)+cg(n))

確かに、これはと同等であることがわかります。とにかく、精度の低下はによって無視されます。H O F + G Od(f(n)+cg(n))cd(f(n)+g(n))hO(f+g)O


他の組み合わせはどうですか、と言いますか?ここで同じことを試みると、hO(f+Ω(g))

gΩ(g).hO(f+g)

しかし、これはトートロジーです:は確かに上に任意の大きな何かによって制限されます。したがって、この方法で上限と下限を組み合わせることは意味がありません。h


  1. O(.)と他のLandauシンボルは、関数を関数クラスにマッピングします。関数クラスに供給することは、すぐには意味がありません。
  2. 少なくとも、ランタイムについて話すときに安全に想定できるポジティブ関数のみを考慮する場合。これが一般的に機能するかどうかはわかりません。

2

私は最近それに遭遇したので、これを追加したかっただけです。このショートカットは加算と乗算で問題ありませんが(をと混合しない場合。承認された回答を参照)、指数を使用するときは注意が必要です。例: この例では、は最初のクラスに属していますが、2番目のクラスには属していません。Ω O N O M O N Mn 2 mOΩ

O(nO(m))O(nm).
n2m

1

定義により、はセットであり、この表記をネストして使用すると、セットにセットが含まれることになり、これは誤りです。O(g)

O表記法の定義

O(g)={f|c>0x0>0x>x0:|f(x)|c|g(x)|}

間違い

ような用語を使用しました。ここで、kとnは関数であり、はセットです。しかし、セットに追加された関数の結果は何ですか?定義されていません!O n O(O(n)+k)O(n)

正しいバージョン

ネストされたランダウ記号を使用する代わりに、以下を実行できます。O O(m+k),mO(n)


2
はい。しかし、ランダウ記法は、(申し立てられた)使いやすさのために頻繁に乱用されます。そのため、誰もが同じことを理解できるようにします。構造化アプローチについては、こちらをご覧ください。
ラファエル

0

OOf(n)g(n)

(1).nm=O(nm),mm(3).f(n)=O(f(n))(5).O(O(f(n)))=O(f(n))(4).cO(f(n))=O(f(n))(2).O(f(n))+O(g(n))=O(f(n)+g(n))(6).O(f(n))O(g(n))=O(f(n)g(n))=f(n)O(g(n))

f(n)O

次に、(2)および(6)を使用すると、ネストされた 表記をおよびと互換性のある方法で操作できます。+ ×O+×

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.