while 循环的复杂度是多少?
What is the complexity of a while loop?
我有以下 code.Where,我必须以之字形方式打印矩阵
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
假设代码正确并且矩阵的每个元素都打印一次,那么双 while 循环的复杂度就是打印的元素数。因为你有一个 n×m 矩阵,所以你有 n×m 个元素要打印。这意味着复杂度为 O(n×m)
.
但是,我已经测试了代码,它似乎永远不会达到停止条件。该程序一直在不断迭代。这意味着,在其当前版本中,复杂性未定义。如果有的话,那将是无限的。
我有以下 code.Where,我必须以之字形方式打印矩阵
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
假设代码正确并且矩阵的每个元素都打印一次,那么双 while 循环的复杂度就是打印的元素数。因为你有一个 n×m 矩阵,所以你有 n×m 个元素要打印。这意味着复杂度为 O(n×m)
.
但是,我已经测试了代码,它似乎永远不会达到停止条件。该程序一直在不断迭代。这意味着,在其当前版本中,复杂性未定义。如果有的话,那将是无限的。