我知道有一些著名的图分区算法工具,比如由Karypis实验室开发的METIS (http://glaros.dtc.umn.edu/gkhome/metis/metis/overview)
但是我想知道是否有办法对存储在Neo4j中的图进行分区? 还是说我必须要导出Neo4j的数据并手动转换节点和边的格式以适应METIS的输入格式?
我知道有一些著名的图分区算法工具,比如由Karypis实验室开发的METIS (http://glaros.dtc.umn.edu/gkhome/metis/metis/overview)
但是我想知道是否有办法对存储在Neo4j中的图进行分区? 还是说我必须要导出Neo4j的数据并手动转换节点和边的格式以适应METIS的输入格式?
关于新颖且有趣的算法,这并不是穷尽所有,也不是最先进的,但这些是我首先会查看的地方:
具体算法:DiDiC(分布式扩散聚类) - 我在论文中使用过它(分区图数据库)
具体算法:EvoCut "使用演化集合在本地找到稀疏切割" - 来自微软的本地概率算法 - 与这些论文有关
算法家族: 分层图聚类
从高层次来看:
注:
一般限制 - 很少有聚类算法能够做到的事情:
我过去曾独立使用METIS和Neo4j工具,但我并不知道如何从Neo4j生成一个METIS文件。话虽如此,编写这样的工具应该是一项简单的任务,并且将是社区做出的伟大贡献。
另一种将METIS与Neo4j集成的方法可能是通过JNI从C++连接METIS到Neo4j。然而,这将涉及更多的任务,因为它必须处理诸如事务、并发等问题。
关于图分区的更普遍的问题,实现一些已知的较简单算法是完全可能的,只需要付出合理的努力即可。