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
Algorithm 两个推销员——一个总是拜访最近的邻居,另一个总是拜访最远的邻居_Algorithm_Optimization_Graph_Computer Science - Fatal编程技术网

Algorithm 两个推销员——一个总是拜访最近的邻居,另一个总是拜访最远的邻居

Algorithm 两个推销员——一个总是拜访最近的邻居,另一个总是拜访最远的邻居,algorithm,optimization,graph,computer-science,Algorithm,Optimization,Graph,Computer Science,考虑与图论相关的这个问题: 设G一个大小为nxn的完整(每个顶点都连接到所有其他顶点)无向图。两个“推销员”以这种方式旅行:第一个总是访问最近的未访问顶点,第二个总是访问最远的顶点,直到他们都访问了所有顶点。我们必须为两名销售人员(他们可能不同)生成距离矩阵和起点,以便: 所有距离都是唯一的编辑:正整数 顶点到自身的距离始终为0 两位销售人员所覆盖的总距离之差必须是一个特定的数字,D 从A到B的距离等于从B到A的距离 有什么有效的算法可以帮助我?我只能考虑回溯,但我看不到任何方法来减少程序所

考虑与图论相关的这个问题: 设G一个大小为nxn的完整(每个顶点都连接到所有其他顶点)无向图。两个“推销员”以这种方式旅行:第一个总是访问最近的未访问顶点,第二个总是访问最远的顶点,直到他们都访问了所有顶点。我们必须为两名销售人员(他们可能不同)生成距离矩阵和起点,以便:

  • 所有距离都是唯一的编辑:正整数
  • 顶点到自身的距离始终为0
  • 两位销售人员所覆盖的总距离之差必须是一个特定的数字,D
  • 从A到B的距离等于从B到A的距离
有什么有效的算法可以帮助我?我只能考虑回溯,但我看不到任何方法来减少程序所要做的工作。

几何图形很有帮助

使用圆上点的距离似乎是可行的。似乎可以通过使圆半径变大或变小来确定调整
D

或者,也可以使用距离完全不同的任何2D形状。在这种情况下,应放大或缩小形状以获得正确的
D

  • 编辑:现在想想,最简单的解决方案可能是简单地选取N个随机2D点,比如32位整数坐标,以降低距离太接近相等的可能性。如果两个距离太近,只需为其中一个选择不同的点,直到其有效

理想情况下,您只需要计算出一个公式来确定
d
和比例因子之间的关系,我现在还不能确定。如果没有其他方法,您也可以使用二进制搜索或插值搜索或其他方法来搜索比例因子,以获得所需的
D
,但这是一种较慢的方法。

起点如何?我假设行驶的距离取决于起点?@gnasher729我必须找到起点以及距离矩阵。我发现你的方法的问题是我必须使用整数距离。因此,在我看来,使用几何学似乎比其他方法更难,不是吗?虽然它确实增加了一些额外的步骤。这里的真正目标是非常接近D。运行两个算法并跟踪跟踪跟踪哪些边。找到一个使用而另一个不使用的边,并调整它们的长度,以便更接近D,而不需要调整太多,以便算法采用另一条路径。这在大多数情况下都会起作用,其他情况可能需要特定的几何体才能起作用。棘手的情况是,当你无法调整它们时,当距离变得相等时,这一标准使得找到有效的解决方案变得相当困难。