【发布时间】:2013-10-09 14:10:33
【问题描述】:
根据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),城市(4)...城市(北)。我声称第二次计算是不必要的。如果我只计算一次 City(4) ... City(N) 的最短路线,我可以将其用于第二次计算并确定哪条路线更好。
使用这个技巧,我可以通过以下方式减少我为 K 城市所做的计算数量:(N - k) 这是我可以选择的第一个城市的选项数量,乘以 (N - K - 1)!这是我必须选择其余城市的选项数量,减去第一次,我需要执行完整计算。所以它将是(N - K)!。您需要对从 k = 3 到 k = N - 2 的所有 K 求和。
这是我去的最远,(也不是很远)...希望你能帮我计算一下。
【问题讨论】:
-
我认为这是改进 tsp 的已知技巧,以便与 O(n^2*2^n) 算法相比,它可以处理 1 或 2 个以上的城市。介意在此处发布您的代码吗?
-
@noooooooob 也发布了here
标签: traveling-salesman np-complete np np-hard