【发布时间】:2019-01-08 05:30:03
【问题描述】:
我正在尝试其中一颗编程珍珠:
给定一个最多包含一千万个没有重复的 7 位整数的文件。仅使用 1.5Mb RAM 并仅读取一次数据以升序打印这些数字的有效方法是什么?只有 1Mb 的 RAM 而没有其他存储的后果是什么?如果允许重复,你的答案会有什么变化?
为了创建测试用例 I,生成了 8999999 个数字并将它们写入文件。 然后对于每一行,我开始将相同的插入到树中,最后创建一个 trie 结构。
示例代码:
from sys import getsizeof
tree = dict()
xtree = dict()
f = open("data2.txt", "r")
cnt = 0
for number in f:
cnt += 1
currTree = tree
xtree[number] = dict()
for n in number.strip():
if n not in currTree:
currTree[n] = dict()
currTree = currTree[n]
f.close()
print(cnt)
print(getsizeof(tree))
print(getsizeof(xtree))
print(tree)
示例文件 data2.txt 有 20 条记录
生成的树是
现在的问题是,当我对构建的树进行内存大小调整时,它会在 20 行处显示 240 字节的内存占用空间
在 100 行时,树的大小变为 368 字节
在 8999999 行也提供 368 个字节
我构建了一个名为 xtree 的辅助地图,它只是输入数据
xtree 和 tree 的大小以字节为单位。
谁能解释一下这是怎么回事??
【问题讨论】:
-
从字典实现的树使用太多内存。你想要的是一个整数,如果
i在列表中,则在其中设置ith 位。 10,000,000 位仅略低于 1.2Mb。 -
@chepner 请不要破坏提问者(以及碰巧阅读您评论的任何人)的难题。他们没有要求解决这个难题。
-
@jbch 这不是 puzzling.stackexchange.com。
标签: python memory-management programming-pearls