Time complexity 查找以下代码的运行时间 公共静态int循环(int n){ int j=1; int n2=n; 对于(int i=0;i

Time complexity 查找以下代码的运行时间 公共静态int循环(int n){ int j=1; int n2=n; 对于(int i=0;i,time-complexity,complexity-theory,Time Complexity,Complexity Theory,大家好,我在计算上述代码的时间复杂度时遇到了一些困难 以下是我目前掌握的情况: 当i=0时,执行内部循环:(5/7)*n 当i=1时,执行内部循环:(5/7)^2*n 当i=n时,执行内部循环:(5/7)^(n+1)*n 把它们加起来,我得到O(n*(5/7)^n)。这是准确的分析吗?你的结论不正确;事实上,当0

大家好,我在计算上述代码的时间复杂度时遇到了一些困难

以下是我目前掌握的情况:

当i=0时,执行内部循环:(5/7)*n

当i=1时,执行内部循环:(5/7)^2*n

当i=n时,执行内部循环:(5/7)^(n+1)*n


把它们加起来,我得到O(n*(5/7)^n)。这是准确的分析吗?

你的结论不正确;事实上,当0
在你的算法中,r=5/7,但为了可读性,我会在这个答案中继续写r。求和这些项的公式给出的结果类似于n*r*(rn+1-1)/(r-1)。r的额外因子是因为序列不是从1*n开始的。我们需要小心简化此公式,因为抱歉,我意识到我省略了n项谢谢!结果证明我有完整的表达式5/2*n*(1-r^(n+1))。只是我错误地去掉了(5/2)n项,因为有一个具有指数幂的项。作为旁注:是否存在r<1的O(r^n)算法?由于算法必须执行整数次运算,对于足够大的n,小于r^n的常数倍数的唯一整数是0。因此,该算法必须对所有输入进行0运算,即实际上什么都不做;它甚至不能看n并决定对大n不做任何事情,因为比较需要超过0次运算。啊,这是有道理的。再次感谢你的帮助。
public static int loop(int n){
  int j = 1;
  int n2 = n;
  for (int i = 0; i < n; i++) {
    n2 *= 5.0/7.0;
      for (int k = 0; k < n2; k++) {
        System.out.println("Hello.");
      }
    }
  return j;
}