有人可以帮助我弄清楚算法的时间复杂度吗?

时间:2020-09-15 01:31:05

标签: python algorithm while-loop time-complexity

ArrayOne输入示例:[-1、5、10、20、28、3]

示例ArrayTwo输入:[26、134、135、15、17]

我猜是O(n ^ 2 + m ^ 2),其中n是ArrayOne的长度,m是ArrayTwo的长度?

enter image description here

2 个答案:

答案 0 :(得分:1)

假设len(arrayOne) = nlen(arrayTwo) = m

i = 0 and j = 0

从头开始,您会看到一个外部的while循环,该循环不会立即持续多久。

在while循环中,您需要进行一些固定的工作,然后检查是否为j == m。这是不正确的,因此j被递增m次。

现在,j == m可以增加i并设置j = -1。这意味着j将再次增加m次。 i递增,j重置。

j将重置n次。

因此,这里的内部循环可以用m表示。还有n的外循环。

因此,该算法的运行时复杂度为O(n * m)

答案 1 :(得分:1)

为什么哦,为什么这段代码不只是写成:

minDiff = float("inf")
for value1 in arrayOne:
    for value2 in arrayTwo:
        minDiff = min(minDiff, abs(value1 - value2))

感觉这段代码已经过时了,无法掩盖它是一对嵌套迭代的事实,而且时间很明显。

这也意味着它可以在Python中写成一行:

minDiff = min(abs(value1 - value2) for value1 in arrayOne for value2 in arrayTwo)