我试图找到Pólya猜想的一个反例,它将在9亿的某个地方.我正在使用一种非常有效的算法,甚至不需要任何因子分解(类似于Eratosthenes的Sieve,但有更多的信息.因此,需要大量的整数.
该程序是高效和正确的,但需要一个阵列,直到想要检查的xi(它检查来自(2,x)的所有数字).所以,如果反例是9亿,我需要一个同样大的数组.Java不会允许我超过2000万.有什么我可以做的让一个大的数组?
Bom*_*mbe 10
Java将允许多达20亿个数组条目.这是你的机器(和有限的内存)无法处理如此大的数量.
mfx*_*mfx 10
Java数组由int索引,因此数组不能大于2 ^ 31(没有无符号整数).因此,数组的最大大小为2147483648,消耗(对于普通的int [])8589934592字节(= 8GB).
因此,int-index通常不是限制,因为无论如何你都会耗尽内存.
在您的算法中,您应该使用List(或Map)作为您的数据结构,并选择List(或Map)的实现,其可以超过2 ^ 31.这可能会变得棘手,因为"通常"实现ArrayList(和HashMap)在内部使用数组.您必须实现自定义数据结构; 例如,通过使用2级数组(列表/数组).当你在它时,你也可以尝试更紧密地包装.
9亿32位整数没有进一步的开销 - 并且总是会有更多的开销 - 需要略高于3.35 GiB.获得大量内存的唯一方法是使用64位JVM(在具有至少8 GB RAM的计算机上)或使用某些磁盘备份缓存.
| 归档时间: |
|
| 查看次数: |
32923 次 |
| 最近记录: |