繁体   English   中英

有人能帮我算出算法的时间复杂度吗?

[英]Can someone help me figure out the time complexity of my Algorithm?

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

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

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

在此处输入图片说明

假设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)

为什么哦为什么不把这段代码写成:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM