java - 如何计算循环中的操作次数并给出 theta 表征

标签 java count

我只是想确定我这样做是否正确。我正在尝试计算在 java 中最坏情况下执行的操作数

int sum = 0;
    for (int i = 0; i < n; i++ )
    sum++;

操作次数是2+3n还是3+3n?

我通过计算“2”的 int sum = 0 和 int i = 0 以及“3n”的 i < n、i++ 和 sum++ 得到了答案。或者它是 3 而不是 2,因为我必须在循环之前计算 i < n?

但无论哪种方式,theta 表征都会是 Θ(n) 吗?

现在如果有一个像这样的嵌套 for 循环会怎样:

int sum = 0;
    for (int i = 0; i < n; i++ )
        for (int a = 0; a < i; a++)
            sum++;

会是 3+n*(6a+2) = 6na+2n+3 吗?用 Θ(n^2)?

如果我将内部 for 循环从 a < i 更改为 a < i*i,方程式是否仍然像上面那样成立或发生变化?

最佳答案

如果每行只有一个语句,也许更容易计算每个语句的执行次数:

int sum = 0;     // 1 time
int i = 0;       // 1 time
while (i < n) {  // n+1 times
  sum++;         // n times
  i++;           // n times
}

因此,T(n) = 3*n+3 = Θ(n) .

int sum = 0;       // 1 time
int i = 0;         // 1 time
while (i < n) {    // n+1 times
  int a = 0;       // n times
  while (a < i) {  // 1 + 2 + ... + n = n*(n+1)/2 times
    sum++;         // 0 + 1 + ... + n-1 = n*(n-1)/2 times
    a++;           // 0 + 1 + ... + n-1 = n*(n-1)/2 times
  }
  i++;             // n times
}

因此,T(n) = 3*n+3 + n*(n-1) + n*(n+1)/2 = Θ(n^2) .

关于java - 如何计算循环中的操作次数并给出 theta 表征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817491/

相关文章:

java - Log4j 2 记录错误的附加程序

c - 如何计算 C 中数组中项目的实例?

java - 在java中使用线绘制圆

java - 如何在 JFrame 中手动设置面板内按钮的位置

sql - 使用ORDER BY选择COUNT(*)

MySQL,过滤但计数不同的值

count - 在Rails控制台中将Big Decimal转换为String

javascript - 我怎样才能得到数组的真实计数?

java - 由于 @tmp dir 导致 Jenkins 管道 DSL Maven 错误

java - 在屏幕上绘图 - Java