假设有“M”个对象旨在一起形成联盟。我需要知道如何使用M * M二元矩阵穷尽地生成所有可能的联盟形式,并给出以下属性:
1-主对角线的元素设置为1(每个对象与其自身在同一个联盟中)
2-矩阵是对称的(两个对象在同一联盟中是相互关系)
3-如果对象(i,j)属于同一联盟,并且(j,k)属于同一联盟,那么(i,k)也属于同一联盟。
这个例子给出了一个简单形成有4个物体的联盟:
答案 0 :(得分:0)
您可以使用更容易生成的其他数据结构,然后将其转换为您想要的矩阵。使用具有联盟ID的列表,其中联盟ID是所有对象ID的最小值。对于您的示例,这将是[1 2 1 1]
。使用此数据结构,可以更轻松地描述生成器。
对于每个对象,您可以选择加入由身份较小的对象打开的现有联盟之一,或者打开一个新的联盟。
可能没有vectrorized解决方案,实现这个使用递归或动态编程。