【梦的开始】图布局算法
目录
- 图布局算法定义
- 一、力导引布局算法(Force-Directed Graph Layout)
- 1.1 弹簧-电荷力模型
- 1.2 引力/斥力模型
- 1.3 应力模型
- 二、降维布局算法
图布局算法定义
图布局算法(Graph Layout Algorithm) 是一类专门用于将抽象的图(Graph)结构转化为可视化空间排列的算法。其核心目标是通过数学建模和计算,将图中的节点(Node)和边(Edge)转化为二维或三维坐标系中的几何图形,使复杂的拓扑关系能够以直观、可理解的视觉形式呈现。
常见的图布局算法包含以下几类:
(1)力导引布局算法
(2)降维布局算法
一、力导引布局算法(Force-Directed Graph Layout)
1.1 弹簧-电荷力模型
Eades
在1984
年发表了一篇论文A heuristic for graph drawing
,认为一个“漂亮”的图布局,应该满足以下两个条件:
- 布局中的所有连边长度应该相同
- 布局应该尽可能对称
然后他提出一个想法,认为可以通过模拟物理现象实现布局,即当系统中所有的节点处于受力平衡的时候,可以得到一个“漂亮”的图布局。模型定义如下:
- 弹簧引力:把节点之间的连边当成弹簧,弹簧力会令连边的长度尽可能接近“理想长度”,想象一下真实世界的弹簧。
- 电荷斥力:任意两个节点之间存在一个斥力,令所有节点之间不堆叠,想象以下两个磁铁。
在弹簧-电荷里模型下,能够保证:
- 有边连接的节点会互相靠近(理想距离)
- 节点间不能离得太近
1.2 引力/斥力模型
弹簧电荷力模型就是力导引布局算法的
1.3 应力模型
2012-Spring Embedders and Force Directed Graph Drawing Algorithms,想要深入了解弹簧模型可以参考这篇论文。Spring Embedder这两个词的意思就是将弹簧力嵌入到布局算法中。虽然灵感来源是弹簧力(胡克定律),但是在实际计算力的时候并没有严格遵守胡克定律,而是自定义的一个力的作用。引力和斥力都利用同样一个公式来计算,因为最初是由弹簧产生的灵感,所以后来被称作Eades弹簧模型。