假设我有一个向量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
功能可能有用,但说实话,我很困惑如何以合理优雅的方式将它们组合在一起。
答案 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集。