2016-04-26 33 views
3

如何計算zip()的時間複雜度?Python中zip()的時間複雜度是多少?

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

它的O(N * M)其中N是最短列表的長度,M是列表數量 –

+0

您需要區分是否使用python 2或python 3作爲'zip'在兩個函數中都有不同的功能。 –

+0

調用本身,我猜是O(1)在python 3 ...但評估仍然是相同的,我認爲...也許我完全錯了 –

回答

7

假設您壓縮N次迭代。

蟒3.X,zip函數本身在O(1)時間用完,因爲它只是分配特別可迭代(稱爲拉鍊對象),和參數數組到內部字段分配。函數調用本身(在控件到達zip之前)爲O(N),因爲解釋器必須將參數轉換爲數組。在迭代器上調用的每個後續next也都在O(N)中運行。因此,假設M是迭代次數的平均(或最小)長度,排除迭代本身用於生成項目(因爲它獨立於zip)的時間,因此耗盡zip對象爲O(N*M)

python 2.x,zip函數返回一個列表。該列表必須在調用期間構建,這相當於耗盡前面示例中的迭代器,因此O(N*M)不包括在壓縮的可迭代中花費的時間。

相關問題