首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在算法时间复杂度上,总是O(1)优于O(n)?

在算法时间复杂度上,总是O(1)优于O(n)?
EN

Stack Overflow用户
提问于 2019-12-05 14:14:04
回答 2查看 1.1K关注 0票数 2

我在问如果我有一个算法需要O(100) -> O(1)时间复杂度,我有一个算法需要O(n)来解决,但是如果我知道它的最大值是50,那么我可以决定最坏的情况是O(50),所以在这样的情况下,O(1)算法或第二个O(n)算法是最好的选择?因此,如果是第二个,我们是否总是可以告诉O(1)比O(n)更好?

EN

回答 2

Stack Overflow用户

发布于 2019-12-05 15:54:47

当然,不是;并不总是这样。大O只是一种渐近行为,这就是为什么

代码语言:javascript
复制
O(1) == O(0.001) == O(50) == O(100) == O(C) # where C is any positive constant

O(n)也是如此

代码语言:javascript
复制
O(n) == O(0.001n) == O(100n) == O(C * n)    # where C is any positive constant

想象两个带定时的算法

代码语言:javascript
复制
t1 = 1e100 (seconds) = O(1)
t2 = n     (seconds) = O(n)

对于无限的n (渐近行为),第一种算法比第二种算法更好,但对于所有现实世界的情况(小n),t2更可取。仅仅伸缩是不够的:

代码语言:javascript
复制
t1 = 1000               (seconds)
t2 = 100 * n            (seconds)
t3 = n + 1e100 * log(n) (seconds)

算法3具有更好的伸缩性(1100n100 * n),但1e100 * log(n) term使其无法在现实世界中完成。

因此,在一般情况下,应该比较函数而不是O

代码语言:javascript
复制
t1 = 100 (seconds)
t2 = n   (seconds)

在这里,如果是n <= 50,那么t2是更好的选择(而对于n > 1000,我们有完全相反的选择)

票数 4
EN

Stack Overflow用户

发布于 2019-12-06 01:30:21

两种算法:

代码语言:javascript
复制
100n -> O(n)

10n² -> O(n²)

当n< 10时,二次时间算法更好。当n> 10时,线性时间算法更好。

还有一些实际的用例。快速排序算法(avg: O(n log(N)通常在给定数据集合足够小的情况下使用插入排序(avg: O(n²))。

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

https://stackoverflow.com/questions/59189272

复制
相关文章

相似问题

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