这两个代码块(如果有)之间的时间复杂度有何不同?为什么?

时间:2019-01-07 18:02:43

标签: python python-3.x runtime time-complexity

试图巩固我对时间复杂度的了解。我想我知道答案,但是想听听一些很好的解释。

main = []
while len(main) < 5:
    sub = []
    while len(sub) < 5:
        sub.append(random.randint(1,10))
    main.append(sub)

VS

main = []
sub = []
while len(main) < 5:
    sub.append(random.randint(1,10))
    if len(sub) == 5:
        main.append(list(sub))
        sub = []

2 个答案:

答案 0 :(得分:3)

没有区别,因为两种情况下时间复杂度都是恒定的-您两次都执行恒定数量的操作。

答案 1 :(得分:1)

两者的时间复杂度均为O(1)-恒定的时间,因为它们都执行恒定数量的操作,如@Yakov Dan所述。

这是因为时间复杂度通常表示为变量数(例如n)的函数,并且倾向于显示更改n的值将如何改变算法所需的时间。 / p>

现在,假设您使用n而不是5,那么两种情况下您都将使用O(n^2)。对于第二种情况,这可能很棘手,因为检查多项式复杂度的基本方法是计算嵌套循环的数量,并且由于第二个版本具有单个循环,因此您可以得出结论,第二个版本为O(n)。 / p>

但是,仔细查看它会发现,对于附加到n的每个值,循环sub运行main(在这种情况下为5)次,因此实际上是一样。

这当然假定内置list.append是原子的或在恒定时间内运行。