2017-11-06 13 views
2

IてるビッグOは、以下の簡単なプログラムの時間を実行しているか疑問に思う:ビッグO pythonでopratorでの時間を実行している

dates = [0,2,3,4] 
sample_list = [1,2,3,4] 
for i in range(0, 4): 
    sub_list = sample_list[i+1:] 
    if dates[i] in sub_list: 
     count += 1 

が実行されている時間O(n)O(n**2)ですか?私はforループを持っているので、実行時間がリースO(n)であることを知っていますが、if dates[i] in sub_list文についてはどうですか?それは何のための実行時間ですか?

+1

'O(n)'または 'O(n ** 2)'は 'n'の定義が無ければ無意味です...' n'とは何ですか? 'samples_list'にある' dates'の要素の数は?リストの数?... – Julien

答えて

3

ループはあなたのリストの長さに依存していないようです。ただし、sample_list[i+1:]への呼び出しは、sample_listのサイズとdates[i] in sub_listのサイズによって異なります。このため

は、あなたのコードはnは、長さがsample_listであるO(n)です。

+0

これを 'for range(0、len(dates))'に変更するとどうなりますか?それは私にO(n)を与えますか? – vivi11130704

+0

Stefanは指摘したように、すでに 'O(n)'ですが、インデックスをハードコードしない方がよいでしょう。 –

+0

私は参照してください。だから私が正しく理解しているならば、 ''サブリスト内の日付[i]が実行時間をO(n^2)に増加させないならば。しかし、私はこの記事を読んでいました:https://stackoverflow.com/questions/13884177/complexity-of-in-operator-in-pythonそして、リスト内の "in"演算子がO(n)の実行時間を持つようです。私は演算子でこれの外側にforループをラッピングしているからです。私の場合はO(n^2)でなければならないのですか? – vivi11130704

関連する問題