2

我的头卡住了为我的问题寻找算法。

假设我有N数字(比如说 4)并且我想要所有 X 分区(X = N/2)

例子:

{1,2,3,4}的2-分区是:(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 回答