【问题标题】:Fastest Algorithm For Graph Planarization图平面化的最快算法
【发布时间】:2011-11-18 13:32:43
【问题描述】:

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

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

但是局部最小值......无论它是什么都围绕着这个标记,结果并不像它可能的那样清晰。我对 lit 的研究表明,我真的很想使用平面化算法,就像他们在 VLSI 中使用的那样:

  1. 使用 BFS 或其他东西来制作最大平面子图 1.a.像 nice 一样布局平面子图
  2. 巧妙添加突出边,恢复原图

请回复您对最快平面化算法的想法,欢迎您深入了解您熟悉的任何特定优化。

非常感谢!

【问题讨论】:

  • 投票是因为您在一年后回来并评论了答案! :)

标签: algorithm optimization layout planar-graph


【解决方案1】:

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

我这样说是因为我在研究生院的室友遇到了和你一样的问题。他试图将图形转换为平面形式,而所有保证最小边缘交叉的算法都太慢了。他最终做了什么,只是实现了一个随机算法。基本上,布置图表,然后对边缘有很多交叉点的节点进行调整,最终您将处理最差的边缘块。

优点是:您可以在特定时间后将其删除,所以如果您有时间限制,这总是会在一定时间内出现,如果您得到一个糟糕的图表,您可以再次运行它(在已经布置好的图表上)以获得更好的东西,并且相对容易编码。

缺点是你并不总是在交叉点中得到全局最小值,如果图形卡在高交叉区域,他的算法有时会射出一个节点到远处尝试解决它,这有时会导致看起来很奇怪的图表。

【讨论】:

  • 好吧,这很明显,但我没有想到。好想法。明天我真的会试试的。 . .以及尝试实现蔡的平面化算法。
  • 我知道这是 1 岁,但结果证明这个想法非常有效。当然它会在一段时间后卡住,但效果非常好......也许就像模拟退火一样。
  • 很像模拟退火。很高兴它有用!
【解决方案2】:

您已经知道很多图表布局,但不幸的是,我相信您的问题仍然没有明确说明。

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

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

【讨论】:

  • 我实际上不确定您的方法是否已完全描述...虚拟顶点如何帮助解开图形?如果我想保留拓扑......而不添加新边怎么办?
  • 当一个图形是非平面的组合时,您需要通过将边缘交叉点转换为额外的顶点来将其转换为平面图形
  • @AnttiHuima 我认为这不是一个真正的答案,真正的问题仍然完全相同:如何最小化问题中的交叉点,以及如何最小化答案中的伪顶点.我不投票反对您的答案的唯一原因是它可以作为思考真实答案的良好起点。
猜你喜欢
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 2011-12-26
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多