Algorithm 两类代价有向无环图的最短路径

Algorithm 两类代价有向无环图的最短路径,algorithm,dynamic-programming,graph-algorithm,shortest-path,Algorithm,Dynamic Programming,Graph Algorithm,Shortest Path,我得到了一个有向无环图G=(V,E),可以假设它是拓扑有序的(如果需要的话)。G中的边缘有两种类型的成本——名义成本w(e)和峰值成本p(e) 目标是找到从节点s到节点t的最短路径,从而最小化以下成本: sum_e(w(e))+max_e(p(e)),其中sum和max在路径中的所有边上 标准的动态规划方法表明该问题在O(E^2)时间内是可解的。有没有更有效的方法来解决这个问题?理想情况下,一个O(E*polylog(E,V))算法会很好 ----编辑----- 这是我用动态规划找到的O(E^2

我得到了一个有向无环图G=(V,E),可以假设它是拓扑有序的(如果需要的话)。G中的边缘有两种类型的成本——名义成本w(e)和峰值成本p(e)

目标是找到从节点s到节点t的最短路径,从而最小化以下成本: sum_e(w(e))+max_e(p(e)),其中sum和max在路径中的所有边上

标准的动态规划方法表明该问题在O(E^2)时间内是可解的。有没有更有效的方法来解决这个问题?理想情况下,一个O(E*polylog(E,V))算法会很好

----编辑-----

这是我用动态规划找到的O(E^2)解

首先,按升序排列所有成本p(e)。这需要O(Elog(E))时间

其次,定义由状态(x,i)组成的状态空间,其中x是图中的节点,i在1,2,…,E中。它表示“我们在节点x中,到目前为止我们看到的最大边权重p(e)是第i个最大值”

设V(x,i)是从s到x的最短路径(在经典意义上)的长度,其中遇到的最大p(e)是第i个最大路径。很容易计算V(x,i)的x(y,j),对于x的任何前任y和1中的j,…(e)(有两种情况要考虑-边缘y -x x是第j个最大的权重,或者它没有)。
在每个状态(x,i),此计算会找到约deg(x)值的最小值。因此,复杂性是O(| E |*sum(x\in V)deg(x))=O(| E | ^2),因为每个节点都与不同的状态相关联。

这只是一个2-近似,不是一个近似方案,但也许它会激励人们想出一个更好的答案

使用二进制搜索,找到最小峰值成本θ*,使得C(θ)是使用具有峰值成本的边的s-t路径的最小标称成本≤ θ、 我们有C(θ*)=θ*。每个解的名义成本或峰值成本至少与θ*一样大,因此θ*导致2-近似解


二进制搜索中的每个测试都涉及在具有峰值成本的子集上运行Dijkstra≤ θ、 因此,这个算法需要时间O(| E | log2 | E |),好吧,如果你想对它有技术性并使用斐波那契堆,O(| E |+| V | log | V |)log | E |)。

我看不到任何方法来获得你想要的复杂性。这是一个我认为在现实生活中实用的算法

首先,将图简化为只有s和t之间的顶点和边,并进行拓扑排序,以便可以轻松地在O(E)时间内找到最短路径


假设W(m)是路径的最小和(W(e))代价max(p(e))我不确定标准的DP方法在这里是如何工作的,因为我不清楚这个问题是否具有最优子结构。你能详细说明一下吗?是的,首先你按升序订购成本p(e)。现在,考虑状态空间(x,i),其中x是图中的一个节点,而i是1到e e之间的一个数。它表示“我们在节点x中,到目前为止我们看到的最大边权重p(e)是第i个最大值”。相应的动态规划函数V(x,i)表示从节点s到节点t的最短路径,其中最大p(e)代价是第i最高的。你按照预期推进它,从V(t,i)很容易计算出解决问题的路径。此外,这是问题的重要部分,请将你的解决方案添加到问题本身,它属于那里。在阅读了问题和上面的所有评论之后,我仍然怀疑:这里的目的是什么?是否要在所有成本最低的路径中找到分支数最少的路径?是否需要确切的答案?根据递减最短路径文献判断,可能更容易找到有效的近似方案。请注意,这基本上扩展了@davidisenstat以降低误差容差。该图是DAG,因此不必使用Dijkstra的。。。也许有一个DAG会建议一个更好的算法,因为你对这方面的文献很熟悉。@MattTimmermans很遗憾,所有可能足够快的文献都是针对无向图的。