【发布时间】:2026-02-21 08:50:01
【问题描述】:
我正在开发一个音乐应用程序,但我遇到了算法问题。这是问题的玩具版本。假设我们有n 想按特定顺序访问的城市。我们得到的是每个“步骤”的可能城市列表:
{{"London","Glasgow"},{"Munich","London"},{"Glasgow","Munich","London"}}
我们必须通过从每个子列表中选择一个城市来将其简化为一个城市列表。我们还给出了每个城市之间的距离列表:
{{"London"->"Glasgow,100},{"London"->"Munich",400},{"Munich"->"London",300},...}
请注意,此列表不是对称的 - 伦敦到慕尼黑可能与慕尼黑到伦敦不同(这是德国飞机的效率)。还假设任何城市到自身的距离为 0。我们希望选择总距离最小的列表。
列表不一定要打到每个城市,可以多次打到同一个城市。对于上面的示例,最有效的解决方案是
{London, London, London}.
到目前为止,我一直在使用贪心算法,但这并不总是能给出最好的结果。我考虑过的唯一其他选择(除了蛮力)是遗传算法,但这也不能保证给出最佳解决方案。
实现这一点最有效的算法是什么?
【问题讨论】:
-
看起来像TSP
-
@Cid 我也是这么想的,但是很大的不同是这个不用走遍每个城市,可以连续多次访问同一个城市,并且有一个选项列表而不仅仅是城市和距离的列表。所以我不确定 TSP 算法如何适应。
-
在TSP问题中,我们需要访问里面的每个城市,但是在这里,如果我们创建伪起始城市和结束城市,我们就会遇到最短路径问题。现在让我们考虑问题的规模......
-
我不清楚您是否有每个 city 或每个 时间步长 的可能下一个城市列表。无论如何,如果列表不必覆盖每个城市,那么最佳解决方案是一个空列表。
-
@j_random_hacker 我在规范中声明我们必须从每个选项中选择一个城市。
标签: algorithm