【发布时间】:2016-12-30 18:15:18
【问题描述】:
我一直在阅读有关关键字 yield 和 python 中的生成器的信息,我想知道我是否正确理解了它的时间复杂度。
这是我获取因子的生成器函数:
def calc_factors(n):
for k in range(0, n+1): # this is the second "for" loop
if n % k == 0:
yield k
我将这个生成器函数称为:
>>> for factor in calc_factor(100): # this is the first "for" loop
print factor
现在我的理解是,它的时间复杂度为 O(n^2),因为它有两个 for 循环,但我还是不相信。请在这方面启发我。 提前致谢!
【问题讨论】:
-
您不能只计算程序中的循环数并将计数放在 n^ 旁边。时间复杂度不是那样工作的。
-
虽然从语法上讲,您有两个循环,但生成器中的循环只有一次迭代会在生成器外循环的每次迭代中执行。花费的总时间与 n 成正比,而不是 n^2。
-
@user2357112 :感谢您的评论。我很困惑,因为它看起来像第一个
for循环执行然后它会调用生成器函数但是生成器函数有另一个for循环让我这么想。我同意计算for循环不是判断时间复杂度的正确方法。
标签: python data-structures time-complexity generator