我一直在閱讀關於關鍵字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),因爲它有兩個循環,但我不相信。請在這方面給我啓發。 在此先感謝!
你不能只計算你的程序中的循環,並堅持計數旁邊的n ^。時間複雜性不會那樣工作。 – user2357112
雖然在語法上,您有兩個循環,生成器中的循環只有一個迭代執行循環的生成器外的每個迭代。花費的時間總量與n成正比,而不是n^2。 – user2357112
@ user2357112:感謝您的評論。我很困惑,因爲它看起來像第一個for循環執行,然後它會調用生成器函數,但然後生成器函數有另一個for循環讓我這麼想。我同意計算'for'循環是不正確的方法來判斷時間複雜度。 –