有序排列

时间:2013-04-10 11:58:14

标签: r permutation

我希望为大数字生成有序排列,即37P10(37的大小为10的排列)。我正在使用combinat包,permn()函数用于此目的,但它不适用于超过10个数字。同样通过这个,我无法生成不同大小的排列,如上例所述。

此外,我正在使用do.call(rbind,)函数将这些排列组合成一个矩阵。是否有任何其他R语言包可用于此目的?

2 个答案:

答案 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中获得更多的“内存”。

我认为最好的策略是编写排列函数,按顺序创建有序排列,并迭代地进行分析,而不会产生所有可能的排列。