正确的时间复杂度是多少?

时间:2018-12-12 23:11:48

标签: java arrays big-o

我正在编写一种将n * n矩阵转换为单个数组的算法。

1 2 3

4 5 6

7 8 9

= [1, 2, 3, 4, 5, 6, 7, 8, 9]

如果我做的是O(n 2 )或O(n 3 ),我会感到困惑:

public int[] mergeMatrix(int[][] matrix) {
    List<Integer> tempList = new ArrayList<>();
    for (int[] array : matrix) {
        for (int i : array) {
            tempList.add(i);
        }
    }
    int totalLength = tempList.size();
    int[] mergedArray = new int[totalLength];
    for (int i = 0; i < tempList.size(); i++) {
        mergedArray[i] = tempList.get(i);
    }
    return mergedArray;
}

应该是O(n 2 ),因为这是算法处理过程中最长的最坏情况,还是O(n 3 ),因为O(n) + O(n 2 )= O(n 3 )?

1 个答案:

答案 0 :(得分:2)

其运行时复杂度为O(nm),其中n是行数,m是矩阵中的列数。

原因:

  • 您只对矩阵总数中的每个元素执行一项操作,该操作受您拥有的行数和列数的约束。

n = m的上下文中,这将是O(n * n)或O(n 2 ),但只有

这里的循环次数并不重要,因为您可以使用它进行花哨的迭代。请确保查看您在循环中实际执行的操作;由于它们是线性的,由于嵌套的性质,我希望运行时是线性运行时乘以线性运行时。