有向图(拓扑排序)

时间:2014-03-27 22:30:31

标签: performance algorithm sorting big-o topological-sort

假设存在有向图,G(V, E)(V表示顶点,E表示边),其中每条边(x,y)与权重(x,y)相关联,其中权重是一个整数1和10。

假设stV中的一些顶点。

我想在时间O(m + n)中计算从st的最短路径,其中m是顶点数,n是边数。

我是否会在实现拓扑排序方面走上正轨?还是有另一种我忽视的技术?

1 个答案:

答案 0 :(得分:1)

在加权图中,您需要用于查找从给定顶点到另一个顶点的最小路径的算法是Dijkstra's algorithm。不幸的是,它的复杂性是O(n*log(n) + m),这可能比你试图完成的更多。

然而,在您的情况下,边缘是特殊的 - 它们的权重只有10个有效值。因此,您可以实现一种特殊的数据结构(堆的类型,但利用小的数据集)来使所有操作保持不变。

一种可行的方法是拥有10个列表 - 每个重量一个。在数据结构中添加边缘只是附加到列表中。找到最小元素是对10个列表进行迭代,以找到第一个非空的列表。这仍然是恒定的,因为将执行不超过10次迭代。删除最小元素也很简单 - 从列表中简单删除。

使用具有相同渐近复杂度的一些数据结构的Dijkstra算法将是您所需要的。