首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >O(mn)比O((m+n)^2)好吗?

O(mn)比O((m+n)^2)好吗?
EN

Stack Overflow用户
提问于 2021-07-27 10:45:15
回答 3查看 200关注 0票数 2

算法的输入是mn

我的算法的时间复杂度被证明是O(mn)

我有一个基准算法,它的时间复杂度为O((m+n)²)

在时间复杂度方面,我的实现是否比基准更好?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-07-27 11:09:06

因此,许多评论者和答复者只想考虑m = n时的情况,或者至少当他们与常量因素相关时。这不是这样的。

当我们保持mn常数时,您的算法显然更快;例如,如果我们将自己局限于情况m = 1,那么算法的复杂性是O(n),而替代方法是O(n^2),因此在这种受限情况下,您的算法显然更好。

我们可以说的是,(m+n)^2 = m^2 + n^2 + 2mn显然是Ω(mn)Ω的意思是这是一个下界,而您的算法总是(渐近的)至少是一样好的;也就是说,没有限制的情况下,其他算法的渐近性优于您的算法。但我们确实知道,在某些情况下,你的情况更好。所以,总的来说,你的更好。

票数 6
EN

Stack Overflow用户

发布于 2021-07-27 10:48:25

是的,你的实现更好。回想一下(m+n)^2 = m^2 + n^2 + 2mn,so (m+n)^2 > mn

票数 0
EN

Stack Overflow用户

发布于 2021-07-27 10:57:47

O(mn)并非在所有情况下都优于O((m+n)²)

看看这个案子:

O((m+n)²) = O(mn) if m=O(n)

对于m=O(n),be可以引入一个新变量(c:= max(n,m))

代码语言:javascript
运行
复制
O((m+n)²) = O(m² + 2mn + n²) 
           = O(c² + 2cc + c²=
           = O( 3* c²)
           = O(c²)

O(mn)      = O(cc) = O(c²)

因此,在n和m仅差一个常数的情况下,这两个复杂性是相同的。

正如注释中所提到的,如果不是,则是 m=O(n)

O(mn)O(n²) > O(nm)O(m²) > O(mn)更好。

My Fazit:取决于您对“更好”的定义,您可以说:

O(mn)从来没有比O((m+n)²)更糟糕

O(mn)O((m+n)²)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68543485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档