Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 算法时间要求_Java_Algorithm - Fatal编程技术网

Java 算法时间要求

Java 算法时间要求,java,algorithm,Java,Algorithm,我相信下面代码O(n^3)的顺序正确吗 for ( i = 1, sum = 0; i <= N; i++ ) { for ( j = 1; j <= i; j++ ) { sum++; } } for(i=1,sum=0;iNo。它是O(n2)。正如你正确地注意到的,内环是N,外环是N-加起来就是n2。也就是说,对于N3,你可以添加另一个内环 for ( i = 1, sum = 0; i <= N; i++ ) { for ( j = 1;

我相信下面代码O(n^3)的顺序正确吗

for ( i = 1, sum = 0; i <= N; i++ ) {
   for ( j = 1; j <= i; j++ ) {
      sum++; 
   }
}
for(i=1,sum=0;iNo。它是O(n2)。正如你正确地注意到的,内环是N,外环是N-加起来就是n2。也就是说,对于N3,你可以添加另一个内环

for ( i = 1, sum = 0; i <= N; i++ ) {
  for ( j = 1; j <= i; j++ ) {
    for ( t = 1; t <= j, t++ ) {
      sum++; 
    }
  }
}
对于(i=1,sum=0;i你实际上会得到O(n^2)

简化方法:两个循环,每个循环的倍数为N。因此为O(N^2)

正常方式:两个循环,分别循环n次和n/2次。这就是O(n^2)中的n^2/2

所以你得到N*N^2=N^3,或者至少我怀疑

N乘以N^2没有逻辑依据

复杂性基本上是计算步骤的数量的总和,即执行的指令或基本语句。因此,要“按书”进行计算,您需要:

  • 分析每条语句,给出执行的次数
  • 把它们全部加起来,在
    N
    上给你一个函数,最后
  • 通过识别当N趋于无穷大时占主导地位的项,将其转换为大O符号
一旦你掌握了窍门,你可以走合乎逻辑的捷径。但是你需要先了解你在做什么……否则你的捷径很可能是无效的


以下是对您的示例的逐书分析:

  • 在语句#1中,循环执行
    N-1次
  • 这意味着在语句#2中,循环被执行
    (N-1)*N/2次
  • 这意味着语句#3被执行
    (N-1)*N/2次
把这些加起来,你会得到这样的结果(具体取决于你数多少…)

然后我们确定占主导地位的术语…为
N^2
…我们得到
O(N^2)


请注意,如果
F(N),则对大O复杂度没有任何影响
N^2
2N^2
…或者如果低阶项是小的或大的。大O复杂度将是相同的。但是,它确实关系到算法的可测量性能,这非常重要。

在“大Oh”之后停止在你的第一段中,你说对了。你的和中的N项来自外循环的N次迭代,所以不要将和乘以N。祝你好运!@PaulF Ah,我现在明白了。非常感谢!谢谢,我想我只是误解了你在使用Big-Oh时所寻找的东西。这澄清了书中的许多其他例子,谢谢!
 F(N) = N - 1 + ((N - 1) * N) / 2 + ((N - 1) * N) / 2
      = N - 1 + ((N - 1) * N)
      = N - 1 + N^2 - N
      = N^2 - 1