Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并和排序列表:复杂性_Python_Sorting_Merge_Complexity Theory - Fatal编程技术网

Python 合并和排序列表:复杂性

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

我正在编写一个代码,以返回一个列表,该列表是其他两个排序列表的排序合并。该练习要求复杂性为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_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。