【发布时间】:2010-11-05 04:03:06
【问题描述】:
对于一个库,我需要将第一个质数存储到一个限制 L。这个集合必须有 O(1) 查找时间(检查一个数字是否是质数)并且它必须很容易,给定一个数字,用于查找下一个素数(假设它小于 L)。
鉴于 L 是固定的,生成列表的 Eratostene 筛子就可以了。现在,我使用压缩布尔数组来存储列表,其中仅包含 3 到 L(含)之间奇数的条目。这需要 (L-2)/2 位内存。我希望能够在不使用更多内存的情况下静态增加 L。
是否存在使用较少内存且具有相似属性的数据结构?或者至少有恒定的查找时间? (然后可以枚举奇数,直到我们得到一个素数)
(我写这个的语言是Factor,但是这个问题在任何具有内置或易于编程的打包位数组的语言中都是一样的)
【问题讨论】:
-
什么是典型的“L”?这适用于内存紧张的嵌入式设备吗?它可能会影响建议。鉴于有 50,847,534 个质数低于 10 亿,您可能会花费更多时间打包/解包,然后是 4 字节整数的直接数组。
-
而且我不希望需要超过我今天拥有的 ~320kB 的内存。
-
所以你想将5,000,000个整数的信息存储到320,000个字节...
-
DanielDaranas:这就是今天正在做的事情。鉴于只存储奇数素性(并获取一位信息,对或错),我将大约 2,500,000 个奇数的信息存储在不到 313,000 个字节中。为什么会让你感到惊讶?
-
我认为我们可以在这么小的空间内压缩这么多东西,这很酷。
标签: math data-structures primes factorization