gpt4 book ai didi

使用 Neo4j 图形数据库的图形分区算法

转载 作者:行者123 更新时间:2023-12-04 10:39:37 26 4
gpt4 key购买 nike

我知道有一些著名的图形分区算法工具,例如由 karypis Lab ( http://glaros.dtc.umn.edu/gkhome/metis/metis/overview ) 实现的 METIS

但我想知道有什么方法可以对存储在 Neo4j 中的图进行分区吗?
或者我必须转储 Neo4j 的数据并手动转换节点和边缘格式以适应 METIS 输入格式?

最佳答案

关于新的和有趣的算法,这绝不是详尽的或最先进的,但这些是我首先要看的地方:

具体算法:DiDiC (Distributed Diffusive Clustering) - 我在我的论文中使用过一次 ( Partitioning Graph Databases )

  • 您遍历所有节点,然后为每个节点检索所有邻居,以便将一些“某个单元”传播到所有邻居
  • 易于实现。
  • 可以确定性
  • 迭代 - 因为它基于迭代(如 Pregel 中的 super 步骤),您可以随时停止它。理论上,放置时间越长结果越好(尽管在某些情况下,在某些图形形状上它可能不稳定)
  • 当我们实现这一点时,我们在一台内存约 30GB 的机器上运行了 100 次迭代,最多可运行约 400 万个节点 - 完成时间不超过两天。

  • 具体算法: EvoCut "Finding sparse cuts locally using evolving sets" - 来自 Microsoft 的本地概率算法 - related to these papers
  • 实现难
  • 本地算法 - 类似 BFS 的访问模式(随机游走)
  • 我读那篇论文已经有一段时间了,但我记得它是建立在清晰的抽象之上的:
  • EvoNibble(可插拔 - 决定向当前集群添加多少邻域
  • EvoCut(多次调用 EvoNibble 查找本地集群)
  • EvoPartition(反复调用 EvoCut 对整个图进行分区)
  • 不确定性

  • 通用算法族: Hierarchical Graph Clustering

    从高层次:
  • 通过将节点折叠为聚合节点来粗化图
  • 粗化策略可选
  • 在粗化/较小的图中查找集群
  • 聚类策略可选
  • 逐渐去粗化图形,在每一步的聚类上进行细化
  • 精炼策略可选

  • 笔记:
  • 如果图形变化缓慢(或结果不需要是最新的),则可以粗化一次(或不经常),然后使用粗化图形 - 以节省计算
  • 我不知道推荐的具体算法

  • 一般限制 - 很少有聚类算法做的事情:
  • 未确认节点类型 - 即,所有节点都被同等对待
  • 未确认的关系类型 - 即所有关系均一视同仁
  • 未确认关系方向 - 即,关系被视为无向
  • 关于使用 Neo4j 图形数据库的图形分区算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117757/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com