Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 图遍历-为两个实体寻找两条最短路径,使它们永远不会接触(两者都在同一节点上)_Algorithm_Graph Theory_Graph Algorithm_Shortest Path - Fatal编程技术网

Algorithm 图遍历-为两个实体寻找两条最短路径,使它们永远不会接触(两者都在同一节点上)

Algorithm 图遍历-为两个实体寻找两条最短路径,使它们永远不会接触(两者都在同一节点上),algorithm,graph-theory,graph-algorithm,shortest-path,Algorithm,Graph Theory,Graph Algorithm,Shortest Path,我正试图弄明白这样的事情 在图中,有两个开始节点和两个目标节点。找到从第一个起点到第一个目的地,以及从另一个起点到另一个目的地的最佳路径,这样,如果两个实体沿着这些路径移动,它们将永远不会位于同一节点 我的第一个想法(虽然我真的不知道)是使用任何最短路径算法,比如说Dijkstra的。对第一个实体运行一次算法,并将为每个步骤选择的节点存储在数组中。对第二个实体再次运行该算法,如果在该数组索引处为步骤选择的节点与为第一个实体选择的节点相同,则它们将发生冲突,因此选择下一个最佳节点。必须有更好的方法

我正试图弄明白这样的事情

在图中,有两个开始节点和两个目标节点。找到从第一个起点到第一个目的地,以及从另一个起点到另一个目的地的最佳路径,这样,如果两个实体沿着这些路径移动,它们将永远不会位于同一节点

我的第一个想法(虽然我真的不知道)是使用任何最短路径算法,比如说Dijkstra的。对第一个实体运行一次算法,并将为每个步骤选择的节点存储在数组中。对第二个实体再次运行该算法,如果在该数组索引处为步骤选择的节点与为第一个实体选择的节点相同,则它们将发生冲突,因此选择下一个最佳节点。必须有更好的方法来做到这一点


我需要一些建议。谢谢
更新:根据下面的注释,上述解决方案实际上在d*E^2中运行。请注意,它将在d=V^2次迭代中收敛,因此总时间为(VE)^2。但更重要的是,该算法实际上与在乘积图G'=(V',E')上运行Bellman Ford相同,其中V'={(x,y)|x这是一种更快的方法。如上所述,并行运行两个查询,但为每个弧存储两个成本,每个查询一个。最初,所有弧的两个成本都相同。当一个查询步骤到达一个节点时,将该节点的所有传入弧的另一个查询的成本设置为无穷大。

它们可以在任何时间沿路径移动吗速度还是必须相同的速度(例如,如果一条路径中的第五个节点与另一条路径中的2st节点重叠,可以吗(例如,只有第五个节点和第五个节点相同会有问题)??只有第五个节点和第五个节点相同会有问题。就像两个孩子从学校走回家一样(虽然他们的出发点不同,所以假设他们从不同的教室开始行走)。其中一个试图避免与另一个直接接触,这样他就不会被欺负。:p复杂性应该是d*V^2*E^2,因为你需要在每次迭代中尝试所有相邻项的组合。此外,我还要提到空间复杂性,这通常是DP解决方案的一个缺点。不过,我认为这是找到o的最佳方法这个问题的最佳解决方案是,否则你必须接受一个近似值。我能对这个答案做进一步的澄清吗?我不太明白所说的是什么。@pjotr是的,每个迭代都要花费E^2来尝试所有的邻居,所以运行时是O(d*E^2)。d也可以被限制在O(V^2)出于同样的原因,图上Bellman Ford的迭代次数可以按照图的顺序进行限制,给出总时间O(V^2*E^2)。请参阅我关于如何做得更好的答案的更新。这个贪婪算法的问题是它不能保证正确。想象一个看起来像H的图,其中两条路径从顶部开始,需要到达底部。最佳解决方案是两个实体都直接向下,但两个实体中的一个得到to首先穿越。没有全局知识,它贪婪地穿越,阻挡了另一个。不,它没有阻挡另一个,因为它只阻挡了另一个实体进入H的横杆。你可能需要稍微伸展一下你的思维才能看到它。从左边来的旅行者可以从左到右穿越,因为我T不知道更好,随后阻止右边的一个。意图是让你考虑一个有7个顶点的H,而不是6个,左边的旅行者得到一个开始。贪婪算法必然会遇到像这样的边缘情况。