2014-04-01 124 views
-6
def multi_merge_v1(lst_of_lsts): 
    all = [e for lst in lst_of_lsts for e in lst] 
    merged = [] 
    while all != []: 
     minimum = min(all) 
     merged += [minimum] 
     all.remove(minimum) 
    return merged 

請幫我計算這個函數的時間複雜度。我對此完全陌生。 謝謝計算算法的複雜度。 Python

+4

你嘗試過什麼嗎? – Christian

+0

這不是很有用的問題,因爲它缺乏一般性。你能否在這裏描述這個問題,所以它會變得更加「可搜索」? – user2622016

+0

這個問題並不缺乏一般性。你可以很容易地概括答案。這個問題缺乏努力。 – msvalkon

回答

1

假設你在你的all數據結構N成員,你每一次得到的O(N)min,然後除去它,再次O(N),你這樣做N倍,所以你會與結束O(N^2)時間複雜度。

可以轉而有這樣的:

def multi_merge_v1(lst_of_lsts): 
    all = [e for lst in lst_of_lsts for e in lst] 
    return(sorted(all)) 

具有O(N log(N))時間複雜度。

+0

不,它不。如果你的'all'是'None',它只返回'None'。看看[這裏](https://wiki.python.org/moin/HowTo/Sorting) – adrin

+1

@BlackMamba'list.sort'返回None並且就地修改列表。另一方面,全局函數「sorted」不會修改它的參數(除了迭代它的參數修改它)並返回一個新的列表和已排序的數據。 – lvc