Questions tagged «shortest-path»

有关在图中节点之间寻找最短路径的算法问题的疑问。

7
最小生成树与最短路径
最小生成树算法和最短路径算法有什么区别? 在我的数据结构课程中,我们介绍了两种最小生成树算法(Prim和Kruskal)和一种最短路径算法(Dijkstra)。 最小生成树是图形中跨越所有顶点的树,并且树的总权重最小。最短路径很明显,它是从一个顶点到另一个顶点的最短路径。 我不明白的是,由于最小生成树的总权重最小,树中的路径不是最短的路径吗?有人可以解释我所缺少的吗? 任何帮助表示赞赏。


3
检索动态图的最短路径
我目前正在研究有向图中的最短路径。有许多有效的算法可用于查找网络中的最短路径,例如dijkstra算法或bellman-ford算法。但是,如果图形是动态的,该怎么办?我说动态是指我们可以在程序执行期间插入或删除顶点。我正在尝试找到一种有效的算法,用于在插入边e之后更新从顶点到每个其他顶点u的最短路径,而无需在新图中再次运行最短路径算法。我怎样才能做到这一点?提前致谢。vvvüuuËee 注意:更改可以在算法的第一次迭代后完成 注[2]:两个节点中给出,源和Ť目标。我需要找到这些节点之间的最短路径。当图形更新时,我只需要更新π (s ,t ),这是s和t之间的最短路径。sssŤttπ(s ,t )π(s,t)\pi(s,t)sssŤtt 注意[3]:我只对边缘插入盒感兴趣。 正式定义:给定一个图。定义一个更新操作作为1)的边缘的插入ë到ë或2)的边缘的氨基酸缺失ë从ë。目的是有效地找到更新操作后所有对最短路径的成本。有效地,我们的意思至少比每次更新操作后执行All-Pairs-Shortest-Path算法(例如Bellman-Ford算法)更好。G = (V,E)G=(V,E)G = (V,E)ËeeËEEËeeËEE 编辑:下面是问题的简化版本: 给出了一个加权图,该图由单向边以及两个关键顶点s和t组成。还给出了候选双向边缘的集合C。我必须建立一个边缘(Û ,v )∈ Ç以最小化从距离小号到吨。ģ (V,E)G(V,E)G(V,E)sssŤttCCC(Û ,v )∈ Ç(u,v)∈C(u,v) \in CsssŤtt

1
在图形上添加边时,最短距离会变化多少?
令G=(V,E)G=(V,E)G=(V,E)是一些完整的,加权的,无向的图。我们通过从E到E '一对一地增加边来构造第二个图。我们总共将Θ (| V |)边加到G '。G′=(V,E′)G′=(V,E′)G'=(V, E')EEEE′E′E'Θ(|V|)Θ(|V|)\Theta(|V|)G′G′G' 每次我们添加一个边缘(u,v)(u,v)(u,v)于E′E′E',我们考虑所有对之间的最短距离在(V,E′)(V,E′)(V, E')和(V,E′∪{(u,v)})(V,E′∪{(u,v)})(V, E' \cup \{ (u,v) \})。我们计算由于加而导致的最短距离变化了多少(u,v)(u,v)(u,v)。让CiCiC_i是变化的,当我们添加的最短距离的数量iii边数,令为总和。nnn C = ∑ i C i有多大?C=∑iCinC=∑iCinC = \frac{\sum_i C_i}{n} 由于,所以C = O (n 2)也是如此。这个界限可以改善吗?请注意,我将C定义为所有相加边的平均值,因此,即使证明了C = Ω (n ),也没有那么有趣的一轮,因为距离变化很大。Ci=O(|V|2)=O(n2)Ci=O(|V|2)=O(n2)C_i = O(|V|^2)=O(n^2)C=O(n2)C=O(n2)C=O(n^2)CCCC=Ω(n)C=Ω(n)C = \Omega(n) 我有一种算法可以贪婪地计算几何t跨度,该算法可以在时间内工作,因此,如果C为o (n 2),则我的算法要比原始贪婪算法快,并且如果C真的很小,其速度可能比最著名的算法快(尽管我对此表示怀疑)。O(Cnlogn)O(Cnlog⁡n)O(C n \log n)CCCo(n2)o(n2)o(n^2)CCC 一些特定于问题的属性可能有助于确定界限:添加的边权重始终大于图中已存在的任何边的权重(不一定严格地更大)。此外,它的权重比u和v之间的最短路径短。(u,v)(u,v)(u,v)uuuvvv 您可以假定顶点对应于2d平面中的点,并且顶点之间的距离是这些点之间的欧几里得距离。也就是说,每个顶点对应于平面中的某个点(x ,y ),并且对于边(u ,v )= ((x 1,y …


2
使用Bellman Ford获得负循环
我必须在有向加权图中找到一个负周期。我知道Bellman Ford算法是如何工作的,它告诉我是否存在可达到的负周期。但是它没有明确命名。 如何获取循环的实际路径?v1,v2,…vk,v1v1,v2,…vk,v1v1, v2, \ldots vk, v1 应用标准算法后,我们已经进行了次迭代,因此不可能进一步改进。如果我们仍然可以降低到节点的距离,则存在负循环。n−1n−1n-1 我的想法是:由于我们知道仍然可以改善路径的边缘,并且知道每个节点的前身,因此我们可以从该边缘追溯到直到再次遇到它为止。现在我们应该有一个循环。 可悲的是,我没有找到任何可以告诉我这是否正确的论文。那么,它真的像那样工作吗? 编辑:此示例证明我的想法是错误的。给定下图,我们从节点运行Bellman-Ford 。1个11 我们按的顺序处理边缘。经过次迭代后,我们得到节点距离:n − 1a ,b ,c ,da,b,c,da, b, c, dn − 1n−1n-1 2 :- 30 3 :- 151:−51:−51: -5 2:−302:−302: -30 3:−153:−153: -15 和父表:有父有父有父 3 2 3 3 2111333 222333 333222 现在,进行第次迭代,我们发现仍可以使用边沿改善节点的距离。因此,我们知道存在一个负循环,而是其中的一部分。1 一个一个nnn111aaaaaa 但是,通过追溯到父表的方式,我们陷入了另一个负循环,再也不会相遇。一c,dc,dc, daaa 我们如何解决这个问题?

2
无向图上的最短路径?
所以我认为这个(虽然有些基本)问题属于这里: 假设我有一个大小为100的节点的图,以10x10的模式排列(请考虑棋盘)。该图是无向的和未加权的。在图形中移动涉及向前移动三个空间,向右或向左移动一个空间(类似于国际象棋骑士在棋盘上的移动方式)。 给定一个固定的开始节点,人们将如何找到通往板上其他任何节点的最短路径? 我以为可行的移动节点之间只有一条边。因此,鉴于此信息,我希望找到从起始节点到结束节点的最短路径。 我最初的想法是每条边的权重均为1。因此,我决定使用深度优先搜索的更改形式来进行此操作。 但是,我无法终生想象如何使用搜索获得最短路径。 我尝试的另一件事是将图以树形图作为起始节点作为根,然后选择最浅的(最低的行号)结果,该结果为我提供了所需的结束节点……这是可行的,但是效率极低,因此不适用于较大的图形。 有没有人有任何想法可以为我指出正确的方向? 非常感谢你。 (我试图对图表进行可视化处理,但由于声誉低下而无法执行)

6
为什么不能使用DFS在未加权图中查找最短路径?
我了解按原样使用DFS不会在未加权图中找到最短路径。 但是,为什么要对DFS进行调整,以使其能够在未加权图中找到最短路径,却前景如此?关于该主题的所有文字都简单地指出无法完成。我不敢相信(自己没有尝试过)。 您是否知道允许DFS在未加权图中找到最短路径的任何修改?如果不是,那么使它变得如此困难的算法又是什么呢?

4
巨型图上的Dijkstra算法
我对Dijkstra非常熟悉,并且对算法有一个特定的问题。如果我有一个巨大的图,例如35亿个节点(所有OpenStreetMap数据),那么我显然将无法在内存中使用该图,因此该图存储在数据库的磁盘上。 有一些库可用于计算此类图上的最短路径。他们如何做到这一点?更具体地说,他们如何加载图的必需部分以运行Dijkstra的算法? 根据我的统计数据,获取访问的每个顶点的邻接表将需要每10,000个节点大约1,500个数据库查询,因此显然不是他们如何做到的。那太慢了。 他们是如何做到的呢?我正在尝试自己实施。

2
有效地均匀且独立地随机采样最短的
令GGG为图,令sss和ttt为G的两个顶点GG。我们是否可以从s和t之间所有最短路径的集合中随机且均匀地有效采样最短sss - ttt路径?为简单起见,我们可以假设G是简单的,无向的和未加权的。ssttGG 即使在许多受限制的图中,sss和t之间最短路径的数量tt也可以是G的大小的指数GG。因此,我们自然希望避免实际计算所有最短的sss - ttt路径。我不了解一般情况,但是在我看来,我们可以通过一些特殊的图类来实现这一点。 感觉就像有人必须考虑过的事情。是否对此进行了任何研究,或者即使对于一般图形,实际上也很容易做到吗?

2
嵌入欧氏平面(2D)的图形的最短非相交路径
您将使用哪种算法来找到图的最短路径,该最短路径被嵌入到欧几里德平面中,因此该路径不应包含任何自相交(在嵌入中)? 例如,在下面的图表中,你想从去。通常,像Dijkstra算法那样的算法会产生如下序列:(0 ,0 )→ (- 3 ,2 )(0,0)→(-3,2)(0,0) \rightarrow (-3,2) [(0 ,0 )→3(0 ,3 )→2√(1 ,2 )→4(- 3 ,2 )] = 7 + 2–√。[(0,0)→3(0,3)→2(1个,2)→4(-3,2)]=7+2。\left[ (0,0) \stackrel {3}{\rightarrow} (0,3) \stackrel{\sqrt{2}}{\rightarrow} (1,2) \stackrel{4}{\rightarrow} (-3,2) \right] = 7+\sqrt{2}. 完整图: 最短的路径: 最短的非相交路径: 但是,此路径在欧几里得平面上相交,因此我需要一种算法,该算法可以为我提供最短的非相交序列,在这种情况下: [(0 ,0 )→3(0 ,3 )→3(0 ,6 )→5(- 3 ,2 )] = …

2
Bellman-Ford算法-为什么无法按顺序更新边缘?
的Bellman-Ford算法确定从源的最短路径到所有其它顶点。最初,与所有其他顶点之间距离设置为。然后计算从到每个顶点的最短路径;这正好为 迭代。我的问题是:小号∞ 小号| V | − 1ssssss∞∞\inftysss|V|−1|V|−1|V|-1 为什么需要迭代?|V|−1|V|−1|V|-1 如果以其他顺序检查边缘会不会很重要? 假设,如果我先检查边缘1,2,3,然后在第二次迭代中检查2,3,1。 麻省理工学院的埃里克教授说顺序并不重要,但是这使我感到困惑:如果算法的值取决于边缘但是是在之后更新的,该算法是否会错误地基于边缘更新节点?x2x2x_2x1x1x_1x1x1x_1x2x2x_2


1
一致性如何暗示试探法也是可以接受的?
启发式函数是...h (n )h(n)h (n) 一致的,如果从节点的估计成本的目标是不大于步骤成本其继任者ñ “加上从后继目标的估计成本。nnnn′n′n' 容许的,如果从来没有高估了真实成本的目标状态。h(n)h(n)h(n) 我的人工智能课程的教科书指出,一致性比可接纳性要强,但并不能证明这一点,因此我很难提出数学解释。

2
为什么我们不能仅通过添加一个常数使所有权重为正来找到负权重的最短路径?
我目前正在阅读算法的介绍,并由Johnson的算法得出,该算法取决于确保所有路径都是正的。 该算法取决于找到一个新的权重函数(w'),该权重函数对所有边都是正值,并保持最短路径关系的正确性。 通过计算要添加到w原始值的h(s),h(d)值来实现。 我的问题是,为什么不仅仅在图中找到最小的w并将其添加到所有边上?这将同时满足这两个条件,并且需要较少的计算。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.