繁体   English   中英

为什么这段带有两个for循环的代码没有O(N ^ 2)的Big O运行时?

[英]Why does this piece of code with two for-loops not have Big O runtime of O(N^2)?

我正在算法类中学习Big O表示法。 我刚刚在本周做了一个在线测验,我们得到了一堆代码块,我们必须选择大的O复杂度。

除了这个代码块,我得到了一切正确的:

void printPairs(int[] arrX, int[] arrY) {
    for(int i = 0; i < arrX.length; i++) {
        for(int j = 0; j < arrY.length; j++) {
            System.out.println(arrX[i] + "," + arrY[j]);
        }
    }
}

我输入O(N^2)但是我弄错了,我不知道为什么,有两个for循环? 不幸的是,直到本周末我才能看到其他可用选项或正确答案。

如果只有一个输入,即一个数组作为参数传递并在两个for循环中的每个循环中迭代,则运行时将为O(N²)

因为该方法有两个输入( arrXarrY ),并且两个输入都用于每个输入。

Big O运行时为O(XY) ,其中X = arrX.lengthY = arrY.length

编辑:@Oighea所述仍然是二次时间算法。 它只是两个变量。

考虑每个数组的元素数量,假设arrX有n个元素, arrY有m个元素。 第一次迭代是通过arrX完成的,因此仅关于第一个循环将具有O(n)的运行时间。 迭代arrY的内部循环具有m个元素,其运行时间为O(m) ,因为它为arrX每个元素迭代一次,整个方法的最差情况运行时为O(nm) 假设两个阵列具有相同长度的情况,该特殊情况将具有O(nm)的运行时间,其中n = m并且将使其为O(n ^ 2)

你的答案并非完全错误,但并不包括所有可能性,只有一个......

是的,你是对的。 有2个循环。 但每个循环遍历不同的数组。

因此,如果第一个数组的长度是= N ,如果第二个数组是= M ,那么最坏情况下的时间复杂度将是O(nm)

现在,如果两个数组的大小相同,n = m,那么O(nm= O(n ^ 2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM