找到所有边缘的最小最高成本的算法是什么?

时间:2019-10-18 14:22:13

标签: algorithm path nodes

我正在尝试解决一个问题,我需要找到从开始到目标节点的每步最低成本。我认为该算法存在,但是找不到该算法的名称。在我正在处理的情况下,仅存在上升沿,并且可能存在周期。 这不是dijkstra的,因为我不是在寻找最低总成本,而是要寻找代表所有步骤中最高成本的最低成本。

在下面的示例中,此算法将输出3,因为3是该算法可以找到路径的最高最小成本。 因此不是最小成本,因为那样会是4。 Example of algorithm that I am looking for

*起始节点为灰色,目标节点为绿色。

我认为存在这种算法,我曾尝试在Google上进行搜索,但到目前为止找不到该算法的名称。

2 个答案:

答案 0 :(得分:2)

这可以通过对dijkstra进行简单的修改来解决。

Dijkstra的工作方式始终是选择最低成本途径。我们知道,只要在图表中移动时路径成本永不减少(在您的情况下就是如此),我们就会始终按照从最低路径成本到最高路径成本的顺序进行迭代,以找到最佳答案。我们只需要将cost函数修改为每个路径的最大值,然后运行dijkstra。

这是一个伪代码(基本上是python)实现:

import priority_queue

def min_cost_path(start, end):
    min_heap = priority_queue([[0, start]]) # queue in form of (cost, node)
    visited = set()

    while min_heap:
        # get lowest weight path thus far
        # cost is the lowest cost possible to get to node
        cost, node = min_heap.pop()
        # optimal path to this node has already been found, ignore this
        if node in visited: continue
        if node == end: return cost
        # this node has been visited
        visited.add(node)
        # add candidate node-weights to the queue
        for weight, neighbor in neighbors(node):
            if neighbor not in visited:
                min_heap.push((max(weight, cost), neighbor))

    return -1 # not possible

答案 1 :(得分:0)

好吧,我只听说过无向图,有向图(如您的示例)这样的问题,我不知道它的调用方式,但不难想出一些有效的解决方法:

  1. 我们只能对答案进行二进制搜索,初始搜索空间为 [0,maxWeightInWholeGraph]

  2. 在二元搜索的每次迭代中,我们选择一些中间值m,并且需要检查是否存在从起始节点到目标节点的路径,其边缘权重为<= m

  3. 这可以通过简单的BFS来完成,只遍历允许的边缘

  4. 现在,如果找到起始目标路径,我们将搜索空间除以选择左半部分的一半,否则选择右半部分。

  5. 继续二进制搜索,直到我们收敛为答案为止

此方法的复杂性:O((| V | + | E |)* log2(maxWeightInWholeGraph))