是什么意思?


44

这是一个基本问题,但是我认为与,因为在我们趋于无穷大时,较大的项应该起主导作用?同样,这将不同于O(\ min(m,n))。那正确吗?我一直看到这种表示法,尤其是在讨论图形算法时。例如,您通常会看到:O(| V | + | E |)(例如,参见此处)。O(m+n)O(max(m,n))O(min(m,n))O(|V|+|E|)


也许m取决于n
Andrew

Answers:


33

你是对的。请注意,术语O(n+m)略微滥用了经典的big-O符号,该符号是为一个变量中的函数定义的。但是,对于多个变量有自然的扩展

简而言之,由于

12(m+n)max{m,n}m+n2max{m,n},
您可以推断出O(n+m)O(max{m,n})是等效的渐近上界。

另一方面, O(n+m)O(min{n,m}),因为如果设置n=2m,则会得到

O(2m+m)=O(2m)O(m)=O(min{2m,m}).

3
我认为值得注意的是,他们以抽象的形式写道:“我们表明,不可能以暗示算法分析中常用属性的方式为多个变量定义函数的big-O表示法。我们还证明了常用定义即使big-O表示法中的函数严格限制为不递减,也不表示这些属性。”
拉斐尔

4
作为我上述评论的后续内容,K。Rutanen(2015)最近发表的文章“用于算法分析的O表示的一般定义” 的确显示了如何为通用集(包括)定义有意义的O表示。。N2
拉斐尔

25

信不信由你,以我的经验,似乎很多算法人员实际上并未考虑过大O表示形式的含义,当被问到这个问题时,您会得到几个不同的答案。Rodney R. Howell 在《关于具有多个变量渐近符号》一文中讨论了一些问题。

奇怪的是,似乎大多数入门算法课程都花大量时间对带有单个变量的O表示法进行非常正式的介绍,然后接下来的几周愉快地对带有多个变量的图算法使用该表示法,而不用讨论什么。符号实际上是指。


我的答案中的链接引用的是Howell的文章,对于这个问题确实是一种不错的选择。
A.Schulz

1
@ A.Schulz:确实,我正在同时向您输入答案。
Kristoffer Arnsfelt Hansen 2012年

1
我赞成对Landau的条款保持谨慎,因此我同意,但这包含了太多好的答案。
拉斐尔

4
@Raphael:答案并非as之以鼻,但也许可以用更准确的措词来表达。问题是,基本上,问题是,具有多个参数的大O的含义是什么。答案是,这应该意味着无论在算法社区中有什么共识,在算法课程中所教的内容,等等。我的观点是,对于该符号的确切含义似乎没有如此共识。
Kristoffer Arnsfelt Hansen 2012年
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.