我在创建基于关系的程序时遇到了一些麻烦,我需要创建一个函数来将相关节点聚合在一起,像这样,如果我有这 4 个节点:
- 一个
- 乙
- 碳
- 德
如果 A -> B、B -> C、C -> D、A -> C、B -> D,如下所示: 节点
当 A -> D 时,我想创建一个中间节点,用从每个节点到这个新节点的单一连接替换这些节点之间的所有关系。像这样:
@<- 集群
A->@,B->@,C->@,D->@
因此,与 @ 有联系的人都与其所有成员有关系
这是为了避免 5x5、10x10、25x25 的关系,这些关系对于内存来说非常沉重。
我通过几个步骤实现了这个目标,首先我计算两者之间必须连接的公共节点,如果这些公共节点 > 5,那么我将它们聚类到一个组中并删除它们的连接。
此外,当连接被删除时,这意味着在某个下限以下,必须拆除集群,并重新创建节点之间的所有单一关系,
如果普通用户数 > 100,这种方法可能会很危险。
我想知道是否有人可以帮助我做这样的事情,比如在合理的时间内创建集群或拆除它,因为现在我的技术是 O(n)并且非常耗费资源
先感谢您
我认为你所说的“集群”就是图论中所说的“直接图中的强连通分量” https://en.wikipedia.org/wiki/Strongly_connected_component
您要求比 O(n) 更好的性能,但您没有说明 n 是多少。也许是节点数?查找强连通分量的最佳算法是 O(V+E),其中 V 是节点数,E 是连接数。因此,您的要求是不可能的。