【问题标题】:What are good ways of organizing directed graph data?组织有向图数据的好方法是什么?
【发布时间】:2012-04-02 22:06:35
【问题描述】:

这是我的情况。我有一个图表,其中包含在不同时间添加的不同数据集。例如,set1 可能有几千个节点,然后 set2 稍后出现,我们应用业务逻辑创建从 set1 到 set2 的边(并忽略 set1 中没有到 set2 的边的任何顶点)。然后在稍后的时间点,我们得到 set3、set4 等等,并且相同的过程适用于每个 set 和它的前一个 set。

问题,最好的组织方式是什么?我之前所做的是将节点命名为 set1-xx、set2-xx 等。我面临的问题是,当我试图在当前集和前一个集之间运行分析时,我必须在整个图表中运行一个循环并查找以“setx”开头的所有节点。随着图表的增长,花了很长时间,所以我想到了另一种解决方案,即创建一个名为“set1”的节点并将其连接到该特定集合的所有节点。我正在测试它,但我想知道是否有更有效的方式或构建方式来处理这样的数据结构?有没有办法以某种方式分割这样的数据?

我认为通用解决方案是应用程序,但如果它有帮助,我正在使用 neo4j(因此该数据库的任何特定解决方案也很好)。

【问题讨论】:

    标签: data-structures graph graph-theory neo4j


    【解决方案1】:

    您有一种非常特殊的有向图,称为分层图

    数据结构的选择主要取决于预期的图密度(前一个集合/层中有多少节点通常连接到当前集合/层中的一个节点)以及您需要对其执行的操作大多数时候。让每一层直接由一个数字索引表示绝对是一个好主意(也就是说,最外层的结构将是一个集合/层的数组),并且大概您也可以每层使用一个顶点数组。但是,每个顶点的边列表(仅输出,或输入和输出边集,具体取决于您是否向后遍历层)可能是以下任何一种:

    • 顶点标识符的链接列表;如果图形非常稀疏并且经常添加/删除边,这很好。
    • 已排序的顶点标识符数组;如果图非常稀疏且不可变,这很好。
    • 布尔数组,由顶点标识符索引,确定给定顶点是否由当前顶点的边连接;如果图形很密集,这很好。

    “顶点标识符”可以有多种形式。例如,它可以是下一层顶点数组的索引。

    【讨论】:

      【解决方案2】:

      您的第二个解决方案是我要做的 - 创建一个 setX 节点并将属于该集合的所有节点连接到 setX。这样你的数据就被分区了,更容易查询。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-23
        • 1970-01-01
        • 2010-09-13
        • 2016-02-12
        • 2023-04-04
        • 2011-01-18
        • 2013-06-07
        • 1970-01-01
        相关资源
        最近更新 更多