列表创建的空间复杂性

时间:2016-09-12 22:27:14

标签: python algorithm python-2.7 space-complexity

有人可以解释一下超出程序的空间复杂性,为什么会这样?

def is_pal_per(str):

s = [i for i in str]
nums = [0] * 129

for i in s:
    nums[ord(i)] += 1

count = 0

for i in nums:
    if i != 0 and i / 2 == 0:
        count += 1

print count

if count > 1:
    return False
else:
    return True

实际上,我对这行代码很感兴趣。它如何影响上述程序的空间复杂性?

s = [i for i in str]

nums = [0] * 129

2 个答案:

答案 0 :(得分:0)

您找到了仅分配内存的两行:

s = [i for i in str]
nums = [0] * 129

第一个与len(str)线性增长,第二个是常数。因此,函数的空间复杂度为O(N),N = str的长度。

答案 1 :(得分:0)

我不清楚你在哪里遇到麻烦。 s 只是 str 中单个字符的列表。空间消耗 len(s)

nums 是一个固定的大小,由 O(N)术语支配。

这是您编写的代码,还是已经交给您了?编程风格高度“Pythonic”。

至于你的代码,从这个崩溃开始:

count = 0

for char in str:
    val = ord[char] + 1
    if abs(val) == 1:
        count += 1

print count

return count == 0

首先,我更换了您的单字母变量( s => char ; i => val )。然后我删除了大多数的中间步骤,留下一对来帮助您阅读代码。最后,我使用了一个简单的布尔值来返回,而不是原始的复杂语句。

使用Python的计数方法 - 这会进一步缩短功能。顺便说一下,你打印统一值的计数,还是只需要布尔返回?如果它只是返回值,你可以使它更短。