图压实算法

简介: ## 一、定义 将一个原本较为稀疏的图布局,进行压实操作,从而提高画布空间利用率,便于用户理解。 ## 二、适用场景 1. 图面积最小化:即移除多余的空间,将稀疏图变为紧密图。 1. 布局编译:从符号布局生成蒙版布局,电路板。 1. 重新设计:自动清除违反设计规则的情况。 1. 重新缩放:将蒙版级别的布局从一种技术转换到另一种。 在实际场景中,通常用于电路板的排版中。

一、定义

将一个原本较为稀疏的图布局,进行压实操作,从而提高画布空间利用率,便于用户理解。

二、适用场景

  1. 图面积最小化:即移除多余的空间,将稀疏图变为紧密图。
  2. 布局编译:从符号布局生成蒙版布局,电路板。
  3. 重新设计:自动清除违反设计规则的情况。
  4. 重新缩放:将蒙版级别的布局从一种技术转换到另一种。

在实际场景中,通常用于电路板的排版中。
image.png

三、操作

在压实操作中,可以通过控制以下因素来进行:

  1. 节点之间的间隔
  2. 节点的大小
  3. 节点的形状

四、压实算法

1. 算法种类

算法根据考虑的因素不同分为两类:

  • 第一类,基于最小化节点间的距离。

    • Constraint graph based,基于约束图
    • Virtual grid based,基于虚拟网格
  • 第二类,基于节点的移动方向。

    • 1-D compaction
    • 2-D compaction
    • 1/1/2-D compaction

2. 基于约束图的压实

将节点之间的关联,构建成一个约束图 。约束条件一般分为两种:

2.1 最小距离约束(分隔约束)

即两个元件之间的最小距离,需要大于指定值。
指定最小距离为b,节点的最小宽度为a,则需要满以下约束条件:

image.png


构建约束图,

  • 上图中每一个变量表示成约束图中的节点,
  • 对于每个条件,换成为约束图的一条边,边的权重为。
  • 新增一个额外的虚拟节点,0表示节点的x坐标是0,从而所有的节点都在该节点的右侧。
  • 把所有的不等式条件约束,全都转化为最小距离约束,就会生成一个dag。

如上图最终生成的约束图为:
image.png

2.2 最大距离约束(关联约束)

即两个元件的距离,需要保持在一个指定范围内。满足,等价于
最大距离约束,在约束图中用反向边来表示。如下图:

  • [ ] image.png

3. 基于虚拟网格的压实

假设,节点的布局是在网格上进行的。每一个元件都在网格线上,两条平行相邻轴线之间的距离为,两个轴线上元素之间的最大间距。
image.png
通过移动轴线距离,来达到压实的目的。缺点: 最终生成的图的紧密程度较差,不如约束图的结果。


image.png

4. 切分网格压实

基于网格压实的进一步改进,即同一行或同一列上的节点可以进行拆分,拆分到不同的行列上。从而增加图的紧密性。
image.png
效果:
image.png

五、压实维度

1. 维度

  • 一维,在一次压实操作中,元素的移动方向只能是水平或者垂直。通常会结合一次横向压实,一次纵向压实使用。
  • 二维,即在压实操作中,元素可以同时在水平和垂直方向上发生移动。复杂度较高,NP问题

2. 一维(先x后y)

即通过两次一维压实组合,先进行水平方向上的压实,再进行垂直方向上的压实。

  • 每个节点大小都是2*2,
  • 节点间的最小间距是1,
  • 初始布局容器大小是11*11,
  • 优化完后大小是8*11

image.png

3. 一维(先y后x)

即通过两次一维压实组合,先进行垂直方向上的压实,再进行水平方向上的压实。

  • 每个节点大小都是2*2,
  • 节点间的最小间距是1,
  • 初始布局容器大小是11*11,
  • 优化完后大小是11*8

image.png

4. 二维

  • 每个节点大小都是2*2,
  • 节点间的最小间距是1,
  • 初始布局容器大小是11*11,
  • 优化完后大小是8*8

image.png
优点: 二维压实的效果很明显比一维的效果好。
缺点:耗时

5. 一又二分之一维

一维和二维方式的中间方案,在x轴压实操作中,考虑少量的y轴压实。
根据节点,以及节点之间的位置关系,构建X-Y邻接图。

  • 如果两个相邻的节点在同一个水平线上,就在两个节点间增加一条水平线。
  • 如果两个相邻的节点在同一个垂直线上,就在两个节点间增加一条垂直线。
  • 线上的label,标记两个节点之间的最短距离。
  • 分别在上下左右增加四个虚拟节点,以保证节点在一个限定范围内。

六、布局应用

上述布局是在电路排版中的应用到的算法,算法中会为了极致的缩小空间,从而损失掉一部分节点的相对位置信息,比如层次信息等。回归到正常图布局中(如建模ER图),可以借鉴一部分的方式,比如基于虚拟网格的一维压实操作。

七、参考资料

http://cas.et.tudelft.nl/~nick/courses/eda-0809/slides/04_compaction.pdf

https://www.youtube.com/watch?v=JHDuTYeOTZg

相关文章
|
7月前
|
算法 搜索推荐 图计算
图计算中的社区发现算法是什么?请解释其作用和常用算法。
图计算中的社区发现算法是什么?请解释其作用和常用算法。
150 0
|
7月前
|
存储 算法 测试技术
☆打卡算法☆LeetCode 133. 克隆图 算法解析
☆打卡算法☆LeetCode 133. 克隆图 算法解析
|
7月前
|
存储 人工智能 算法
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
图与树的遍历:探索广度优先、深度优先及其他遍历算法的原理与实现
457 0
|
6月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
51 4
|
5月前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
52 1
|
5月前
|
数据采集 存储 算法
「AIGC算法」图搜索算法详解
本文探讨了图搜索算法,包括遍历和最短路径搜索。DFS和BFS是遍历算法,前者使用栈深入搜索,后者用队列逐层遍历。Dijkstra、Bellman-Ford、A*、Floyd-Warshall和Johnson算法则解决最短路径问题。文中还给出了DFS的Python实现示例。这些算法在路径规划、网络分析等领域有重要应用。
158 0
|
7月前
|
存储 算法 C++
c++算法学习笔记 (8) 树与图部分
c++算法学习笔记 (8) 树与图部分
|
7月前
|
算法 数据可视化 大数据
圆堆图circle packing算法可视化分析电商平台网红零食销量采集数据
圆堆图circle packing算法可视化分析电商平台网红零食销量采集数据
|
6月前
|
算法 计算机视觉
图像处理之基于图的广度优先搜索组件标记算法
图像处理之基于图的广度优先搜索组件标记算法
39 0
|
6月前
|
存储 算法
数据结构学习记录——图应用实例-六度空间(题目描述、算法思路、伪代码及解读、图解)
数据结构学习记录——图应用实例-六度空间(题目描述、算法思路、伪代码及解读、图解)
73 0