用函数式编程模拟mathematica中的置换函数

时间:2012-11-01 15:11:42

标签: functional-programming wolfram-mathematica permutation

我正在创建一组的所有可能的排列,比如{1,2,3},因为我每次都可以选择两个数字。我知道这可以使用排列函数来完成,但是我的列表可能非常大,并且在创建这样一个巨大的矩阵之后,对它进行任何操作都需要很长时间。因此,我编写了以下递归函数来执行我想要的操作:

h=Table[Null,{}]    
myset = {1, 2, 3};
numOfBins = 2;
h=Table[Null,{numOfBins}];
rec[x_] := (
   If[
    x <= numOfBins,
    Do[
     h[[x]] = j; 
     rec[x + 1],
     {j, 1, Length[myset]}
     ],
    Print[h]
    ]
   );
rec[1]

此代码的结果是:

{1,1}
{1,2}
{1,3}
{2,1}
{2,2}
{2,3}
{3,1}
{3,2} 
{3,3}

现在我想知道如何使用Nest或NestWhile进行函数式编程...

1 个答案:

答案 0 :(得分:0)

如果您只请求长度为2的排列,Mathematica可以相当快地返回结果。

AbsoluteTiming[Permutations[Range[500], {2}]]

permutations of length2

Mathematica不首先生成所有排列,然后选择长度为2的排列。它甚至无法处理查找500个项目列表的所有排列的任务。

Permutations[Range[500]]

all permutations