私はキーワードyield
とジェネレータをPythonで読んでいますが、私はそれが時間の複雑さという用語を正しく理解しているかどうかを知りたいと思っています。今、私の理解が、これは時間Oの複雑さ(N ^を持っていることであるpythonジェネレータ時間の複雑さの混乱
>>> for factor in calc_factor(100): # this is the first "for" loop
print factor
:ここ
が要因得るために、私のジェネレータ関数である:
def calc_factors(n):
for k in range(0, n+1): # this is the second "for" loop
if n % k == 0:
yield k
を、私は、このジェネレータ関数を呼び出します2)それは2つのforループを持っているが、再び私は確信していない。この前に私を教えてください。 ありがとうございます!
あなたのプログラム内のループを数えて、その数をn ^の隣に置くことはできません。時間の複雑さはそのようには機能しません。 – user2357112
構文的には2つのループがありますが、ジェネレータ外のループの繰り返しごとに、ジェネレータ内のループの1回の反復だけが実行されます。消費された合計時間は、n^2ではなくnに比例します。 – user2357112
@ user2357112:ありがとうございます。私は最初の 'for'ループのように見えて混乱しましたが、それはジェネレータ関数を呼び出すでしょうが、ジェネレータ関数は私にそう思う別の' for'ループを持っています。私は 'for 'ループを数えることは時間の複雑さを判断する正しい方法ではないと同意します。 –