1

毎回 2 つの数値を選択できるため、セットの可能なすべての順列 ({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を使用して関数型プログラミングを使用してこれを行う方法を知りたいです...

4

1 に答える 1

0

長さ 2 の順列だけを要求すると,Mathematica はかなり速く結果を返すことができます.

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

length2 の順列

Mathematica は最初にすべての順列を生成してから長さ2の順列を選択するわけではありません.500項目のリストのすべての順列を見つけるタスクを処理することさえできません.

Permutations[Range[500]]

すべての順列

于 2012-11-03T02:22:08.487 に答える