什么


15

什么意思吗?log O (1 ) nlogO(1)n

我知道big-O表示法,但是这种表示法对我来说毫无意义。我也找不到任何东西,因为搜索引擎也无法正确解释。

在上下文中,我发现它的句子为“ [...],如果它使用空间并且最多使用则我们将其称为[efficiency]函数每件。”O (log n )log O (1 ) nO(logn)logO(1)n


1
我同意一个人不应写这样的东西,除非一个人非常清楚这意味着什么(并告诉读者这是什么),并且始终如一地使用相同的规则。
— 拉斐尔

1
是的,应该改写成 (log (n ))O (1 )(log(n))O(1)。

1
@RickyDemer这不是Raphael提出的重点。log b l a h n准确地表示(log n )b l a h h。logblahn(logn)blah
— David Richerby,2015年

4
@Raphael这是该字段中的标准符号。知道的人都会知道这意味着什么。
— Yuval Filmus 2015年

1
@YuvalFilmus我认为各种不同的答案是确凿的证据,证明您的说法是错误的,并且确实应该避免使用这种表示法。
— 拉斐尔

Answers:


16

您需要暂时忽略强烈的感觉,即“ O ”位于错误的位置,并继续使用定义。 ˚F (Ñ )= 日志Ô (1 ) ñ意味着存在常数ķ和Ñ 0,使得对于所有Ñ ≥ Ñ 0,˚F (Ñ )≤ 日志ķ ⋅ 1 ñ = 登录ķ Ñ。Of(n)=logO(1)nkn0n≥n0f(n)≤logk⋅1n=logkn

注意,log k n表示(log n )k。log O (1 ) n形式的函数通常称为多对数,您可能会听到人们说“ f是polylog  n”。logkn(logn)klogO(1)nfn

你会发现,很容易证明,2 ñ = Ø (ñ ),自2 ñ ≤ ķ ñ所有ñ ≥ 0,其中ķ = 2。您可能想知道2 log n = log O (1 ) n。答案是肯定的,因为对于足够大ň,登录ñ ≥ 2,所以2 日志ñ ≤ 日志2 ñ的足够大的 2n=O(n)2n≤knn≥0k=22logn=logO(1)nnlogn≥22logn≤log2nn。n

在相关说明中,您经常会看到写为n O (1 )的多项式:相同的想法。nO(1)


通用占位符约定不支持此功能。
— 拉斐尔

我撤消我的评论:您在所有重要的地方都写≤,这就足够了。≤
— 拉斐尔

@Raphael好的。我还没有时间检查它,但我的感觉是您订购的量词可能与我的方式不同。我实际上不确定我们是否要定义相同的函数类。
— David Richerby

我认为你是我的定义(2),汤姆定义⋃ ç ∈ [R > 0 { 日志Ç ñ }。⋃c∈R>0{logcn}
— 拉斐尔

9

这是符号,它可以被普遍接受的进行感的滥用占位约定:无论何时你发现朗道长期Ô (˚F ),通过替换它(在你的心中,或在纸上)任意函数g ^ ∈ Ø (f )。O(f)g∈O(f)

所以如果你发现

f (n )= log O (1 ) nf(n)=logO(1)n

你要读

˚F (Ñ )= 日志克(Ñ ) ñ一些克∈ Ô (1 )。f(n)=logg(n)n(1 )g∈O(1).(1)

注意从称差“ 登录到一些恒定的功率”:克= Ñ ↦ 1 / Ñ是一个明显的可能性。logg=n↦1/n

警告:作者可使用甚至更多符号的滥用,想读

˚F (Ñ )∈ Ô (日志克(Ñ ) ñ )对于一些克∈ Ô (1 )。f(n)∈O(logg(n)n)(2 )g∈O(1).(2)

注意(1)和(2)之间的区别;尽管可以在此处定义相同的一组正值函数,但这并不总是有效。请勿在表达式中随意移动O!O


3
我想,是什么使得它Tick是X ↦ 登录X(ñ )是单调的,充分满射每个固定ñ。单调使O的位置等效,为(2)⇒(1);反之,则要求g存在,如果f (n )在函数范围之外,则g可能会失败。如果您想指出,四处移动O是危险的,并且不包含“野生”函数,那很好,但是在这种特定情况下,代表成本的函数是可以的。x↦logx(n)nOgf(n)O
— 吉尔斯(Gilles)'所以

@吉尔斯我将声明削弱为一般警告。
— 拉斐尔

1
这个答案已经过大量编辑,现在让我感到困惑:您现在是否声称(1)和(2)实际上是相同的?
— Oebele 2015年

@Oebele据我所知,它们不是一般的,而是这里。
— 拉斐尔

但是,类似3 l o g 2 n的东西不匹配(1)但匹配(2)对吗?还是我现在很傻?3log2n
— Oebele 2015年

6

这意味着该函数最多随log增大到某个常数的幂,即log 2(n )或log 5(n )或log 99999(n ) ...loglog2(n)log5(n)log99999(n)


当已知函数增长受log的某个常数幂限制时,可以使用此函数,但是特定常数未知或未指定。log
— 伊夫·戴乌斯特

通用占位符约定不支持此功能。
— 拉斐尔

2

“至多log O (1 ) n ”表示存在一个常数c,因此被测量的值为O (log c n )。logO(1)ncO(logcn)

在更一般的上下文中,˚F (Ñ )∈ 日志Ô (1 ) Ñ等同于存在(可能为负)的发言常数一个和b,使得˚F (Ñ )∈ Ô (登录一个 Ñ )和˚F (Ñ )∈ Ω (日志b ñ )。f(n)∈logO(1)nabf(n)∈O(logan)f(n)∈Ω(logbn)

很容易忽略Ω (log b n )的下限。在那种情况下很重要的情况下(如果您仅对研究渐进增长感兴趣,这将是非常罕见的),则您不应完全相信作者实际上是指下限,而必须依靠上下文确保。Ω(logbn)


符号的字面意思日志Ô (1 ) ñ是对家庭的功能做算术,导致家族的所有功能登录克(Ñ ) Ñ,其中克(Ñ )∈ Ô (1 )。这与将O (g (n ))乘以h (n )得出O (g (n )h (logO(1)nlogg(n)ng(n)∈O(1)O(g(n))h(n)n )),除了得到的结果并非如此简单。O(g(n)h(n))


由于下界的细节是大概在不熟悉的领域,这是值得一些反例。回想一下,任何克(Ñ )∈ Ô (1 )中是有界的大小 ; 有一个常数c,对于所有足够大的n,| g (n )| < c。g(n)∈O(1)cn|g(n)|<c

在查看渐近增长时,通常仅上限g (n )< c很重要,因为例如您已经知道该函数为正。但是,一般而言,您必须注意下界g (n )> − c。g(n)<cg(n)>−c

这意味着,与更典型的big-oh表示法用法相反,功能下降得太快的函数可能无法记录在log O (1 ) n中;例如 1logO(1)nÑ =日志- (日志ñ)/(日志的日志Ñ)ñ∉日志Ô(1)ñ 因为 -日志Ñ

1n=log−(logn)/(loglogn)n∉logO(1)n
日志日志ñ ∉Ø(1) 在这里指数数量级的增长太快的有界Ô(1)。
−lognloglogn∉O(1)
O(1)

一个有点不同的排序的一个反是- 1 ∉ 日志Ô (1 ) ñ。−1∉logO(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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.