while循环的复杂性是什么?

时间:2017-01-12 15:31:42

标签: algorithm while-loop time-complexity big-o

我有以下代码。在那里,我必须以锯齿形方式打印矩阵

arr3 = [
[1,    2,   3,   4],
[5,    6,   7,   8],
['a', 'b', 'c', 'd'],
['X', 'Y', 'Z', 'N']
]

def zigZagMatrix(arr, n, m):
    i_prev = 0
    j_prev = 0
    i = 0
    j = 0
    done = False
    while not done:
        while i >= 0 and j < m:
            print(arr[i][j])
            i -= 1
            j += 1

        if i == n-1 and j > m-1:
            done = True

        i_prev += 1
        if i < n-1 and i_prev < n:
            j = 0
        else:
            j_prev += 1
            j = j_prev
        if i_prev >= n:
            i = n - 1
        else:
            i = i_prev


zigZagMatrix(arr3, 4, 4)

对我来说它看起来像O(n),因为我们必须遍历整个数组,但还有另一个while loop运行until the condition fails。 所以,我真的很困惑。是否为O(n) or O(n) + O(m) or something else

1 个答案:

答案 0 :(得分:1)

假设代码是正确的并且矩阵的每个元素都被打印一次,那么double while循环的复杂性就是打印的元素数量。因为您有一个n×m矩阵,所以要打印n×m个元素。这意味着复杂性为O(n×m)

但是,我已经测试了代码,它似乎永远不会达到停止状态。该程序只是永远迭代。这意味着,在其当前版本中,未定义复杂性。如果有的话,它将是无限的。