什么


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 hlogblahn(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)nkn0nn0f(n)logk1n=logkn

注意,log k n表示log n klog 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)2nknn0k=22logn=logO(1)nnlogn22lognlog2nnn

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


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

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

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

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

9

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

所以如果你发现

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

你要读

˚F Ñ = 日志Ñ ñ一些Ô 1 f(n)=logg(n)n1 gO(1).(1)

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

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

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

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


3
我想,是什么使得它Tick是X 登录Xñ 是单调的,充分满射每个固定ñ。单调使O的位置等效,为(2)⇒(1);反之,则要求g存在,如果f n 在函数范围之外,则g可能会失败。如果您想指出,四处移动O是危险的,并且不包含“野生”函数,那很好,但是在这种特定情况下,代表成本的函数是可以的。xlogx(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 2n log 5n log 99999n ...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 | < cg(n)O(1)cn|g(n)|<c

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

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

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

一个有点不同的排序的一个反是- 1 日志Ô 1 ñ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
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.