2016-07-01 2 views
-1

私はこの簡単なpythonコードを書いていますが、これをイテレータを受け入れてジェネレータとして機能するclass構造に変換する必要があります。タプル(戻り値ではなく)を返します。私はそれを変換することができません:関数構造を持つPythonコードをジェネレータを使ったクラス構造に変換し、時間と空間の複雑さを計算する

def func(str,size): 

     size1 = size 
     list1 = [] 

     for i in str: 
      list1.append(i) 

      if len(list1) < size1: 
       return (0) 
       continue 
      if len(list) > win_size1: 
       list1.pop(0)  

      min = min(list1) 

      return (min) 

if __name__ == '__main__': 

    str = [1,2,3,4,5,6] 
    size = [4] 
    res = sol2(str,size) 

はまた、私は時間と空間の複雑さを取得する必要があります。私の見解では、複雑さはO(n)(私は100%確信していません)と思われますが、私は空間の複雑さを判断することができません。

このコードをジェネレータを使用したクラスに変換するにはどうすればよいですか?時間と空間の複雑さは何ですか?

+0

WTF?なぜ完全にコードを変更したのですか?これは最初に提示されたものとは全く異なるアルゴリズムであり、新しいバグも含まれています。あなたの質問のコードを変更すると、これまでに与えられたすべての回答が無効になります。 – mhawke

+0

@mhawke要件が変更されたため、変更する必要がありました。 – user2966197

+0

お詫び申し上げます新しい質問をしてください。 – mhawke

答えて

0

現在、returnステートメントに続くステートメントは意味をなさない - continueには決して到達しません。ただし、例えばyieldの代わりreturn、と歩留まり各タプル、

yield (None,None,None,None) 

return (None,None,None,None) 

を置き換える今continue文では、実際に実行することができ、そして、あなたのアルゴリズムでは、複数を返すことができますタプル。

リターンをyieldに変更するだけで、関数がジェネレータになります。

これを「クラス構造」にする必要はありません。クラスを作成してsol2()をそのクラスのメソッドにすることはできますが、それをやりたい理由が明確ではありません。

+0

そして、私の時間と空間の複雑さは何ですか? – user2966197

+0

@ user2966197:どう思いますか? 'return'ステートメントがあったときはO(1)でした。あなたのアルゴリズムが何をしようとしているのかは分かりませんが、 'yield'ステートメントではO(n)のように見えます。 – mhawke

+0

あなたが思っているのは、O(n^2)ではありません。あなたはそれが_2n_であると主張することができますが、複雑さが進む限り_n_と同じです。だから両方のO(n)。 – mhawke

0

ウィンドウ1とウィンドウ2だけが余分なスペースを求めるので、スペースの複雑さはO(n)になると思います。

関連する問題