以下程序的时间复杂度是多少?

发布于 2024-12-27 14:34:28 字数 144 浏览 2 评论 0原文

以下程序的时间复杂度是多少?如何计算复杂度?复杂度的上限和下限是多少?

for(i=n;i<=n^2;i++)
   for(j=1;j<=i*log(i);j++)
      a[i][j]+=3*i*j;

what's the time complexity of the following program? How to calculate the complexity? What is the upper bound and lower bound of complexity?

for(i=n;i<=n^2;i++)
   for(j=1;j<=i*log(i);j++)
      a[i][j]+=3*i*j;

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

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

发布评论

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

评论(2

墨离汐 2025-01-03 14:34:28

在外循环中,您将从 n->n^2 开始,即 (n^2-n) 次迭代,即 O(n^2)。

在你的内部循环中,你将从 1->approx (n^2)log(n^2) 开始,即 O((n^2)log(n))

a[i][j] +=3*i*j; 是 O(1),所以你它没有贡献。

把它们放在一起,你有 O(n^2 * n^2 * log(n)),即 O(n^4 log(n))

In your outer loop, you're going from n->n^2, which is (n^2-n) iterations which is O(n^2).

In your inner loop, you're going from 1->approx (n^2)log(n^2) which is O((n^2)log(n))

a[i][j]+=3*i*j; is O(1), so you it doesn't contribute.

Putting it together, you have O(n^2 * n^2 * log(n)), which is O(n^4 log(n))

浅暮の光 2025-01-03 14:34:28

迈克的答案是正确的,只是以不同的方式扩展步骤

内部循环:const * i*log(i)
外循环:Sum(i over 1:n^2) of const * i * log(i)

O(algo) = O(Sum(i over 1:n^2) of i * log(i))

From http://en.wikipedia.org/wiki/Summation 我们发现

Sum (i over 1:m) of (i * log(i)) = Theta(m^2*log(m))

代入 m = n^2 我们得到

O(algo) = O(n^2)^2 log(n^ 2) = O(n^4)log(n) (消除 2)(实际上这是算法的 theta)

编辑:我刚刚注意到外循环是 i 超过 n:n^2,但是答案是相同的

Mike's answer is correct, just expanding steps in a different way

Inner loop : const * i*log(i)
Outer loop : Sum(i over 1:n^2) of const * i * log(i)

O(algo) = O(Sum(i over 1:n^2) of i * log(i))

From http://en.wikipedia.org/wiki/Summation we find out that

Sum (i over 1:m) of (i * log(i)) = Theta(m^2*log(m))

Substitute m = n^2 we get

O(algo) = O(n^2)^2 log(n^2) = O(n^4)log(n) (eliminate 2) (Actually that is theta of algo)

EDIT: I just noticed outer loop is i over n:n^2, however answer is same

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