Python while循环的时间复杂度
我根本不确定我是否理解时间复杂性的计算。我得到了这些循环,这些是我的计算。然而,我完全不知道该怎么说大O在这里 循环1:Python while循环的时间复杂度,python,algorithm,loops,while-loop,time-complexity,Python,Algorithm,Loops,While Loop,Time Complexity,我根本不确定我是否理解时间复杂性的计算。我得到了这些循环,这些是我的计算。然而,我完全不知道该怎么说大O在这里 循环1: lst = [] i=1 while i<n: lst = list(range(i)) i *= 2 lst=[] i=1 而i循环1:O(n logn) 循环运行log2(n)次,其平均值为O(logn)。每次迭代(在最坏的情况下)执行n个操作。所以复杂性
lst = []
i=1
while i<n:
lst = list(range(i))
i *= 2
lst=[]
i=1
而i循环1:O(n logn)
循环运行log2(n)次,其平均值为O(logn)。每次迭代(在最坏的情况下)执行n个操作。所以复杂性是O(n logn)
循环2:O(对数n)
循环运行log2(n)次,其平均值为O(logn)。我假设赋值lst=lst+[I]
只是添加节点(而不是创建新列表)。它的平均值是O(1),所以复杂度是O(logn)。如果我错了,分配会创建一个新的列表,因此每次迭代(在最坏的情况下)都会执行n个操作。因此复杂性是O(n logn)
循环3:O(对数n)
就像在循环2中一样。在这里,作业肯定是O(1),而不是假设…第二个作业是今天早些时候发布的。它可能会帮助您理解所有这些。也许这更适合于。您需要考虑在执行
循环时,执行了多少次。首先考虑它像sweeneyrod所说的那样循环了多少次,然后考虑每次迭代都做了些什么。在考虑迭代次数时,不要使用实际数字,只考虑它与n
的关系。i
是否每次都加倍?然后它将以log2(n)
的增量达到n
。@KEYSER我知道每个循环将迭代log2n次,因为在每种情况下,I都是双倍的。使我困惑的是除了加倍i之外的其他操作,特别是+=和常规加法之间的差异。
lst = []
i=1
while i<n:
lst = lst + [i]
i *= 2
lst = []
i=1
while i<n:
lst += [i]
i *= 2