试图巩固我对时间复杂度的了解。我想我知道答案,但是想听听一些很好的解释。
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 = []
答案 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
是原子的或在恒定时间内运行。