好的,所以我今天晚些时候有一个中期,我正在审查的其中一个项目是大O.现在,我在当天做了功课,得到了100%....但我现在找不到它,我不确定我在做什么。 Sooo可以有人给我一个关于我做错了什么的解释......如果我做得对......好吧也许你知道我为什么怀疑自己? 谢谢!
另外,我记得在做作业之前我正在使用总结,我会从内到外工作。当我完成每个求和时,我使用了一些“forumla”来计算最高n,然后保持该值并继续下一个求和,依此类推,直到总结完成为止。
问题1.
sum = 0;
for (i = 0; i < n; i++)
sum++;
所以,因为我忘记了这个的总和方面,我的直觉告诉我这是O(N),因为最大运行时间是N次......因为它只是一个用于循环。
问题2。
sum = 0;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
sum++;
对于这个,我“认为”对于最高运行时间它是O(N ^ 2),因为两个循环都依赖于n,并且它可以在每个if循环的N * N处最大化。
问题3。
sum = 0;
for (i = 0; i < n; i++)
for (j = 0; j < n * n; j++)
sum++;
这就是我被卡住的地方......我觉得我实际上需要使用求和布局以及添加它们的公式。最内部的循环可以在n * n处最大化,因此n ^ 2。最重要的是,它可以在最外面的循环中再次最大化N ...所以我猜0(N ^ 3)。
问题4。
sum = 0;
for (i = 0; i < n; i++)
for (j = 0; j < i; j++)
sum++;
同样,我在这一点上更加迷失。内循环可以最大化i次...然而,这依赖于i,这依赖于N ....所以...我看到三个最大化的变量,我确实不确定如何比较它们以找到最大化运行。 (我真的需要记住求和设置和公式)。
同样适用于下一个问题,不知道从哪里开始,我宁愿不尝试,因为我不想在脑子里弄错思路。我很肯定,一旦我再次看到这个公式,它会立即点击,因为我之前得到了它......我只是以某种方式失去了它。 任何帮助表示赞赏!
问题5:
sum = 0;
for (i = 0; i < n; i++)
for (j = 0; j < i * i; j++)
for (k = 0; k < j; k++)
sum++;
问题6:
sum = 0;
for (i = 1; i < n; i++)
for (j = 1; j < i * i; j++)
if (j % i == 0)
for (k = 0; k < j; k++)
sum++;
答案 0 :(得分:0)
对于问题4到6,我认为i j和k都是整数,不像n是变量。我将如何处理这些问题:
e.g。问题4
内部循环 - 从0到(i-1)的迭代,它给出了迭代次数。
外部循环 - n总结
组合 - O(i * n)= O(n),因为i是整数。