一个循环中写2个循环的时间复杂度是多少

时间:2019-06-08 10:45:35

标签: javascript for-loop time-complexity

嗨,我只是在想如果我像下面给出的那样编写for循环,那么它的时间复杂度是多少。它会是o(n ^ 2)或只是o(n)

for(var i=0,j=0;i<arr1.length || j<arr2.length;i++,j++)
{
    //some code here
}

2 个答案:

答案 0 :(得分:6)

时间复杂度为 O(max(m,n)) ,其中 m n 的大小分别为^Up::SendInput,!{Up} function arraysUnequal(a1, a2) { let result = []; let maxindex = (a1.length > a2.length) ? a1.length : a2.length; for (let i = 0; i < maxindex; i++) { if (!objectsEqual(a1[i]||{}, a2[i]||{})) { result.push(i) } } return result; }

在您的arr1循环中,您会在循环后同时递增arr2for。如果同时使用ij,则for循环将停止。由于i >= arr1.lengthj >= arr2.length始终具有相同的值(增量ij之间的时刻除外),因此如果i和{{ 1}}已到达其相应列表的末尾。

我们在这里假设递增ji是在恒定时间内进行的(对于非常大的数字, O(b) b 具有任意大小的数字的位数),并且j循环的 body 也仅包含恒定时间运行的指令。

答案 1 :(得分:5)

假设//some code here中没有其他循环,则时间复杂度为O(N),因为该循环会在i<arr1.lengthj<arr2.length以及{ {1}}和i在每次迭代中递增。它将运行j个迭代。

对于

Math.max(arr1.length, arr2.length)

要成为i<arr1.length || j<arr2.length (因此无需再进行迭代),就需要

false