我有一个算法问题,我有许多无序元素集,我需要找到通过所有这些集合的最短路径(集合的有序组合)。可能有数千套。
例如,让以下4个无序集: A = ABCDEFG B = CD C = ABCH d = DEFI
最短路径大小为11。
一种可能的解决方案是 P = CADB = habcgdeficd | P | = 11
请注意,集合可以与路径中的相邻集共享元素! 也可能存在属于不同集合的重复元素(如上例所示:'c'和'd'在P中重复,通过将B添加到CAD)。
请使用算法建议找到所描述的最短路径。 谢谢!
这个问题可以简化为Shortest common superstring problem的变种
你有一个图表:
A-B
和A
有一个交集但不是另一个的子集,则存在边缘B
;A-B
存在,距离A-B
是A
联合B
的大小。您正在寻找涵盖所有节点的最短路径。这是travelling salesman problem的一个变种,无需回到起点。
编辑:我试着总结一下评论和答案中讨论的内容。
max(len(S)) - len(A ^ B)
。
更重要的是:您不能在该组的“两侧”使用相同的字母。例如。 “abc”不能与“bcd”相距1,距离“eb”的距离为2,因为如果选择路径“a-bc-d”,则边缘“abc” - “eb”不会t再也存在了。也许贪婪的选择可以解决问题,但我不确定。