0

根据wiki,它将需要(N-1)!计算 N 个城市的旅行。我找到了一种更好的方法,但我无法通过数学计算我改进了多少。我可以告诉你,在我的家用电脑上,我能够在不到 1 小时的时间内解决 20 个城市的地图。20!= 2.43290200e+18。这是我所做的:

当使用 brout 算法搜索 N 个城市的路线(让它们命名:City(1)、City(2)、City(3)...City(N))时,您将首先执行此测试:City( 1), City(2), City(3), City(4)... City(N) 一段时间后,这个:City(1), City(3), City(2), City(4 )... 城市 (N)。我声称第二次计算是不必要的。如果我只计算一次 City(4) ... City(N) 的最短路线,我可以将其用于第二次计算并确定哪条路线更好。

使用这个技巧,我可以通过以下方式减少我为 K 城市所做的计算次数: (N - k) 这是我可以选择的第一个城市的选项数量,乘以 (N - K - 1) !这是我必须选择其余城市的选项数量,减去第一次,我需要执行完整计算。所以它将是(N - K)!。您需要对从 k = 3 到 k = N - 2 的所有 K 求和。

这是我所到之处,(不远)......我希望你能帮我计算一下。

4

1 回答 1

1

存储和重用您已经计算的结果是动态规划背后的基本思想,对于 TSP 有随O[(N^2)*(2^N)]时间运行的动态规划算法,这将产生比您的算法更快的结果(您将能够解决 25 个顶点的问题几分钟内...)

请参阅:TSP 的动态规划

于 2013-10-09T14:57:24.203 回答