我有一个算法问题,其中有许多无序元素集,我需要找到穿过所有这些集的最短路径(这些集的有序组合)。可能有数千套。
例如,让以下4个无序集合:
A = abcdefg
B = cd
C = abch
D = defi
最短路径大小为 11 。
一种可能的解决方案是:
P = CADB = habcgdeficd
| P | = 11
请注意,集合可能与路径中的相邻集合共享元素!
可能还存在属于不同集合的重复元素(如上例所示:通过在中添加 B ,在 P 中复制了“ c”和“ d” CAD )。
请根据算法建议找到最短路径。
谢谢!
答案 0 :(得分:0)
您有一个图形:
A-B
和A
具有相交但不是彼此的子集,则边缘B
存在; A-B
存在,则距离A-B
是A
并集B
的大小。您正在寻找涵盖所有节点的最短路径。这是travelling salesman problem的一种变体,无需重新开始。
编辑: 我尝试总结评论和答案中讨论的内容。
问题中尚不清楚的是:如果一个集合是另一个集合的超集,您将怎么办?我以为您想将这两个集合分开,这就是为什么我这样写:“如果A和B具有相交但不是彼此的子集,则边缘A-B存在”。对于TSP,如果边缘不存在,则在A和B组之间使用无限距离。这适用于子集/超集。
路径是有序的(根据路径的定义),但是集合是无序的。这就是为什么这不是Shortest常见超字符串问题的(平凡的)变体。字符串是有序的,集合号是
在上面定义的距离下,TSP想法也不起作用,因为:
max(len(S)) - len(A ^ B)
。答案 1 :(得分:0)
这个问题可以简化为Shortest common superstring problem
的变体