java:这个 do-while 代码片段的大哦顺序?加上严格的上限

标签 java big-o upperbound

我知道这很容易,但我的教科书没有讨论带有 do-while 循环的 Big-Oh 顺序,我的任何其他算法源也没有讨论。

此问题指出以下代码片段在变量“n”上参数化,并且还需要严格的上限。

int i=0, j=0;

do {

    do {

          System.out.println("...looping...");  //growth should be measured in calls to println. 

          j=j+5;

       } while (j < n);

    i++;

    j = 0;

} while (i < n);

任何人都可以帮我解决这个问题并用 do-while 循环解释 Big-Oh 顺序吗?它们与 for 循环一样吗?

最佳答案

使用嵌套循环和大 O 的一个很好的格言是

"When in doubt, work from the inside out!"

这是您发布的代码:

int i=0, j=0;
do {
    do {
          Do something
          j=j+5;
    } while (j < n);
    i++;
    j = 0;
} while (i < n);

让我们看看那个内部循环。它大约运行 n/5 次,因为 j 从 0 开始,每一步增长 5。 (我们还看到,在循环开始之前,无论是在循环之外还是在内部循环结束时,j 总是重置回 0)。因此,我们可以用基本上表示“执行我们关心的 θ(n) 操作”的内容替换该内部循环,如下所示:

int i=0;
do {
    do Θ(n) operations that we care about;
    i++;
} while (i < n);

现在我们只需要看看它做了多少工作。请注意,这将循环 θ(n) 次,因为 i 数到 0、1、2、...,直到 n。最终效果是该循环运行 θ(n) 次,并且由于我们在每次迭代中执行我们关心的 θ(n) 次操作,因此最终效果是执行 θ(n2 )您尝试计数的打印输出。

关于java:这个 do-while 代码片段的大哦顺序?加上严格的上限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41668021/

相关文章:

c++ - 如何检查 map::lower_bound 失败?

algorithm - 了解背包上界

VS Code 上的 Java Azure Function,如何引用和使用外部 jar 库

java - java小程序可以保存文件吗?

java - 在 TestNG 和 Gradle 中包含(不排除)组

c - 当有两个独立的 for 循环时如何找到大 O

java - 中位数中位数的奇怪错误作为找到第 K 个最大元素的枢轴

java - R:让繁琐的 Java 进程进入 STFU

parsing - 确定性上下文无关语法与上下文无关语法?

algorithm - 寻找 f(n) 的上限