这是旅行商问题的变化吗?

时间:2010-04-26 18:14:11

标签: algorithm string language-agnostic fuzzy traveling-salesman

我对两个单词列表的功能感兴趣,这两个单词列表将返回它们之间的顺序不可知的编辑距离。

也就是说,参数将是两个(例如空格分隔)单词列表,返回值将是列表中单词的编辑(或Levenshtein)距离的最小总和。

"cat rat bat""rat bat cat"之间的距离为0. "cat rat bat""fat had bad"之间的距离与"rat bat cat"和{{1}之间的距离相同如果列表中的单词数不相同,则较短的列表将填充0长度的单词。

我的直觉(没有用计算机科学课程培养)没有找到任何其他解决方案而不是使用蛮力:

"had fat bad"

从第一行开始,选择一列并转到下一行,而无需重新访问已访问过的列。一遍又一遍地这样做,直到你尝试了所有的组合。

对我来说这听起来有点像旅行推销员的问题。是吗,你会如何解决我的特定问题?

2 个答案:

答案 0 :(得分:8)

正如您已在左侧网格中显示的那样,您可以从计算每对单词的编辑距离开始。这很容易在多项式时间内完成(n ^ 2编辑距离计算)。

然后您的问题可以被描述为“最小加权二分匹配”,或者等效地,“最大加权二分匹配”。这也可以在多项式时间内完成(比旅行推销员更快)。见http://en.wikipedia.org/wiki/Matching_%28graph_theory%29#Maximum_matchings_in_bipartite_graphs

答案 1 :(得分:1)

这看起来像是打破Levenshtein distance algorithm的完美机会。这个算法将完全符合您的要求(两个字符串之间的最小距离),并且它也非常有效。只要它是旅行推销员的变体就是否定,因为由于问题的结构,这可以在多项式时间内解决。希望这会有所帮助。