力导向图布局的性能和复杂性?
Posted
技术标签:
【中文标题】力导向图布局的性能和复杂性?【英文标题】:Performance and complexity of force-directed graph layouts? 【发布时间】:2017-11-27 02:01:47 【问题描述】:我有一个包含数千个节点和边的图表,我注意到 Cytoscape.js 的性能缺乏强制导向的 javascript 布局算法(cose 和 cola)。
我想知道我是否应该花时间寻找其他库或算法,或者这些算法的复杂性是否太高。在一个简单的算法中,我想每个节点都必须与其他节点进行比较,所以应该有一个二次复杂度,但是通过对连接性低的数据进行巧妙过滤,我可以想象出很好的近似值(我不需要数学上完美的结果,对用户来说只是直观的东西)。
我的目标是在典型的用户机器上在 10 秒内布局图表。
我找到的出版物(谷歌学术“力导向复杂性”):
A fast adaptive layout algorithm for undirected graphs (1995) 估计 O(|V|^3) The Galois Complexity of Graph Drawing: Why Numerical Solutions Are Ubiquitous for Force-Directed, Spectral, and Circle Packing Drawings 说很难精确计算(?,我不是图论者) A Multi-dimensional Approach to Force-Directed Layouts of Large Graphs “在亚二次时间和空间中生成二维、三维和更高维度的图形”,我将尝试找到该图形的 JavaScript 实现。【问题讨论】:
到目前为止你研究了什么?分享您的发现。 @MrSmith42:我添加了一些研究。 【参考方案1】:对于使用相邻节点之间的吸引力和所有节点之间的排斥力的布局算法,您可以使用Barnes--Hut 样式近似值来表示来自遥远节点的排斥力。这里只是一个简短的草图,因为 B--H 是一个常见的学校作业,并且应该有大量的教程材料。基本思想是,在每一步,对输入节点执行递归四叉树剖析,计算每个细分中的节点数。然后,为了近似特定节点上的力,递归地遍历树。如果我们到达一个远离该节点的细分,则计算斥力,就好像细分中的每个节点都位于中心一样(或预先计算平均值,只要可行)。
【讨论】:
以上是关于力导向图布局的性能和复杂性?的主要内容,如果未能解决你的问题,请参考以下文章
ECharts 力导向布局图怎么将数据库里的数据赋值给各个节点