给出一对点对的数组,例如
[19, 11], [11,44] ,[ 98,101], [44,98], [12,32],[44,12],[44,98],[98,101],[33,39]
排列数组,使终点等于下一个起点。如果不相等,则成本=1。我们必须将成本降到最低。例如,我们可以将以上内容安排为
[19,11],[11,44],[44,12],[12,32],[44,98],[98,101],[44,98],[98,101],[33,39]
因此,这里的费用为[12,32],[44,98]
= 1 + [98,101],[44,98]
= 1 + [98,101],[33,39]
= 1因此总计= 3。
我尝试了一些解决方案,该解决方案首先匹配精确对,然后尝试匹配非精确对,但是我觉得我的贪婪方法不是最优的,可以使用动态编程来找到最优的解决方案。
否则我感觉是要计算所有可能的序列,但是复杂度很高!!
有人可以帮助我提出一个动态编程解决方案吗
答案 0 :(得分:1)
我认为这实际上是著名的Travelling Salesman问题的一个实例。这意味着您的解决方案不是最优的,并且在多项式时间内也没有最优的解决方案。尽管动态编程does seem to稍微降低了时间复杂度,但仍然是NP-Hard。
要了解原因,我们需要使用图论来重新表述此问题。在这里,每个点都是一个节点。每个节点(即点)通过具有成本1的定向加权边彼此连接。除非源节点的结束值与邻居节点的起点匹配,否则边的权重为0。现在创建一个虚拟起点,该起点具有一个直接边缘连接从到每个节点,以及从到每个节点到。
现在,如果您从起始节点运行TSP,则将以最小的成本获得所需的序列。
答案 1 :(得分:0)
如果我们要形成一个有向图,那么问题似乎就是图分区问题:找到适当的边去除方法,以使每个顶点最多具有一个输入边和一个输出边,同时最小化生成的图形组件数。
[19,11], [11,44], [98,101], [44,98], [12,32],
[44,12], [44,98], [98,101], [33,39]
33,39
44,98
⇗ ⇙ ⇘
⇗ 98,101 98,101
↑ ⇖ ⇗
19,11 -> 11,44 --> 44,98
↓
44,12 -> 12,32
结果将比组件数少一。
也许进行回溯搜索?