English 中文(简体)
距离变化动态的图表的最短路? (最大能源途径)
原标题:Shortest path on a graph where distances change dynamically? (maximum energy path)

我试图在两顶楼之间找到一条最短的道路,一条离散的能源环境,最短的道路是在总的道路上最小的。 也许最大的能源途径是更正确的术语,但换言之,即使一条道路绕过地貌,但不会落到山谷,也被认为是好的。

我最初的想法是,绘制地貌图,其中的权重是邻国之间在地貌高度上的差别,对cent和世系而言,两者都是负面的。 我刚刚认识到,这不会给我带来必要的结果,实际上,地方最高层之间的所有道路都将付出同样的代价。

我然后认识到,如果该图表上的距离取决于目前的状况和历史,那么我就能够取得我所需要的结果。 例如,如果这条道路已经走下,从山谷走,那么我就将不给他额外的费用,以压倒另一个山谷(只要道路上走得太低,以前就没有。)

www.un.org/Depts/DGACM/index_spanish.htm 如果有图象搜索算法,距离会随着探索途径而动态变化?

www.un.org/Depts/DGACM/index_spanish.htm 是否有其他建议来解决这一问题?

最佳回答

这被称为Bottleneck最短路问题。 这实际上比最短的道路问题更容易,可以在不直接的图表上按部就班地解决。 See for example here

问题回答

Idea

我建议采用一种算法,建立附属树木,每个树冠中都有一个vert清单。 每个小林将包含一套由山谷分离的vert。 为了在两条节点之间找到距离,人们将不得不在树中找到其最低的共同祖先。

Algorithm

初始:

  1. Sort the vertices ascending by height (space: O(V), time: O(V log V))
  2. Let T consist only of a root node r

MakeTree(G, r):

  1. Take the lowest vertex in the graph G, remove it from graph and add to the list in the root r (time cost per vertex: O(1 + E/V))
  2. Repeat the above step as long as the graph is connected
  3. For each connected component G of the graph G:
    1. create a new node n in T, attach the node as a child of the root
    2. recursively run MakeTree(G , n)

现在,如果你想要从Boutex ́>,A/ >/> >>到<>>>,你的最大能量途径是,通过最高层的vert,“最低共同共同点”——<>最低共同点——<>-->--->>>----->-------->。 为了找到距离,只是找到了最低的共同祖先,并带上了最高的中间层:>>/>>>>>、>和计算>((A)- h(C)、ab(h(B)- h(C)->)>->>>。

Example

下面是图表样本,相应的树木(为了简洁起见,外阴标签是高的)。 例如,如果你想要从22到14岁,就必须通过10(树中最低共同祖先中的最高垂直点为22至10)。 如果你要从22人到20人,就必须通过13人(距离=22人至13人)。

“Example”/

或许有以下工作:

• 绘制景观图,加权重(八.a-高......b)。

浴室功能使高位升降或下降变得昂贵,正如你已经注意到的那样,光身高差是不够的,因为无论你走过哪条路,在地图上总是有 任何<>>>>> 。

离散是平原距离(或在所有情况下都是固定的1线),可以省略,但如果你想获得short,则会长途说来,以其他成本计算。

当然,它没有经过测试:

鉴于终点为最高点,你的问题相当于:

图表中的x,请(x)在起点以下距离。 (所有要点都低于起点)。

找到尽可能减少的途径: 最大(h)(x) 步行。

你可以使用Dijkstra最短的公式来解决这一问题。 我对计算法的说明进行了编辑和修改(只有第3步变动中的距离计算)。

  1. 在每个航道上分配距离值。 对我们最初的节点和所有其他节点的定论,将其定为零。

  2. 将所有节点都标记为未见点。 最初的节点为时值。

  3. 就目前的节点而言,考虑其所有未见的邻国,计算其暂定距离(从最初的节点起)。 例如,如果目前的航标(A)距离为6,并且与另一个航标(B)=7相关联,则通过A与B的距离将达到最大(6,7)=7。 如果这一距离低于先前记录的距离(开始时为零),则超过距离。

  4. When we are done considering all neighbors of the current node, mark it as visited. A visited node will not be checked ever again; its distance recorded now is final and minimal. If all nodes have been visited, finish. Otherwise, set the unvisited node with the smallest distance (from the initial node) as the next "current node" and continue from step 3.

因此,你根本不关心整个路程长度,正确吗? 只是你在路上遇到的最低价值吗?

如果是这样的话,那么你就应该把传统意义上的“distance”作为你的Dijkstra的费用。 你的要职应该以最高的能源价值来回去,这样,如果存在更好的道路,你就永远不会走低价值的道路。

我认为,这不同于@Paul Hankin在其答复中的建议。 这很可能在图表中开辟许多节点;我认为你可以优化如下:

  1. 利用[Euclidean或曼哈顿]距离这一目标,作为比较功能中的突破者。 这样,如果两个节点拥有同样的能源,你就会尝试更快地达到目标。

  2. 在给优先权问题增加节点时,不将其实际能源用于“成本”,而是使用其最低能量和迄今遇到的最小能源。 由于你只关心全球的稀释成本,一旦你再次被迫走低能源,那么,一切都比“成本”高。 这使得搜查行动如同在目标邻里进行正常的A*搜索。

  3. 开始在当地最高层进行搜索(我不喜欢,但我认为会更快)。

用距离作为第1号的破碎机,会影响到最低能源,但应当使事情更快(如A*搜索)。


Edit:, 这里的思路完全不同(但可能较慢)。

第一,吸收门槛能源。 Dijkstra/A*标准搜索,但拒绝任何能量低于门槛值的节点。 如果你没有一条道路,就会走较大的门槛,并再次尝试。 从一开始到目标,一个“安全”的初步分析是一条简单的道路(例如,后来就离开)。

现在这个门槛值增加,Reredo Dijkstra/A*。 这样做,直到你找到一条道路。 你们不能再找到一条道路的最后一条道路是一条最短的道路,这条道路的能量最短。

您还可以重新利用从一次搜索中的道路成本,作为下一次搜索的改进的A*超常状态。 由于门槛值的提高只会增加路程的长度,因此,它有一个


希望会有所帮助。 让我知道,什么都不明确。





相关问题
How to add/merge several Big O s into one

If I have an algorithm which is comprised of (let s say) three sub-algorithms, all with different O() characteristics, e.g.: algorithm A: O(n) algorithm B: O(log(n)) algorithm C: O(n log(n)) How do ...

Grokking Timsort

There s a (relatively) new sort on the block called Timsort. It s been used as Python s list.sort, and is now going to be the new Array.sort in Java 7. There s some documentation and a tiny Wikipedia ...

Manually implementing high performance algorithms in .NET

As a learning experience I recently tried implementing Quicksort with 3 way partitioning in C#. Apart from needing to add an extra range check on the left/right variables before the recursive call, ...

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

Enumerating All Minimal Directed Cycles Of A Directed Graph

I have a directed graph and my problem is to enumerate all the minimal (cycles that cannot be constructed as the union of other cycles) directed cycles of this graph. This is different from what the ...

Quick padding of a string in Delphi

I was trying to speed up a certain routine in an application, and my profiler, AQTime, identified one method in particular as a bottleneck. The method has been with us for years, and is part of a "...

热门标签