我有一些图形数据库(朋友网络,购买历史等),我坚持使用Neo4j。我计划使用community detection algorithms等Girvan Newman分析这些内容。这些算法通常返回dendrogram,表示图形从整个网络到各个节点的划分。我想知道如何坚持这些结果。我想它可以存储为单独的图形,但是有没有办法将它存储在图形本身中?我这样做的顾虑是需要创建表示组的节点,这是我想要避免的。
答案 0 :(得分:4)
大多数社区检测算法通过沿图中现有边缘聚集社区来工作; Girvan-Newman有点不寻常,因为它的切边工作。无论哪种方式,树形图都可以被视为显示图形边缘上的操作顺序。因此,不是将树形图存储为单独的对象,而是可以将属性附加到边(关系),以显示它们应合并/切割的顺序。我对Neo4j的了解非常有限,所以我会把细节留给你。
合并存在一些复杂性,因为通常会有多个等效边,每个边连接社区内的不同顶点以进行合并。基本上,只需选择一种策略,让您从边缘找出链接的社区。
答案 1 :(得分:4)
表示树形图的一种方法是作为对的列表,包含n个元素的(n-1)对。假设该对的左侧元素是其ID保持引用社区中所有元素的元素,则样本树形图可能看起来像
[[0,1],[2,3],[0,2]]
因此,另一种持久化的方法可能是存储在每个节点,在该节点将它合并到另一个节点(以及之前已合并到其中的所有节点)。
所以你将(0:0)附加到1,(1:2)到3和(2:0)到2(时间步长:节点的新'名')。
编辑:具体地说,这可能意味着附加两个整数值属性,例如: 'merge_timestep'和'merge_into'到每个Neo4J节点对象。