Python 合并和排序列表:复杂性
我正在编写一个代码,以返回一个列表,该列表是其他两个排序列表的排序合并。该练习要求复杂性为O(n+m),其中n和m是要合并的两个列表中的元素。我解决了这个练习,并认为它的复杂性是正确的,但我不确定,我可以请你看一下吗Python 合并和排序列表:复杂性,python,sorting,merge,complexity-theory,Python,Sorting,Merge,Complexity Theory,我正在编写一个代码,以返回一个列表,该列表是其他两个排序列表的排序合并。该练习要求复杂性为O(n+m),其中n和m是要合并的两个列表中的元素。我解决了这个练习,并认为它的复杂性是正确的,但我不确定,我可以请你看一下吗 def merge1(a,b): last=-1 saved=[] while a!=[] and b!=[]: current_max=max(a[last], b[last]) saved.append(current_m
def merge1(a,b):
last=-1
saved=[]
while a!=[] and b!=[]:
current_max=max(a[last], b[last])
saved.append(current_max)
if current_max==a[-1]:
a.pop()
else:
b.pop()
在这里之前,复杂性肯定是正确的,我不确定以下几点
if a==[]:
for el in range(len(b)):
saved.append(max(b))
b.pop()
else:
for el in range(len(a)):
saved.append(max(a))
a.pop()
saved.reverse()
return saved
我想,仅使用各种
if
和避免周期的最后一个,就可以降低复杂性,但您能告诉我您对我的代码的看法吗?Thx伙计们。两个列表都排序了吗?是的,它们都排序了。第一个是O(m+n)。如果从两个列表的末尾进行比较,您可以使用保存。附加(b)
,这是一个总的O(m+n)复杂性,因为您最多可以比较m+n-1次。但是现在您使用的saved.append(max(b))
引入了更多的复杂性。您的算法是O(m+n)。确切的boound是2*(m+n),因为在m+n中迭代每个元素,然后末尾的reverse()是另一个m+n。这两个列表都排序了吗?是的,它们都排序了第一个是O(m+n)。如果从两个列表的末尾进行比较,可以使用saved.append(b)
,这是一个总数O(m+n)复杂性是因为您最多可以比较m+n-1次。但是现在您使用的saved.append(max(b))
引入了更多的复杂性。您的算法是O(m+n)。确切的boound是2*(m+n),因为在m+n中迭代每个元素,然后末尾的reverse()是另一个m+n。