这个问题是之前提出的问题的扩展:
Least cost path in a sorted array
给定一个排序数组,A
例如{4,9,10,11,19}
。搬家的成本i->j
是
abs(A[j] - A[i]) + cost_incurred_till_i
。从给定元素开始,例如10
。在不访问相同元素两次的情况下找到成本最低的路径。
对于给定的数组:
10->9->4->11->19 cost: 1+(1+5)+(1+5+7)+(1+5+7+8) = 41
10->4->9->11->19 cost: 5+(5+5)+(5+5+2)+(5+5+2+8) = 47
10->9->11->4->19 cost: 1+(1+2)+(1+2+7)+(1+2+7+15) = 39
10->11->9->4->19 cost: 1+(1+2)+(1+2+5)+(1+2+5+15) = 35 --one of optimal paths
10->11->19->9->4 cost: 1+(1+8)+(1+8+10)+(1+8+10+5) = 53
10->11->19->4->9 cost: 1+(1+8)+(1+8+15)+(1+8+15+5) = 63
...
我尝试使用最近邻方法来解决这个问题。
i = start
While (array is not empty)
ldiff = A[i] - A[i-1]
rdiff = A[i+1] - A[i]
(ldiff < rdiff) ? sum += ldiff : sum += rdiff
remove A[i]
在这种情况下,最近邻适用于我们没有相等加权路径的某些情况。我已经意识到这是 TSP 问题。解决这个问题的最佳方法是什么?我应该使用像 Christofides 这样的 TSP 启发式算法还是其他算法?