1

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

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

4

2 回答 2

5

你所要求的根本无法完成。您要求生成和存储 10 个数字的 1.22e15(或 4.81e15 替换)排列。即使每个数字只有一个字节,您也需要1000 万 GB的 RAM。

在我的LSPM包中,我使用该函数LSPM:::.nPri根据其词法排序索引生成特定排列。您无法在合理的时间内迭代每个排列,因此我建议您对所有可能的排列进行抽样。

请注意,由于如此大的数字的精度问题,上述代码不适用于 nPr(37,10),但它应该作为一个很好的起点。

于 2013-04-10T13:00:04.923 回答
3

在普通计算机上生成这么多排列几乎是不可能的。

快速计算显示(37 P 10)1264020397516800。要存储这么多整数本身,您需要1264020397516800 x 64位。即8.09×10^7 Gb (gigabits)10^7 Gigabytes。然后要存储实际的排列信息,您将需要更多的“内存”在 RAM 或硬盘中。

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

于 2013-04-10T12:42:49.207 回答