理解时间复杂度,大 O 符号
Understanding time complexity, big-O notation
编辑-这个问题来自我课程中的一个以前的测试,官方答案是O(n)
我需要帮助来理解为什么以下代码中的 运行 时间复杂度是 O(n)
而不是 O(n*log(n))
def fun(n):
total = 0
while n > 5:
n = n // 2
total += sum(range(n))
return total
while 循环执行 log(n)
次,并且在每次迭代中求和函数对 n/2
个数字求和,因此它的复杂度是 o(n)
,我看到每个 while
迭代有更少的数字求和,但我不明白为什么它是 O(n)
。
谢谢。
所以我想通了。
每个 while
迭代求和 n/2
项。这意味着总迭代次数为 n + n +n +...
,此和收敛为 n
编辑-这个问题来自我课程中的一个以前的测试,官方答案是O(n)
我需要帮助来理解为什么以下代码中的 运行 时间复杂度是 O(n)
而不是 O(n*log(n))
def fun(n):
total = 0
while n > 5:
n = n // 2
total += sum(range(n))
return total
while 循环执行 log(n)
次,并且在每次迭代中求和函数对 n/2
个数字求和,因此它的复杂度是 o(n)
,我看到每个 while
迭代有更少的数字求和,但我不明白为什么它是 O(n)
。
谢谢。
所以我想通了。
每个 while
迭代求和 n/2
项。这意味着总迭代次数为 n + n +n +...
,此和收敛为 n