【发布时间】:2015-02-17 22:37:57
【问题描述】:
我正在尝试找出函数的时间复杂度 (Big-O) 并尝试提供适当的原因。
第一个函数:
r = 0
# Assignment is constant time. Executed once. O(1)
for i in range(n):
for j in range(i+1,n):
for k in range(i,j):
r += 1
# Assignment and access are O(1). Executed n^3
像这样。
我看到这是三重嵌套循环,所以它必须是 O(n^3)。 但我认为我在这里的推理非常薄弱。我真的不明白发生了什么 在这里的三重嵌套循环内
第二个功能是:
i = n
# Assignment is constant time. Executed once. O(1)
while i>0:
k = 2 + 2
i = i // 2
# i is reduced by the equation above per iteration.
# so the assignment and access which are O(1) is executed
# log n times ??
我发现这个算法是 O(1)。但就像第一个函数一样, 我看不到while循环中发生了什么。
有人能详细解释一下两者的时间复杂度吗 职能?谢谢!
【问题讨论】:
-
嵌套循环几乎总是二次的,除非你在做一些持续的工作,你的第二个例子是
log(n)。 -
谢谢。对于第二个示例,我们是否忽略了 i = n 部分?
-
i = n 只是一个赋值,之后我们将 n 每次迭代减半,就像使用二分搜索一样
-
第一个循环是 O(n^3),而不是 O(n^2)。
-
此参考可能会有所帮助:wiki.python.org/moin/TimeComplexity