我有以下代码。在那里,我必须以锯齿形方式打印矩阵
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
答案 0 :(得分:1)
假设代码是正确的并且矩阵的每个元素都被打印一次,那么double while循环的复杂性就是打印的元素数量。因为您有一个n×m矩阵,所以要打印n×m个元素。这意味着复杂性为O(n×m)
。
但是,我已经测试了代码,它似乎永远不会达到停止状态。该程序只是永远迭代。这意味着,在其当前版本中,未定义复杂性。如果有的话,它将是无限的。