如何在matlab中构造无序对数据结构?

时间:2015-07-16 19:16:09

标签: matlab

如何在matlab中构造无序对结构?

让我们用E表示这样的结构,其中E = {(i,j),(k,p),...}和(i,j)=(j,i)。那么如何在matlab中构造E?有什么建议 ?

提前谢谢

2 个答案:

答案 0 :(得分:1)

Bas Swinckels建议的是一种有效存储集合的方法。由于每个操作包含两个元素,我将使用具有三个约束的矩阵:

  1. 在每一行中,第一个元素小于第二个元素。排序如果nessecary。这样,touple(i,j)和(j,i)得到相同的表示。
  2. 确保1.行必须是唯一的,以确保每个元素只出现一次。
  3. 要为集合创建唯一的表示形式,请对行进行排序。
  4. 对于任何输入,您可以使用此代码确保三个属性:

    >> M=[1,2;2,1;3,2;1,3;3,1]
    
    M =
    
         1     2
         2     1
         3     2
         1     3
         3     1
    
    >> sortrows(unique(sort(M,2),'rows'))
    
    ans =
    
         1     2
         1     3
         2     3
    

    sortrows对于大多数matlab版本来说都是多余的,因为unique已经过了排序)

    矩阵表示的替代方案是一个单元格:

    {[1,2],[1,3],[2,3]}
    

    它可能性能较差,但您可以将其扩展到不同大小的元组。在这种情况下,使用位掩码表示集合的最后一个替代方案似乎并不高效。

答案 1 :(得分:0)

任何具有相同行和列的对称矩阵都可以满足您的要求:

a = zeros(3)b = ones(2)

如果更改行和列,这两个矩阵是相同的示例,意思是:

a( i, j ) = a( j, i );

我希望这可以帮到你。