DAG在Java中的顶点/节点上具有权重的最短路径

时间:2018-02-06 17:35:34

标签: java algorithm performance directed-acyclic-graphs

weighted pie chart这是许多现有算法的微小变化,因此拓扑排序似乎是最明显和最有效的答案。

让我们举一个例子来更清楚地解释我的意思。

我有一个DAG从顶点A开始,有5个顶点/节点到E.我想找到从A到E的最短路径,这样每个节点本身都与路径一起加权,在某些时候每个节点都有可能节点可以有超过1个加权值。节点可以有许多变量,例如x,y和z。这些输入基于某些偏好(例如用户偏好)进行加权。因此,我们可以比x或z更重要地加权,这考虑了"更短的"路径。

我附上了一张图片来解释我想做什么。实现这一目标的最佳方法是什么?向节点添加权重的原因是给定输入对特定节点的偏好。

在饼图中我们可以看到Y的权重最大,偏好率为50%,因此我们将Y * N,其中N是计算权重的数字。在附图中的D中,x,y z将是{1,0.6,0.3}

编辑:根据原始答案,更新说明。简化了图表并添加了一个新的饼图来解释权重。

2 个答案:

答案 0 :(得分:0)

使用有向图,可以轻松处理节点上的权重。常见的方法如下:

  1. 将每个节点V拆分为两个节点V'和V"
  2. 从V'添加优势到V"权重等于节点的权重
  3. 对于每个入站边(U,V),在U"中添加图中的新边。到V'重量相同
  4. 对于每个出站边(V,T),在V&#34中添加图中的新边。到T'重量相同
  5. 现在,您已将问题缩小为常规问题中的最短路径问题。 DAG,你应该知道如何解决它。

    您的问题中多个权重的含义尚不清楚,但有两种选择:

    • 如果您的意思是您可以选择节点上的任何权重,只需在添加边V' - > V"
    • 时使用最小的权重
    • 如果权重是累积的,只需在添加边V' - > V"

答案 1 :(得分:0)

Create Edge(String startPoint, string EndPoint, int distance, int [] valueOther) {
    Distance=weight 
    ValueOther=Time{6am10, 6am30, 7am....}
    weight = distance + timewait + valueOther
}