2016-03-02 19 views
3

可以說我有一個向量n = 1:4在MATLAB中獲得所有可能的聚類

我想創建一個單元格數組,其中包含這些項目的所有可能的分組,假設分組的大小可以是任意大小,則可以有任意數量的組,但每個配置中必須存在每個值。

這裏是想什麼i到創建一個示例,但沒有每個可能性:

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函數可能有用,但老實說,我很困惑如何把它放在一個合理的優雅的方式。

+1

如果你看看文件交換,我相信你可以找到一些將做一個設置分區。 – beaker

+3

這一個甚至在你的文檔中使用你的測試用例作爲例子:http://www.mathworks.com/matlabcentral/fileexchange/24185-partitions – Dan

回答

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

您可以使用combnk

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

我覺得數學概念被稱爲發電機組。請注意,上面的例子錯過了Empy集。

+0

我考慮過這些方面的內容,但'combnk'沒有填寫集羣以便使用所有項目。例如'{[1 2 3]}'是無效的,因爲它缺少'4' –

+0

你是對的。你可以在C {k}中的每個矩陣的每一行上用'1:4'通過'setdiff'獲得它。正如我的解決方案是**無效**。 – Dominic

相關問題