线性时间的拓扑排序?

时间:2014-08-31 20:55:11

标签: algorithm sorting

我读了几个声称可以在线性时间内进行拓扑排序的地方。 这里提出了一个这样的主张 - 他们说 - O(V + E) http://en.wikipedia.org/wiki/Topological_sorting

但他们拥有的算法:在一个while循环中有一个。我认为这使它成为O(n ^ 2)。

然后我在幻灯片19上找到了这个解决方案 - https://courses.cs.washington.edu/courses/cse326/03wi/lectures/RaoLect20.pdf - 显然他们正在寻找更快的方法 - 但是在第3步的第二步,他们正在寻找所有相邻节点(在while循环内),所以它也是O(n ^ 2)。

这种情况也是如此 - http://www.geeksforgeeks.org/topological-sorting/

我在这里缺少什么?

1 个答案:

答案 0 :(得分:7)

  

在while循环中有一个for。我认为这会使它成为O(n ^ 2)。

如果使用图形的邻接列表表示,则在内部循环中只查看每个边缘一次,因此它的O(max {n,m})= O(n + m)。 / p>

当然它也是O(n ^ 2),但这不是一个紧张的上限。

  

他们正在寻找所有相邻节点(在while循环内),因此也使它成为O(n ^ 2)。

如果您使用邻接列表来表示图表,那么它也是O(n + m)。