我希望为大数字生成有序排列,即37P10(37的大小为10的排列)。我正在使用combinat
包,permn()
函数用于此目的,但它不适用于超过10个数字。同样通过这个,我无法生成不同大小的排列,如上例所述。
此外,我正在使用do.call(rbind,)
函数将这些排列组合成一个矩阵。是否有任何其他R语言包可用于此目的?
答案 0 :(得分:5)
你要求的东西根本无法完成。您要求生成并存储10个数字的1.22e15(或更换的4.81e15)排列。即使每个数字只有一个字节,您也需要 1000万GB 的RAM。
在我的LSPM包中,我使用函数LSPM:::.nPri
根据其词汇排序索引生成特定的排列。你无法在合理的时间内迭代每个排列,所以我建议你对所有可能的排列进行抽样。
请注意,由于如此大量的精度问题,上述代码不适用于nPr(37,10),但它应该是一个很好的起点。
答案 1 :(得分:3)
几乎不可能在普通计算机上产生如此多的排列。
快速计算显示(37 P 10)
为1264020397516800
。要存储这么多整数,你需要1264020397516800 x 64
位。那是8.09×10^7 Gb (gigabits)
或10^7 Gigabytes
。然后,为了存储实际的排列信息,你需要在RAM或Harddisk中获得更多的“内存”。
我认为最好的策略是编写排列函数,按顺序创建有序排列,并迭代地进行分析,而不会产生所有可能的排列。