Python 这个单调算法的空间复杂度?
我编写了一个算法来确定输入数组是否是单调数组(其元素从左到右完全递增或完全递减) 我想知道这个算法的空间复杂度是多少。我认为它是O(n),因为计数随着数组大小的增加而增加。基本上,每次当前元素=到下一个元素时,我都会增加计数。所以count和count2的最大值基本上是输入数组的大小,如果循环遍历每个元素 如果我错了,有人能解释一下并纠正我吗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
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:对于处理数论的人来说,我不太确定。