【问题标题】:Is this a variation of the traveling salesman problem?这是旅行商问题的变体吗?
【发布时间】:2010-04-26 18:14:10
【问题描述】:

我对两个单词列表的函数感兴趣,它将返回它们之间的顺序无关的编辑距离。

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

"cat rat bat""rat bat cat" 之间的距离将为 0。"cat rat bat""fat had bad" 之间的距离将与 "rat bat cat""had fat bad" 之间的距离相同,4. 在这种情况下,单词数列表不一样,较短的列表将用 0 长度的单词填充。

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

   |had|fat|bad|   a solution
---+---+---+---+ +---+---+---+
cat| 2 | 1 | 2 | |   | 1 |   |
---+---+---+---+ +---+---+---+
rat| 2 | 1 | 2 | | 3 |   |   |
---+---+---+---+ +---+---+---+
bat| 2 | 1 | 1 | |   |   | 4 |
---+---+---+---+ +---+---+---+

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • +1 我不知道你在说什么,但你说的很有说服力,所以我敢打赌你是对的。
    【解决方案2】:

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

    【讨论】:

    • 我正在使用 Levenshtein 距离来计算单词之间的距离。我的问题是找到构成 Levenshtein 距离之和最小的单词对。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2021-07-09
    • 2021-08-27
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多