2016-04-26 5 views
3

zip()の時間複雑度はどのように計算できますか?Pythonでzip()の時間の複雑さはどのくらいですか?

testList = [[1,2,3]for _ in range(5)] 
    zip(*testList) 
+0

ここで、Nは最短リストの長さ、Mはリストの数です –

+0

'zip'が両方の機能が異なるため、Python 2とPython 3のどちらを使用するかを区別する必要があります。 –

+0

Python 3ではO(1)と呼ぶ呼び出し自体があると思いますが、評価は同じです。多分私はまったく間違っています。 –

答えて

7

N iterablesを圧縮するとします。 Pythonの3.xの

それだけ(ジップオブジェクトと呼ばれる)特殊なイテラブルを割り当て、内部フィールドにパラメータ配列を割り当てるように、ジップ機能自体は、O(1)時間で実行されます。インタプリタはパラメータを配列に変換する必要があるため、関数呼び出し自体(制御がzipに達する前)はO(N)です。それ以降のすべてのnextイテレータの呼び出しもO(N)で実行されます。したがって、ジップオブジェクトの排除は、イテラブル自体がアイテムを生成するのにかかる時間(ジップとは独立しているため)を除いて、イテラブルの平均(または最小)長さをMとすると、O(N*M)です。

python 2.xで、zip関数はリストを返します。そのリストは、呼び出し中に構築する必要があります。つまり、前の例のイテレータを使い切ることと同じです(O(N*M))。これは、圧縮されたiterablesで費やされた時間をカウントしません。

関連する問題