因此,我不是CS专业,并且很难回答有关程序的big(O)复杂性的问题。

我编写了以下例程,以输出总和为0的数组中的数字对:

asd=[-3,-2,-3,2,3,2,4,5,8,-8,9,10,-4]

def sum_zero(asd):
    for i in range(len(asd)):
        for j in range(i,len(asd)):
            if asd[i]+asd[j]==0:
                print asd[i],asd[j]


现在,如果有人问这个方法的复杂性,我知道,因为第一个循环遍历所有n项,它会大于(除非我错了),但是有人可以解释如何找到正确的复杂性吗?

是否有更好,更有效的解决方法?

最佳答案

我不会为您提供完整的解决方案,但会尝试为您提供指导。

您应该得到一支铅笔和一支纸,然后问自己:

语句print asd[i], asd[j]执行多少次? (在最坏的情况下,这意味着您不应该真正在乎那里的状况)
您会发现它实际上取决于它上面的循环,该循环被执行len(asd)(用n表示)时间。

您唯一需要知道的是,如果外循环具有n个迭代,则执行内循环多少次? (i从0到n

如果仍然不确定结果,只需举一个真实的例子,例如n=20,并计算执行最低的语句多少次,这将为您提供一个很好的答案提示。

关于python - 如何发现以下程序的复杂性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27770826/

10-12 18:31