何をしてい


15

何をしていlogO(1)nの平均?

big-O表記は知っていますが、この表記は意味がありません。検索エンジンがこれを正しく解釈する方法がないため、私もそれについて何も見つけることができません。

ちょっとした文脈で、私が見つけた文は「[...] O(logn)空間を使用し、アイテムごとに最大で関数を使用する場合、関数[効率的]を呼び出しlogO(1)nます。」


1
私は、それが何を意味するのかについて非常に明確であり(そして読者にそれが何であるかを伝え)、一貫して同じルールを使用しない限り、このようなことを書くべきではないことに同意します。
ラファエル

1
はい、代わりに次のように記述する必要があります (log(n))O(1)

1
@RickyDemerこれは、Raphaelが言っていることではありません。は、正確にlog n b l a hを意味しますlogblahn(logn)blah
デビッドリチャービー

4
@Raphaelこれは、フィールドの標準表記です。知っている人なら誰でもそれが何を意味するか知っているでしょう。
ユヴァルフィルマス

1
@YuvalFilmusさまざまな反対の答えは、あなたの主張が間違っているという決定的な証拠であり、実際にそのような表記法の使用を控えるべきだと思います。
ラファエル

回答:


16

」が間違った場所にあるという強い気持ちを少しの間無視し、定義に関係なく耕す必要があります。 F N = ログO 1 nは定数が存在することを意味し、KおよびN 0ようなすべてのために、そのN N 0F nはログK 1 N = ログkは、NOf(n)=logO(1)nkn0nn0f(n)logk1n=logkn

log n kを意味することに注意してください。log O 1 nの形式の関数は多対数と呼ばれることが多く、「fは多対数  n」と言われることがあります。logkn(logn)klogO(1)nfn

あなたはそれがあることを証明するのは簡単だということに気づくでしょう、以来2 のn kのn個すべてのためのn 0kは= 22 log n = log O 1 nかどうか疑問に思われるかもしれません。答えは十分な大きさのため、以来、イエスであるnはログのn 2、その2 ログのn ログイン2のnを十分な大きさのために 2n=O(n)2nknn0k=22logn=logO(1)nnlogn22lognlog2nn

関連するメモでは、として書かれた多項式がよく見られます:同じ考えです。nO(1)


これは、一般的なプレースホルダー規則ではサポートされていません。
ラファエル

私はコメントを撤回します:あなたはすべての重要な場所にと書きますが、これで十分です。
ラファエル

@Raphael OK。まだ確認する時間はありませんでしたが、私の感覚では、数量詞を私とは異なる方法で注文しているのではないかと感じました。実際に同じクラスの関数を定義しているかどうかはわかりません。
デビッドリチャービー

私はあなたが私の(2)で定義していると思うし、トムは定義cR>0{logcn}
ラファエル

9

これは、一般的に受け入れられていることにより、感行うことができ表記の乱用であるプレースホルダ規則を使用すると、ランダウ項見つけるたび:によって(あなたの心で、または紙の上に)それを置き換える任意の関数G O f O(f)gO(f)

あなたが見つけたら

f(n)=logO(1)n

あなたは読むべきです

のためのいくつかの G O 1 f(n)=logg(n)ngO(1).(1)

「というの違いに注意してください:ある一定の電力に」G = N 1 / Nの別個の可能性です。logg=n1/n

警告:作者は表記法のさらに多くの乱用を採用している可能性があり、あなたに読んでほしい

いくつかのために、G O 1 f(n)O(logg(n)n)gO(1).(2)

(1)と(2)の違いに注意してください。ここでは同じ値の正の関数セットを定義することができますが、これは常に機能するとは限りません。式の中で気を付けずに動かさないでください!O


3
私はそれがダニであることをするものだと思う単調と固定ごとに、十分全射であるN。MonotonicはOの位置を等価にし、(2)⇒(1)を与えます; 他の方法で行くことが必要gであれば失敗する可能性が存在するF nは機能の範囲外です。Oを動かすことは危険であり、「ワイルド」な機能をカバーしていないことを指摘したい場合は問題ありませんが、この特定のケースでは、コストを表す種類の機能は問題ありません。xlogx(n)nOgf(n)O
ジル 'SO-悪であるのをやめる'

@Gilles声明を一般的な警告に弱めました。
ラファエル

1
この答えは大幅に編集されており、今私は混乱しています:(1)と(2)は事実上同じだと主張していますか?
-Oebele

@Oebele私が知る限り、それらは一般的なものではなく、ここにあります。
ラファエル

しかし、ようなものは(1)に一致しませんが、(2)に一致しますか?または私は今ばかげているだけですか?3log2n
-Oebele

6

It means that the function grows at most as log to the power of some constant, i.e. log2(n) or log5(n) or log99999(n)...


This can be used when the function growth is known to be bounded by some constant power of the log, but the particular constant is unknown or left unspecified.
Yves Daoust

This is not supported by the common placeholder convention.
Raphael

2

"At most logO(1)n" means that there is a constant c such that what is being measured is O(logcn).

In a more general context, f(n)logO(1)n is equivalent to the statement that there exists (possibly negative) constants a and b such that f(n)O(logan) and f(n)Ω(logbn).

It is easy to overlook the Ω(logbn) lower bound. In a setting where that would matter (which would be very uncommon if you're exclusively interested in studying asymptotic growth), you shouldn't have complete confidence that the author actually meant the lower bound, and would have to rely on the context to make sure.


The literal meaning of the notation logO(1)n is doing arithmetic on the family of functions, resulting in the family of all functions logg(n)n, where g(n)O(1). This works in pretty much the same as how multiplying O(g(n)) by h(n) results in O(g(n)h(n)), except that you get a result that isn't expressed so simply.


Since the details of the lower bound are in probably unfamiliar territory, it's worth looking at some counterexamples. Recall that any g(n)O(1) is bounded in magnitude; that there is a constant c such that for all sufficiently large n, |g(n)|<c.

When looking at asymptotic growth, usually only the upper bound g(n)<c matters, since, e.g., you already know the function is positive. However, in full generality you have to pay attention to the lower bound g(n)>c.

This means, contrary to more typical uses of big-oh notation, functions that decrease too rapidly can fail to be in logO(1)n; for example,

1n=log(logn)/(loglogn)nlogO(1)n
because
lognloglognO(1)
The exponent here grows in magnitude too rapidly to be bounded by O(1).

A counterexample of a somewhat different sort is that 1logO(1)n.


Can't I just take b=0 and make your claimed lower bound go away?
David Richerby

1
@DavidRicherby No, b=0 still says that f is bounded below. Hurkyl: why isn't f(n)=1/n in logO(1)n?
Gilles 'SO- stop being evil'

@Gilles: More content added!

@Gilles OK, sure, it's bounded below by 1. Which is no bound at all for "most" applications of Landau notation in CS.
David Richerby

1) Your "move around O" rule does not always work, and I don't think "at most" usually has that meaning; it's just redundant. 2) Never does O imply a lower bound. That's when you use Θ. 3) If and how negative functions are dealt with by a given definition of O (even without abuse of notation) is not universally clear. Most definitions (in analysis of algorithms) exclude them. You seem to assume a definition that bounds the absolute value, which is fine.
Raphael
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.