我完全理解大符号的含义。我的问题是,当我们说,其中是大小为输入上算法的运行时间。
我了解它的语义。但是和是两回事。
是一个精确的数字,但是不是一个产生数字的函数,因此从技术上讲我们不能说 等于 。您 O (f (n ()))的值是多少,答案是什么?没有答案。
我完全理解大符号的含义。我的问题是,当我们说,其中是大小为输入上算法的运行时间。
我了解它的语义。但是和是两回事。
是一个精确的数字,但是不是一个产生数字的函数,因此从技术上讲我们不能说 等于 。您 O (f (n ()))的值是多少,答案是什么?没有答案。
Answers:
严格来说,是一组函数。因此值只是所有函数的集合,这些函数渐近地增长的速度不快于。符号仅仅是写入一个常规方式。
请注意,这也阐明了表示法的一些注意事项。例如,我们写,但我们从未写。引用Donald Knuth(计算机编程艺术,1.2.11.1):
最重要的考虑是单向平等的思想。[...]如果和是涉及符号的公式,则符号表示由被包含在由表示的组。β (Ñ )
是一个函数
我建议不要写,但是意见不一。
正式地说,被一组函数使得对于某一常数和所有足够大 。因此,写入它的最准确迂腐方法是。然而,使用代替 是完全标准,和只是意味着。从本质上讲,这永远不会模棱两可,因为我们几乎永远不会操纵集合。
在某种意义上,使用相等使得平均“的一些功能使得表示所有足够大的 “,这意味着您可以编写。请注意,这比更精确 Θ (n )或。
序言:大表示法是一些表示法的强大和含糊不清的经典示例,它是人类心灵喜爱的语言的一部分。不管它造成了多少混乱,仍然要通过符号来传达我们可以轻松识别并有效同意的想法。
我完全理解大符号的含义。我的问题是,当我们说,其中是大小为输入上算法的运行时间。
抱歉,如果您理解大表示法的含义,就不会有问题。
我了解它的语义。但是和是两回事。是一个精确的数字,但是不是一个产生数字的函数,因此从技术上讲我们不能说 等于 。你有什么价值的,您的答案是什么?没有答案。
重要的是语义。重要的是,人们如何能够(容易)就其精确的解释(其中之一)描述我们感兴趣的渐近行为或时间或空间复杂性。默认的精确解释/定义是Wikipedia的翻译,
是实数值或复数值函数,是实数值函数,都定义在实正数的一些无穷子集上,因此对于所有足够大的 n值,都是正。对于所有足够大的值,的绝对值最多为的正常数倍。也就是说,存在一个正实数和一个实数使得
请注意,此解释被认为是定义。所有其他的解释和理解(可能会以各种方式极大地帮助您)是次要的和必然的。每个人(嗯,至少这里的每个回答者)都同意这种解释/定义/语义。只要您能运用这种解释,您大多数时候就可能很不错。放松并保持舒适。您不想考虑太多,就像您不想考虑英语,法语或大多数自然语言的某些不规则性一样。只需使用该定义的符号即可。
是一个精确的数字,但是不是一个产生数字的函数,因此从技术上讲我们不能说 等于 。您 O (f (n ()))的值是多少,答案是什么?没有答案。
的确,因为这个问题是不恰当的,所以没有答案。并不代表确切数字。其目的是代表他的名字是一个函数,其形式参数为(这是有点界,在)。如果我们写这同样正确,甚至更正确。如果是将映射到的函数,而是将映射到n 3的函数 ,通常写或。另请注意,定义并未说明是否为函数。但这并不是说左手边应该等于右手边!您有理由怀疑等号并不意味着一般意义上的平等,您可以在其中切换等式的两面,并且应该以等价关系作为后盾。(另一个更著名的滥用等号的例子是在大多数编程语言中使用等号来表示赋值,而不是:=
像某些语言那样麻烦)。
如果我们仅关注一个平等(我也开始滥用语言。这不是平等;但是,这是平等,因为符号中包含等号或可以将其解释为某种平等),,这个答案就完成了。
但是,这个问题实际上还在继续。例如,什么意思?上面的定义未涵盖这种平等。我们要介绍另一个约定,即占位符约定。这是Wikipedia中所述的占位符约定的完整说明。
在更复杂的用法中,可以出现在方程式的不同位置,甚至在每一侧都出现几次。例如,对于,以下条件成立。
这些语句的含义如下:对于左侧满足每个任何函数,右侧都有一些满足每个的函数,这样将所有这些函数代入方程式就可以双方平等。例如,上面的第三个方程表示:“对于任何函数,都有一些函数使得。”
您可能需要在此处查看实际使用的占位符约定的另一个示例。
您现在可能已经注意到,我还没有使用大表示法的集合理论解释。我所做的只是为了显示,即使没有诸如“ 是一组函数”之类的集合论解释,我们仍然可以完全而完美地理解大的表示法。如果您发现以集合论为基础的解释很有用,请继续进行。
您可以检查CLRS的“渐近符号”部分中有关渐进行为符号系列的更详细的分析和使用模式,例如大,,小,小,多变量用法等。在维基百科条目也是一个不错的参考。
在算法设计手册 [1]中,您可以找到有关此问题的段落:
比较函数时,Big Oh表示法(包括,和)提供了一个大致的相等概念。看到类似的表达式有些令人不快,但始终可以通过按上下限返回定义来解决其含义。将“ =”读为“ 其中一个功能 ”可能是最有启发性的。显然,是的函数之一。
严格来说(如David Richerby的评论所述),为您提供了一个大致的相等概念,为了一个小于或等于的粗略概念,以及一个和大于或等于的粗略概念。 。
但是,我同意Vincenzo的回答:您可以简单地将为一组函数,将=符号解释为一组隶属度符号。
[1] Skiena,SS《算法设计手册》(第二版)。施普林格(2008)
我在stackoverflow上进行了研究;尽管上面已经说明了对OP的最正确答案(等价类,在下面重述为#1),但这是一个完整的答案:
(某些集合可能无法比拟; DAG;有关有趣的示例,请参见多项式层次结构)。
f X g
。不过,我们永远都不会写下来……因为这有点愚蠢。但是我认为,以这种方式考虑可能是合理的,并且将保留平等的概念。(在这里我要对负号进行适当的处理,这可能很重要。)