2

私の頭は私の問題のアルゴリズムを見つけるのに行き詰まります。

N数字(たとえば4)があり、すべてのXパーティション(X = N / 2)が必要だとします。

例:

2-{1,2,3,4}のパーティションは次のとおりです。(1,2)(1,3)(1,4)(2,3)(2,4)(3,4)[単純に:すべての組み合わせ]

これらの組み合わせを生成する方法がわかりません。あなたの誰かがマインドでアイデアを持っている場合(私はどの言語を気にしません。擬似コードは完全に十分です。それが反復的であるか明示的であるかは気にしません)。

よろしく、Bigbohne

4

3 に答える 3

5

Matlabにはこのための機能があります:

http://www.mathworks.com/help/techdoc/ref/nchoosek.html

>> x = [1,2,3,4]

x =

1     2     3     4

>> nchoosek(x, 2)

ans =

 1     2
 1     3
 1     4
 2     3
 2     4
 3     4

maxwellbのようなループ構造はmatlabでは非常に遅いです...

于 2010-09-07T15:47:33.373 に答える
1

これがmatlabコードです。

myNums = [2,3,6,5];
for i = 1:size(myNums,2)
    combinationsSet{i} = nchoosek(myNums,i);
end
于 2010-09-07T15:53:33.000 に答える
0
foreach i in SET
    foreach j in SET
        if i < j, SAY "I have a partition ($i,$j)"
    NEXT j
NEXT i

これは、セットの反復機能に依存し、N^2時間で動作します。

Matlabについては、combnkなどの提供されている関数を確認してください

于 2010-09-07T15:44:00.363 に答える