【发布时间】:2009-06-03 21:40:52
【问题描述】:
有人知道从有向图计算线有向图的有效算法吗?见http://en.wikipedia.org/wiki/Line_graph(维基百科文章在底部附近提到了二合字母的情况(在概括部分)。理想情况下,我想在线性时间内做到这一点。
从那个部分:
- 如果 G 是有向图,则其有向折线图或折线图对于 G 的每条边都有一个顶点。
- 当 v = w 时,表示 G 中从 u 到 v 和从 w 到 x 的有向边的两个顶点由线有向图中从 uv 到 wx 的边连接。
设 G 为有向图 设L(G)为有向线图
在给定 G 的情况下,我可以想出的生成 L(G) 的算法是:
- 遍历 G 的所有边以生成 L(G) 的节点
- 遍历 L(G) 中的所有节点对 (uv, wx) 并在 v = w 时连接
这是一个 O(n^2) 算法。
似乎应该有一种方法可以将其降低到 O(n) 时间。我会去考虑这个,但我想我会问堆栈溢出,以防万一有一些我不知道的著名(或不那么著名)算法可以做到这一点。
【问题讨论】:
-
我猜最好的解决方法是更改第二步“遍历 L(G) 中的所有节点对 (uv, wc) ...)”,使其而是“遍历 G 中的所有节点 v”。
-
那么对于每个传入边 uv 和传出边 vx 将在 L(G) 中有一条边(在节点 uv 和 vx 之间)。虽然这听起来仍然像一个 O(n^2) 算法。也许对此有某种摊销分析?
标签: algorithm graph-theory linegraph