Python 3.x 大O复杂性
我试图理解Big O,并认为通过一个简单的程序进行操作可能会有所帮助Python 3.x 大O复杂性,python-3.x,big-o,Python 3.x,Big O,我试图理解Big O,并认为通过一个简单的程序进行操作可能会有所帮助 def sum(n): k = 0 j = 0 while k < n: k = k + 1 while j < n: j = j + 1 k = k + j return k def总和(n): k=0 j=0 当k
def sum(n):
k = 0
j = 0
while k < n:
k = k + 1
while j < n:
j = j + 1
k = k + j
return k
def总和(n):
k=0
j=0
当k
k和j最初被分配值0,该值计为2次分配,第一个while循环执行1次分配n次,第二个while循环执行2次分配n次。所以表达式是2+n+2n
由于上述表达式中的前两项(2和n)是常数,因此与第三项相比,它们将变得不重要,第三项随着n的增长将n乘以2。所以代码的大O是O(2n)
我的逻辑和答案正确吗?提前感谢您的回答是正确的,尽管我们没有说O(2n),而是说O(n) O(n)的意思是,算法的最坏情况时间复杂度最多呈线性增加,也就是说,它最终由某种形式的函数约束,其中a是某个常数。实际常数与big-O表示法无关 更专业一点说,我最终会说,因为我们谈论的是我们称之为算法的极限行为,你可以认为它只描述了非常大的输入的行为 例如,在您的算法中,随着
n
的增长,我们越来越不关心赋值k=0
和j=0
,它们变得微不足道
总之,big-O表示法旨在描述运行时间增长的速度,而不是精确描述运行时间是什么。您的回答是正确的,尽管我们没有说O(2n),而是说O(n) O(n)的意思是,算法的最坏情况时间复杂度最多呈线性增加,也就是说,它最终由某种形式的函数约束,其中a是某个常数。实际常数与big-O表示法无关 更专业一点说,我最终会说,因为我们谈论的是我们称之为算法的极限行为,你可以认为它只描述了非常大的输入的行为 例如,在您的算法中,随着
n
的增长,我们越来越不关心赋值k=0
和j=0
,它们变得微不足道
总之,big-O表示法旨在描述运行时间增长的速度,而不是精确描述运行时间是什么。对不起,我指的是“常量”,意思是它们不会被另一个值乘以或以指数形式增加。因此,可能存在重复,因此您得到了
O(3n+2)
。现在忽略常量,剩下的是O(n)
。对不起,我指的是“常量”,意思是它们没有被另一个值乘以或指数增加。可能是重复的,所以这里有O(3n+2)
。现在你忽略常数,剩下的是O(n)
。我会尽量让你更清楚地知道,我们谈论的是限制行为,而不是太数学化。我会尽量让你更清楚地知道,我们谈论的是限制行为,而不是太数学化。