4

我有一些使用 Neo4j 保存的图形数据库(朋友网络、购买历史等)。我计划使用Girvan Newman社区检测算法来分析这些。这些算法通常返回一个树状图,表示图从整个网络到各个节点的划分。我想知道如何坚持这些结果。我想它可以存储为单独的图表,但是有没有办法将它存储在图表本身中?我这样做的担心是需要创建节点来表示组,这是我想避免的。

4

2 回答 2

4

大多数社区检测算法通过沿图中现有边聚集社区来工作。Girvan-Newman 有点不寻常,因为它通过尖端来工作。无论哪种方式,树状图都可以被视为在图的边缘上显示操作的顺序。因此,您可以将属性附加到边缘(关系),而不是将树状图存储为单独的对象,以显示它们应该以何种顺序合并/切割。我对 Neo4j 的了解非常有限,所以我将把细节留给你。

合并有一些复杂性,因为通常会有多个等效边,每个边连接社区内的不同顶点以进行合并。基本上,只需选择一种策略,让您从边缘找出链接社区。

于 2011-12-05T15:22:22.913 回答
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 节点对象。

于 2011-12-06T14:34:08.907 回答