Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.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_Python 3.x_Recursion - Fatal编程技术网

Python 以下算法的空间复杂度是多少?

Python 以下算法的空间复杂度是多少?,python,python-3.x,recursion,Python,Python 3.x,Recursion,下面的算法使用递归查找列表中最大的元素 def largest(s): if len(s) == 0: return 'List can\'t be empty' elif len(s) == 1: return s[0] elif s[0] <= s[1]: return largest(s[1:]) else: s.remove(s[1]) return largest(s)

下面的算法使用递归查找列表中最大的元素

def largest(s):
    if len(s) == 0:
        return 'List can\'t be empty'
    elif len(s) == 1:
        return s[0]
    elif s[0] <= s[1]:
        return largest(s[1:])
    else:
        s.remove(s[1])
        return largest(s)
时间复杂度是开启的,因为我们对函数的总调用数是n个最大的,并且每个调用执行O1操作。
我很难计算出空间的复杂性。我想它是开着的,但我不确定。

切片一个标准列表确实会创建一个浅表!切片的副本。你说的对,这是成功的。在分配的额外内存中;不计算列表本身,当然它已经在内存中了


正如Reut在评论中指出的,这是Python解释器的一个实现细节,但我不能确定是否有解释器以不同的方式处理切片。任何在不复制的情况下创建切片的实现都必须改用写时复制。

首先,时间复杂度不为on,因为list.remove操作不是O1,而是on。 因此,您的时间复杂度为^2-想象一下在这个数组上应用最大的时间复杂度[5 4 3 2 1] 您可以看到python操作复杂性的列表


空间复杂度为^2,因为当您执行return largests[1:]时,您复制的是列表,而不是引用,因此您保留了列表的所有中间部分。执行s.removes[0]然后返回最大值将增加空间复杂性,因为您正在处理引用

空间复杂度在技术上是开的,因为您正在传递列表的副本,但理论上是O1,因为它可能是python的其他实现中的引用。@ReutSharabani使用numpy数组将使其成为O1。