假设,有一些'M‘对象旨在形成联盟。我需要知道如何在给定以下属性的情况下使用M*M二进制矩阵详尽地生成所有可能的联盟形式:
1-主对角线的元素设置为1(每个对象与其自身处于同一联盟中)
2-矩阵是对称的(两个对象处于同一联盟中是一种相互关系)
3-如果对象(i,j)在同一联盟中,并且(j,k)在同一联盟中,则(i,k)也在同一联盟中。
此示例给出了具有4个对象的联盟的简单形式:
发布于 2015-12-24 21:03:45
您可以使用另一个更容易生成的数据结构,然后将其转换为您想要的矩阵。使用具有联盟id的列表,其中联盟id是所有对象id中的最小值。对于您的示例,这将是[1 2 1 1]
。使用这种数据结构可以更容易地描述生成器。
对于每个对象,您可以选择加入由具有较小id的对象打开的现有联盟之一,或者打开一个新联盟。
可能没有矢量化的解决方案,可以使用递归或动态编程来实现这一点。
https://stackoverflow.com/questions/34452121
复制相似问题