首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >算法复杂度

算法复杂度
EN

Stack Overflow用户
提问于 2011-04-27 03:34:48
回答 3查看 261关注 0票数 0

如果您对两个数组进行排序,然后执行线性单步执行以记录公共元素,则可以找到两个数组的交集。这需要O(nlogn) + O(nlogn) + O(n)

或者,您可以将第一个数组中的每个元素与第二个数组中的每个元素进行比较,得到的运行时复杂度为O(n^2)。

我如何证明第一种方法比第二种方法更好呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-27 04:04:06

首先,O(nlogn) + O(nlogn) + O(n)没有多大意义,因为O(f)是一个集合,而不是一个数字。

您的意思是O(nlogn + nlogn + n),可以证明它等于O(nlogn)。只需看看属于集合O(g)的函数f意味着什么

fO(g)的一个元素当且仅当存在c>0x0,使得对于所有的x>x0

|f(x)| <= c*|g(x)|

通过设置f=nlogng=nlogn+nlogn+n,可以确定fO(g)中,因此也就是O(nlogn) == O(nlogn + nlogn + n)

票数 2
EN

Stack Overflow用户

发布于 2011-04-27 03:39:50

重要的是要记住,Big-O表示法是“最坏情况”的运行时,这意味着您正在迭代一个非常大的数组。

O(N) + O(N)等价于O(2N),O(2N)等价于O(N)

因此,O(nlogn) + O(nlogn) + O(n)仅仅是O(nlogn)。

O(nlogn) < O(n^2)

票数 0
EN

Stack Overflow用户

发布于 2011-04-27 03:54:04

O(nlogn) + O(nlogn) + O(n) = O(nlogn)

O(nlogn) < c*nlogn

O(n^2) < d*(n^2)

c*nlogn < d*(n^2)

登录< d/c*n

你可以用很多方法证明存在一个N,其中logn < d/c*n总是真的。

你甚至可以画出来。

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

https://stackoverflow.com/questions/5795481

复制
相关文章

相似问题

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