2014-04-01 125 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