我正在創建一組所有可能的排列,比如{1,2,3},因爲我可以每次選擇兩個數字。我知道這可以使用排列函數來完成,但我的列表可能非常大,在創建這樣一個巨大的矩陣後,對它進行任何操作都需要很長時間。因此,我寫了下面的遞歸函數,做什麼,我想:使用函數式編程在mathematica中模擬排列函數
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 ...
豈不矩陣是相同的巨大不管你怎麼做呢? –
我不是專業人士,但一些如何使用遞歸功能更快。 –
代碼的外觀看起來更像笛卡爾的乘法(將A乘以它自己)而不是置換。我想,如果你在標題中使用這個術語,你會得到更具體的幫助。 –