Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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_Algorithm_Space Complexity - Fatal编程技术网

Python 这个单调算法的空间复杂度?

Python 这个单调算法的空间复杂度?,python,algorithm,space-complexity,Python,Algorithm,Space Complexity,我编写了一个算法来确定输入数组是否是单调数组(其元素从左到右完全递增或完全递减) 我想知道这个算法的空间复杂度是多少。我认为它是O(n),因为计数随着数组大小的增加而增加。基本上,每次当前元素=到下一个元素时,我都会增加计数。所以count和count2的最大值基本上是输入数组的大小,如果循环遍历每个元素 如果我错了,有人能解释一下并纠正我吗 def monotonic(array): count = 0 count2 = 0 for i in range(len(arr

我编写了一个算法来确定输入数组是否是单调数组(其元素从左到右完全递增或完全递减)

我想知道这个算法的空间复杂度是多少。我认为它是O(n),因为计数随着数组大小的增加而增加。基本上,每次当前元素=到下一个元素时,我都会增加计数。所以count和count2的最大值基本上是输入数组的大小,如果循环遍历每个元素

如果我错了,有人能解释一下并纠正我吗

def monotonic(array):
    count = 0
    count2 = 0
    for i in range(len(array) - 1):
        if array[i] <= array[i + 1]:
            count += 1
        if array[i] >= array[i + 1]:
            count2 += 1
    if array == []: return True
    if count == len(array) - 1 or count2 == len(array) - 1:
        return True
    else:
        return False
def单调(数组):
计数=0
count2=0
对于范围内的i(透镜(阵列)-1):
如果数组[i]=数组[i+1]:
count2+=1
如果数组==[]:返回True
如果count==len(数组)-1或count2==len(数组)-1:
返回真值
其他:
返回错误
时间复杂度为O(n)


空间复杂度为O(1)。唯一使用的存储是
count
count2
。没有额外的列表,也没有会占用可变堆栈空间的递归调用。

在计算大小复杂度时,通常的假设是,如果某个内容适合内存,那么它的大小适合恒定数量的位,因为计算机机器字的大小是由其结构定义的常数


这是一个务实的选择,我们会在适当的时候做出不同的假设。陈述复杂性的目的是说一些有用的东西。我们都知道渐近分析在技术上不适用于实的、有界的机器,但无论如何它是一个有用的工具。

从技术上讲,空间复杂度是O(logn)因为Python整数是无界的:),但这只在输入数组具有不切实际的大小时才开始起作用。所以使用变量来保存值始终是常量空间吗?@Thomas Two可以玩这个游戏!从技术上讲,列表只能如此之大,猜测可能是O(2^64)上限,因此计数上限约为2^64。@SamuelP正确。在所有实际应用中,整数变量的大小都是恒定的。@JohnKugelman:对于处理数论的人来说,我不太确定。