有人能告诉我解决之字形遍历问题的时间复杂度吗[关闭]

Posted

技术标签:

【中文标题】有人能告诉我解决之字形遍历问题的时间复杂度吗[关闭]【英文标题】:Can someone tell me the time complexity of my solution to this problem of zigag traversal [closed] 【发布时间】:2021-04-13 14:50:15 【问题描述】:

之字折线遍历

这是算法专家提出的问题之一,这是我涉及数学的解决方案

def zigzagTraversal(arr):
out = []
test = 1
out.append(arr[0][0])
while test <= len(arr)+len(arr[0]):
    for j in range(len(arr[0])):
        for i in range(len(arr)):
            if test % 2 == 1:
                if i + j == test:
                    # print(arr[i][j])
                    out.append(arr[i][j])
            else:
                if i + j == test:
                    out.append(arr[j][i])
    test += 1
return out
print(zigzagTraversal([[1, 3, 4, 10],
                   [2, 5, 9, 11],
                   [6, 8, 12, 15],
                   [7, 13, 14, 16]]))

【问题讨论】:

我已经很久没有搞定微积分了,但是......你正在遍历一个二维数组,你正在做 row + col 次。如果您的数组大小为 n x n,则您的复杂度为 2n x n^2,如果我记得我的缩减规则大约为 o(n^2)。我很想知道是否有人为您进行了全面分析。 @codingCat 如果 OP 对代码的任何或所有方面的反馈不感兴趣,那么对于 CR,它就不会是 on-topic。请参考this meta answer(及其兄弟)了解更多信息。 【参考方案1】:

N=len(arr), M=len(arr[0])。此代码具有O(NM^2+N^2M) 复杂度(或O(N^3) 用于方形输入矩阵)。原因如下:外层循环 (while) 完全等同于 for 循环(因为您在最后增加 test 并且永远不会在其他地方更改它)并且将被执行 N+M 次。然后进入第二个循环,该循环恰好执行N 次。然后是内部循环 - M 次。中间循环的每一步都会重复内部循环,与外部循环相同。所以我们必须将所有这些计数相乘。当然,所有内部操作都不是原子的,但对于小数据,平均为O(1)。如果您的输入很大,我建议预先分配out(将其创建为out = [None for _ in range(N*M)])以避免其增长成本并将当前的第一个免费索引作为附加变量。

【讨论】:

以上是关于有人能告诉我解决之字形遍历问题的时间复杂度吗[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

按之字形顺序打印二叉树

Wordpress 仪表盘 畸形了 有高手能告诉我解决之道否

之字形字符串的最小编辑距离

有人可以帮助解决这种重复关系吗? [关闭]

有人可以解释所有代码的含义吗?蟒蛇[关闭]

java servlet中的空指针异常[关闭]