根据wiki,它将需要(N-1)!计算N个城市的旅游。我发现了一种更好的方法,但我不能用数学计算我改进了多少。我可以告诉你,在我的家用电脑上,我能够在不到1小时内解决20个城市的地图。 20! = 2.43290200e + 18。这是我做的:
当搜索N个城市的路线时(让我们给它们命名:城市(1),城市(2),城市(3)...城市(N))使用brout算法,您将首先执行此测试:城市(1),城市(2),城市(3),城市(4)...城市(N)和之后的一段时间,这一个:城市(1),城市(3),城市(2),城市(4)...城市(N)。我声称第二次计算是不必要的。如果我只计算一次城市(4)的最短路线......城市(N)我可以用它进行第二次计算并确定哪条路线更好。
使用这个技巧我可以通过以下方式减少我为K市所做的计算次数:(N - k)这是我可以选择谁将成为第一个城市的选项数量,乘以(N - K - 1)!这是我必须选择剩余城市的选项数量,减去第一次,我需要执行完整的计算。所以它将是(N - K)!而且你需要将所有K的总和从k = 3开始加到k = N - 2.
这就是我去的地方(这不是很远)......我希望你能帮我计算一下。
答案 0 :(得分:1)
存储和重用已经计算过的结果是动态编程背后的基本思想,因为TSP有动态编程算法运行O[(N^2)*(2^N)]
时间,这将产生比算法更快的结果(你和#39;能够在几分钟内解决25个顶点的问题...)