算法复杂度

发布于 2024-11-03 14:55:53 字数 172 浏览 1 评论 0原文

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

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

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

Finding intersection of two arrays can be done if you sort the 2 arrays and then do a linear step through to record the common elements.
This would take O(nlogn) + O(nlogn) + O(n)

Alternatively, you could compare each element in the first array with each element in the second array and you would get a O(n^2) run-time complexity.

How can I prove the first approach is better than the second?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

仄言 2024-11-10 14:55:53

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

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

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

<代码>|f(x)| <= c*|g(x)|

通过设置f=nlogng=nlogn+nlogn+n,可以得出f 是在 O(g) 中,因此 O(nlogn) == O(nlogn + nlogn + n)

First of all, O(nlogn) + O(nlogn) + O(n) doesn't make much sense, since O(f) is a set, not a number.

What you mean is O(nlogn + nlogn + n), which can be shown to be equal to O(nlogn). Just look at what it means for a function f to belong to the set O(g):

f is an element of O(g) iff there exists c>0 and x0 such that for all x>x0:

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

By setting f=nlogn and g=nlogn+nlogn+n, it follows that f is in O(g), and hence that O(nlogn) == O(nlogn + nlogn + n).

清晰传感 2024-11-10 14:55:53

重要的是要记住,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)

It's important to remember that Big-O notation is the "worst case" run-time meaning that you are iterating over an array that is crushingly large.

O(N) + O(N) is equivalent to O(2N) which is equivalent to O(N)

Thus, O(nlogn) + O(nlogn) + O(n) is merely O(nlogn)

O(nlogn) < O(n^2)

宫墨修音 2024-11-10 14:55:53

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

O(nlogn) < c*nlogn

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

c*nlogn < d*(n^2)

logn logn d/c*n

您可以通过多种方式证明存在一个 N,其中 logn < d/c*n 始终为真。

你甚至可以画出来。

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

O(nlogn) < c*nlogn

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

c*nlogn < d*(n^2)

logn < d/c*n

You can prove in many ways that there's an N where logn < d/c*n is always true.

You could even draw it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文