在MATLAB

时间:2016-03-02 00:43:36

标签: matlab combinations

假设我有一个向量n = 1:4

我想创建一个包含这些项的所有可能分组的单元格单元格,假设分组可以是任意大小,可以有任意数量的组,但每个配置中必须存在每个值。

以下是我想要创建的一个示例,但没有每种可能性:

possibilities = {
    {[1 2 3 4]},...
    {[1 2 3], 4},...
    {[1 2 4], 3},...
    ...
    {[1 3], [2 4]},...
    ...
    {[1 3], 2, 4},...
    {1,2,3,4}
    }

因此,单元格中的每个单元格都包含值1:4,但它们可以任意分组为任意大小的组。唯一的限制是每个唯一群集只应出现一次,其中{[1 2 3], 4}{[2 1 3], 4}{4, [3 1 2]}相同。

我认为nchoosek功能可能有用,但说实话,我很困惑如何以合理优雅的方式将它们组合在一起。

2 个答案:

答案 0 :(得分:2)

Dan向我指出exactly what i wanted ...

为了发布问题的答案,这是它的工作原理。

>> possibilities = partitions(4)

possibilities = 

    {1x1 cell}
    {1x2 cell}
    {1x2 cell}
    {1x2 cell}
    {1x3 cell}
    {1x2 cell}
    {1x2 cell}
    {1x3 cell}
    {1x2 cell}
    {1x2 cell}
    {1x3 cell}
    {1x3 cell}
    {1x3 cell}
    {1x3 cell}
    {1x4 cell}

>> partdisp(possibilities)

The 15 partitions of set {1 2 3 4}:
{1 2 3 4} 
{1 2 3} {4} 
{1 2 4} {3} 
{1 2} {3 4} 
{1 2} {3} {4} 
{1 3 4} {2} 
{1 3} {2 4} 
{1 3} {2} {4} 
{1 4} {2 3} 
{1} {2 3 4} 
{1} {2 3} {4} 
{1 4} {2} {3} 
{1} {2 4} {3} 
{1} {2} {3 4} 
{1} {2} {3} {4} 

答案 1 :(得分:-1)

您可以使用combnk

a = 1:4;
for k = 1:length(a) 
    C{k} = combnk(a,k); 
end

我认为数学概念称为 power set 。请注意,上面的示例错过了empy集。