http://en.wikipedia.org/wiki/Nearest_neighbour_algorithm
我正在使用最近邻算法来解决旅行商问题。它非常快,但不准确。我在某处读到了我可以做的两项改进。第一个是从一个随机点开始,而是从每个节点开始运行最近邻居算法。 (因此,如果有N个节点,则最近邻居运行N次)然后比较并选择总距离最小的路径。这个apear要精确得多。但它太慢了。
另一种方法是选择一个特殊的方法而不是随机选择起始节点。然后仍然只运行一次最近的邻居以获得结果。这不会像上面的方法那样准确,但肯定要快得多,因为算法只运行一次。但不幸的是,我不记得我在哪里阅读那篇文章以及选择这个起始节点的标准。
我猜我应该获得每个节点与其他节点之间的总距离,然后应该选择具有最大值的节点作为起始节点。 (在我看来,这是选择一个距离图“最远”的节点,同时也避免选择靠近图形中心的节点)我认为这样我得到的路线应该非常接近最佳最短路径。
我在想什么?
编辑:我正在处理具有欧几里德距离的度量标准TSP。
答案 0 :(得分:1)
听起来你应该只运行K-NN算法,其中有几个起始节点说O(log N),这只会花费O(K * N * log(N))。选择最佳游览,然后使用游览改进启发式,2 opt或2.5 opt,限制移动次数或仅限时间限制。
这应该可以实现时间与准确度的最佳平衡,除非您开始考虑基于k-opt or v-opt的算法。虽然,听起来你没有时间陪他们。
答案 1 :(得分:0)
每次做最近邻居时,也可以缓存。如果你做一个K最近邻居会更好。这就是它的工作方式: