3
a=raw_input()
prefix_dict = {}
for j in xrange(1,len(a)+1):
    prefix = a[:j]
    prefix_dict[prefix] = len(prefix)
print prefix_dict

上述代码中是否存在内存错误的可能性?这段代码在服务器上运行,服务器是一台运行 32 位 Ubuntu(Ubuntu 12.04 LTS)的四核 Xeon 机器。在少数情况下它可以工作,而在少数情况下它会显示内存错误。仅供参考:我不知道他们正在测试的情况,但输入是小写字母。输入大小 <= 10,000

4

2 回答 2

0

仅数据的内存量将是 1 + 2 + 3 ... + n-2 + n-1 + n 其中 n 是输入的长度,换句话说,len(a). 计算结果为 (n+1) * n/2。如果 n 是 10,000,这可以计算出大约 50 MB 的字符串数据,再加上 Python 字典使用多少 RAM 来存储 10,000 个条目。在我的 OSX 机器上进行测试,这似乎很少,实际上如果我在其上运行此代码,该过程显示已使用 53.9 MB:

str = "a"
d = {}
for i in xrange(10000):
    d[str] = i
    str = str + "a"

我看不出你的代码有什么明显的错误,当我在一个 10,000 个字母长的字符串上运行它时,它很高兴地吐出大约 50mb 来输出,所以肯定有其他问题。

top进程的内存使用情况是什么?

于 2012-07-23T19:24:24.453 回答
0

也许一小段代码会有所帮助:

prefix_dict = { a[:j]:j for j in xrange(1, len(a) + 1) }
于 2012-07-23T19:30:08.380 回答