在非负加权网格中从单一来源到单一目的地的最短路径(n,5)

时间:2014-06-05 15:26:14

标签: algorithm graph grid time-complexity

我有一个包含n列和5行的网格。

每条边都是加权的而且是非负的。我需要从左下角开始,以最短的路径到达右上角。

我发现它的O(N ^ 2)复杂度,但我需要它在线性时间O(n)。

我会感激一些帮助。

我如何在线性时间内解决网格(n,2):

左下角是0,然后我开始通过一些比较来寻找它的邻居。在我从一开始就找到最小值之后,我会去他们的邻居并做同样的事情,我这样做直到我结束。

我对每个顶点和每个边缘进行一次删除,因此它是线性的。

提前谢谢你,

亚龙。

2 个答案:

答案 0 :(得分:0)

在此图表中,您有5n个顶点和5*4*n边,因此V=5nE=20n。 您可以使用priority_queue轻松应用Dijkstra来检索最小顶点,这将导致O(VlogV + ElogE)的时间复杂度,在这种情况下为O(N * logN)。

Dijkstra wiki link。它包含sudo代码。

如果您在谷歌搜索但是确保它使用priority_queue,您也可以找到它的C ++实现,否则它将花费log(N ^ 2)时间。如果你没有找到它给我发表评论,我会发给你它的实施。

答案 1 :(得分:0)

随意纠正我,但你不能在线性时间内做到这一点,或多或少不可能*

使用网格格式并不容易使用。

*不使用特殊约束