R 有序排列

R 有序排列,r,permutation,R,Permutation,我希望生成大数的有序排列,即大小为10的37的37P10排列。我使用combinat包,permn函数,但它不适用于10个以上的数字。同样通过这个,我不能像上面的例子中描述的那样生成不同大小的排列 此外,我正在使用do.callrbind,function将这些排列组合成一个矩阵。请问是否有其他R语言包可用于此目的?在普通计算机上生成如此多的排列几乎是不可能的 快速计算显示37 P10为1264020397516800。要存储这么多整数本身,需要1264020397516800 x 64位。即8

我希望生成大数的有序排列,即大小为10的37的37P10排列。我使用combinat包,permn函数,但它不适用于10个以上的数字。同样通过这个,我不能像上面的例子中描述的那样生成不同大小的排列


此外,我正在使用do.callrbind,function将这些排列组合成一个矩阵。请问是否有其他R语言包可用于此目的?

在普通计算机上生成如此多的排列几乎是不可能的

快速计算显示37 P10为1264020397516800。要存储这么多整数本身,需要1264020397516800 x 64位。即8.09×10^7GB或10^7GB。然后,为了存储实际的排列信息,您需要在RAM或硬盘中存储更多的内存


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

在普通计算机上生成如此多的排列几乎是不可能的

快速计算显示37 P10为1264020397516800。要存储这么多整数本身,需要1264020397516800 x 64位。即8.09×10^7GB或10^7GB。然后,为了存储实际的排列信息,您需要在RAM或硬盘中存储更多的内存


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

你所要求的根本做不到。您要求生成并存储1.22e15或4.81e15,替换排列为10个数字。即使每个数字只有一个字节,也需要1000万GB的RAM

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


请注意,上述代码将不适用于nPr37,10,因为其精度问题涉及如此大的数字,但它应该作为一个良好的起点。

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

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


请注意,上面的代码对于nPr37,10不起作用,因为它的精度问题太大,但它应该是一个很好的起点。

37P10是1264020397516800,这是一个大量的排列,而且太有序了。我怀疑你能在任何琐碎的桌面设置上以任何琐碎的方式进行此操作。@geektrader这对我来说非常重要。请提供帮助。你试图解决的问题是什么?正如其他评论所指出的,你永远无法评估所有这些梳子/烫发,所以让我们看看如何找到你真正想要的。你所要求的根本无法实现。您要求生成并存储1.22e15或4.81e15,替换排列为10个数字。即使每个数字只有一个字节,也需要1000万GB的RAM。也许有一种方法可以解决你的潜在问题,但是我们不能帮助你,除非你提供更多关于你试图用这些排列做什么的细节。但是3P2的元素不是应该是{1,2},{2,1},{1,3},{3,1},{2,3},{3,2},{3,2}吗?i、 确实有六种可能的元素,但你列举了全部排列,而不是2的样本。。。3P2=3/3-2! = 6等于3P3=3/3-3! = 6…37P10是1264020397516800这是一个大量的排列,这太有序了。我怀疑你能在任何琐碎的桌面设置上以任何琐碎的方式进行此操作。@geektrader这对我来说非常重要。请提供帮助。你试图解决的问题是什么?正如其他评论所指出的,你永远无法评估所有这些梳子/烫发,所以让我们看看如何找到你真正想要的。你所要求的根本无法实现。您要求生成并存储1.22e15或4.81e15,替换排列为10个数字。即使每个数字只有一个字节,也需要1000万GB的RAM。也许有一种方法可以解决你的潜在问题,但是我们不能帮助你,除非你提供更多关于你试图用这些排列做什么的细节。但是3P2的元素不是应该是{1,2},{2,1},{1,3},{3,1},{2,3},{3,2},{3,2}吗?i、 e.确实有六种可能的元素,但您已经列举了全部排列,
不是2的样本。。。3P2=3/3-2! = 6等于3P3=3/3-3! = 6…非常感谢您宝贵的回答,我完全理解我应该进一步做什么,你能帮我做一个有序排列函数吗?到目前为止,我还不清楚,一个随机排列样本,得到两个相同排列的概率是非常小的,并不能很好地达到这个目的,“示例非常简单。@BenBolker我使用过这个函数,但大约一小时后它无法返回所需的数字集。所有可能的顺序排列集合中的任何一个或多个集合都可以满足我的条件。我仍然不明白。sample37,10返回从数字1到37绘制的10个值的有序集,无需替换。replicate1000,sample37,10返回1000个这样的绘图的10×1000矩阵。你能更准确地说明你需要什么吗?@BenBolker。我有一个检查过程来查找顺序真正重要的相邻值。在这个过程中,每次使用10个不同的数字作为输入,如果它满足条件,则该过程将终止,否则将使用新的数字集重复。非常感谢您提供的宝贵答案,我完全理解我应该进一步做什么,你能帮我做一个有序排列函数吗?到目前为止,我还不清楚,一个随机排列样本,得到两个相同排列的概率是非常小的,并不能很好地达到这个目的,“示例非常简单。@BenBolker我使用过这个函数,但大约一小时后它无法返回所需的数字集。所有可能的顺序排列集合中的任何一个或多个集合都可以满足我的条件。我仍然不明白。sample37,10返回从数字1到37绘制的10个值的有序集,无需替换。replicate1000,sample37,10返回1000个这样的绘图的10×1000矩阵。你能更准确地说明你需要什么吗?@BenBolker。我有一个检查过程来查找顺序真正重要的相邻值。在此过程中,每次使用10个不同的数字作为输入,如果它满足条件,则过程将终止,否则使用新的集合重复。谢谢。请告诉我。是否可以在R中编写一个函数,一次只返回一组置换,然后迭代地覆盖下一组置换,依此类推?谢谢。请告诉我。是否有可能在R中编写一个函数,一次只返回一组置换,然后迭代覆盖下一组置换,依此类推。。。?