Algorithm 有趣的最小价格问题
共有n个公共汽车站,我们知道第i站和第j站之间的费用。 这是一条单行道。考虑到所有可能的连接,从第一站到第n站的路线的最低价格是多少?时间和内存消耗应该尽可能少 p、 举个例子,比如说,有4站。我们有这样一个价格表: . 3$ 5$ 7$ . . 1$ 3$ . . . 1$ . 3$ 5$ 7$ . . 1$ 3$ . . . 1$Algorithm 有趣的最小价格问题,algorithm,math,Algorithm,Math,共有n个公共汽车站,我们知道第i站和第j站之间的费用。 这是一条单行道。考虑到所有可能的连接,从第一站到第n站的路线的最低价格是多少?时间和内存消耗应该尽可能少 p、 举个例子,比如说,有4站。我们有这样一个价格表: . 3$ 5$ 7$ . . 1$ 3$ . . . 1$ . 3$ 5$ 7$ . . 1$ 3$ . . . 1$ 从1号到4号不停,我们付7美元。如果我们在第二站改变路线,我们需要支付3$+1$=4$才能开到第三站,但是如果我们开到终点站,我们需要多付2$,所以总
从1号到4号不停,我们付7美元。如果我们在第二站改变路线,我们需要支付3$+1$=4$才能开到第三站,但是如果我们开到终点站,我们需要多付2$,所以总体上需要花费6$,但是如果我们在第三站改变路线,我们需要支付4+1=5$。这是一个标准的加权有向图路径搜索。Dijkstra的算法可以找到从源节点到所有其他节点的最短路径,这是你能做的最好的方法。让
d[i][j]
成为给定的价格,l[k]
是从k
到n
的最小总成本。然后
l[n]=0
l[k]=min(d[k][i]+l[i],i=k+1..n)
运行时间为O(n^2)。(正如@Henrik所指出的,它是最优的。)输入数据的大小是n^2级,所以我不认为有O(n)算法。@Henrik如果没有,那是很有可能的,问题是:什么是最优的解决方案?是否只有I