最快的图形平面化算法

时间:2011-11-18 13:32:43

标签: algorithm optimization layout planar-graph

我正在使用Processing为复杂的数据和流程开发导航系统。作为其中的一部分,我已深入了解图形布局。这一切都很有趣,我对布局算法的看法是:力导向是为了sissies(只看它的比例...哈哈),特征向量投影很酷,杉山层看起来不错但在图形图上快速失败,虽然我依赖到目前为止,在特征向量上,我需要最小化边缘交叉以真正达到数据点。我知道,我知道NP-complete等。

我应该补充一点,我在应用 xy 装箱并使用类似Sugiyama的排列来减少跨行和列的边缘交叉时取得了一些成功。即:图形(| V | = 90,平均度数log | V |)可以从11000个交叉点开始 - > 1500(通过盒装特征向量) - > 300通过交替行和列排列来减少交叉。

但是当地的最小值......不管它是什么都围绕着这个标记,结果并不像它那样清晰。我对灯光的研究告诉我,我真的想要使用平面化算法,就像它们用于VLSI一样:

  1. 使用BFS或其他东西制作最大平面子图 表1.A将平面子图布局好像
  2. 巧妙添加优秀边缘以恢复原始图表
  3. 请回复您对最快平面化算法的看法,欢迎您深入了解您熟悉的任何特定优化。

    非常感谢!

2 个答案:

答案 0 :(得分:3)

鉴于所有图形都不是平面的(您知道),最好采用“次佳”方法而不是“始终提供最佳答案”方法。

我这样说是因为我在研究生院的室友遇到了同样的问题。他试图将图形转换为平面形状,并且所有保证最小边缘交叉的算法都太慢了。他最终做了什么只是实施一个随机算法。基本上,布置图形,然后是具有许多交叉边缘的跳汰节点,最终你将处理最坏的边缘块。

优点是:你可以在一段特定的时间后把它剪掉,所以如果你有时间限制,这总是在一定的时间内进行,如果你得到一个糟糕的图表,你可以再次运行它(通过已经布局的图表来获得更好的东西,并且编码相对容易。

缺点是你并不总是在交叉点获得全局最小值,并且如果图形卡在高交叉区域,他的算法有时会向远处射出一个节点以尝试解决它,这有时会导致真正的怪异的图表。

答案 1 :(得分:2)

您已经了解了很多图表布局,但我相信您的问题仍然不详。

通过执行以下操作,您可以非常快速地平面化任何图形:(1)在平面上随机布局图形(2)计算边缘交叉的位置(3)在交叉点处创建伪顶点(当你对非平面图使用基于平面性的布局时,这就是你要做的事情)(4)用新顶点和分割边扩展的图是自动平面的。

第一个困难来自于计算组合嵌入的算法,该组合嵌入最小化了边缘交叉的数量。第二个困难是使用该组合嵌入在欧几里得平面中进行布局,这在视觉上是吸引人的,例如,对于正交图布局,您可能希望最小化弯曲的数量,最大化面的大小,最小化整个图的面积等,并且这些目标可能相互冲突。

相关问题