Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.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
时间复杂度:While循环与嵌套for循环[java]_Java_Time Complexity - Fatal编程技术网

时间复杂度:While循环与嵌套for循环[java]

时间复杂度:While循环与嵌套for循环[java],java,time-complexity,Java,Time Complexity,所以我刚开始学习时间复杂性,我对它有点“okayish”的理解,但是我对如何处理这个代码段有点困惑。 我读过其他的帖子,但我只是很难理解一些东西,除非有人把我要说的话给毁了。有点像一记耳光 public int example(int[] array) { int result = 15; int i = array.length; while(i > 1) { for(int x = 0; x < array.length;x++)

所以我刚开始学习时间复杂性,我对它有点“okayish”的理解,但是我对如何处理这个代码段有点困惑。 我读过其他的帖子,但我只是很难理解一些东西,除非有人把我要说的话给毁了。有点像一记耳光

public int example(int[] array) {

    int result = 15;
    int i = array.length;

    while(i > 1)
    {
      for(int x = 0; x < array.length;x++)
      {
        result+= 1;
        result+=2*array[x];
      }
      i = i/2; 
    }
return result;
}
public int示例(int[]数组){
int结果=15;
int i=数组长度;
同时(i>1)
{
for(int x=0;x
好的,我只计算算术运算。 从我的信仰来看,如果我错了,请纠正我(可能是错的)

x++发生n次

结果+=1发生n次

结果+=3*数组[x]发生2n次

总共4n

i=i/2发生logn


那么正确的等式是4nlogn

您使用
4n*log(n)
的方法是正确的。但是,请注意,对于较大的O时间复杂性,常量被删除,因此这将是
O(n*log(n))

由于大O定义,常数被删除:
f(x)
is
O(g(x))
if
f(z)一些数字。这里的关键是
c
,它可以是任何常数。即使你的
f(x)
100x
,你仍然可以拥有
c=200
g(x)


作为旁注,因为我们可以计算出常数,所以在计算大O时间复杂度时,您不必计算每个操作。您只需查看循环即可。一个发生次数
n
次,另一个
log(n)
次。所以它是
O(n*log(n))
。代码可以在每个循环中执行1000个操作,也可以执行2个。因为常数是从大O方程中计算出来的,所以这个数字并不重要。只有循环的数量和性质才是正确的。

使用
4n*log(n)
您就在正确的轨道上了。但是,请注意,对于较大的O时间复杂性,常量被删除,因此这将是
O(n*log(n))

由于大O定义,常数被删除:
f(x)
is
O(g(x))
if
f(z)一些数字。这里的关键是
c
,它可以是任何常数。即使你的
f(x)
100x
,你仍然可以拥有
c=200
g(x)


作为旁注,因为我们可以计算出常数,所以在计算大O时间复杂度时,您不必计算每个操作。您只需查看循环即可。一个发生次数
n
次,另一个
log(n)
次。所以它是
O(n*log(n))
。代码可以在每个循环中执行1000个操作,也可以执行2个。因为常数是从大O方程中计算出来的,所以这个数字并不重要。只有循环的数量和性质才是如此。

为什么你认为循环中的第二条语句执行的次数是前一条语句的两倍?我假设是因为发生了两次算术运算,但我猜它也发生了n次?我现在明白你的逻辑了。为什么你认为循环中的第二条语句执行的次数是前一条语句的两倍很多次是之前的吗?我假设是因为2个算术运算正在发生,但我猜它也只发生了n次?我现在明白你的逻辑了。结果+=2*数组[x]是2n次而不是n次吗?结果+=2*数组[x]是2n次而不是n次吗?