Java 重建图以找到小于初始最短路径的优化图的数目

Java 重建图以找到小于初始最短路径的优化图的数目,java,algorithm,graph,shortest-path,Java,Algorithm,Graph,Shortest Path,我有一个图G={V,E},带加权边(所有正整数),我有这个图从源顶点a到目标顶点B的最短路径(假设这个最短路径等于100),通过Dijkstra的算法找到 我想找出所有方法,用相同数量的边和节点重建这个图,但修改节点之间的连接,使其成为绝对最短的,直到我再次达到100(没有重建的旧最短路径) 例如,我可以用一个连接到Z的权重为1的图重建,因此我的最短路径为1,这是重建图的一种方式。另一种方法是A到B到Z,每条边上的权重为1,使总路径的距离为2。然而,我还想计算一条路径,我们可以用A到Z的权重2…

我有一个图G={V,E},带加权边(所有正整数),我有这个图从源顶点a到目标顶点B的最短路径(假设这个最短路径等于100),通过Dijkstra的算法找到

我想找出所有方法,用相同数量的边和节点重建这个图,但修改节点之间的连接,使其成为绝对最短的,直到我再次达到100(没有重建的旧最短路径)

例如,我可以用一个连接到Z的权重为1的图重建,因此我的最短路径为1,这是重建图的一种方式。另一种方法是A到B到Z,每条边上的权重为1,使总路径的距离为2。然而,我还想计算一条路径,我们可以用A到Z的权重2…99来重建,这仍然满足这个路径比第一条路径短的条件(100)

我试图找出一种方法,找到所有可能被“重建”的路径,这些路径的距离比初始图中的初始最短路径要小

唯一的限制是,我仍然必须使用第一个图形中的所有顶点和边,但我可以将权重和边更改为使最短路径比以前更短的任何组合


编辑:目标不是找到最短路径,但是,可以使用从a到Z的路径重建的图形的最大数量小于初始图形从a到Z的最短路径。请参阅下面的注释以获得进一步说明。

这听起来像一个指数问题,因为您可以在源节点和目标节点之间任意添加任意数量的边,这是最简单的情况,所有边都有权重(1)

为了便于讨论,让我们将问题简化为两组图,一组图的所有边的权重为1,另一组图的所有边的权重为2,目标加权路径“t”为100

为了显示最坏的情况,让我们确保有大量节点,因此对于任何给定的集合,我们将假设有大量节点“n”可供选择

n>t/w

因此,第一组中使用的节点数有一个n>100+1的图,而对于第二组节点,该图必须有n>50+1,依此类推

对于具有100+1个节点且边权重为1的图形,可以从节点a开始,然后为下一条边选择任何剩余节点。从这里,您可以重复选择下一个节点98多次,然后直接从当前节点连接到第100条边的节点Z。因为在这种情况下,我们不允许1以外的循环或权重,所以我们就完成了。这假设我们可以选择的节点数量有限。对于边权重为1的一组图,有100个阶乘(100!)答案满足您的标准。这将成为一个组合问题,特别是如果节点数超过目标路径长度(n=200),那么它将变得更大,因为您可以从100个节点的多个集合中进行选择以生成最终路径

对于边权重为2的图,执行相同的操作,但需要较少的节点(50+1),但最终得到类似的结果50!。现在,对最大为100的所有边权重(连接a和Z的单条边)执行此操作,您就拥有了一组具有均匀边权重的所有路径,这些路径的总和达到了目标长度

因此,对于一组具有均匀边权重的图,这些图可以被均匀地整除为100,最终将得到最大数量的图

100!+50! + 25! + 20! + 10! + 5! + 4! + 2! + 一,

从这里开始,仍然有所有权重不均匀的路径。但您仍然可以从将非均匀权重组分解为子组开始

当边权重不能均匀地除以100时,仍然可以得到一个值,例如,边权重3为(33!+1),表示33条边的权重为3,一条边的权重为1,而边权重6为(16!+4),表示16条边的权重为6,一条边的权重为4。我们可以称之为双权图

在这一点上,组合学听起来是你最好的选择

例如,您可以说有n-1种方法可以将A和Z与权重为100的单个节点连接起来。我不知道如何在Stackoverflow上正确显示它,但你是说从一组n-1中选择1

然后找到所有图,这些图从a到某个任意节点p有一条权重为99的路径,然后从p到目标节点Z有另一条权重为1的边。因此,可以从#节点-2中选择第一条边(不包括源节点和目标节点)第二条边是给定的,因为它必须连接到Z,这给了我们

(n-2)!+一,

这归结为“从一组n-2中选择1,然后添加1”。一旦你过了这一关,它就会变得非常难看,因为开始有不止一种方法来选择剩下的边

下一种情况是选择一个权重为98的节点,然后找到总权重为2的图集

从一个有2个节点的图开始,然后再从这里开始开发一个通用的方法可能会更简单


基本上,您必须同时从剩余的边数和边权重中进行选择,以获得所有可连接的图集,给出给定值的路径长度。

1)当您说“重建”路径时,其距离小于初始最短路径,你是说用Dijkstra找到的最短加权路径吗?或者你的意思是不考虑权重的最短路径?(例如:在同一个图上使用Dijkstra,但所有边都有权重1)。@KellyS.French我的意思是最短加权路径。对不起,我的意思模棱两可。2)