代码之家  ›  专栏  ›  技术社区  ›  Ville Koskinen

这是旅行推销员问题的一个变种吗?

  •  3
  • Ville Koskinen  · 技术社区  · 16 年前

    我感兴趣的是两个单词列表的函数,它将返回它们之间不受顺序限制的编辑距离。

    之间的距离 "cat rat bat" "rat bat cat" “猫鼠蝙蝠” "fat had bad" 会和它们之间的距离一样 “老鼠蝙蝠猫” "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 |
    ---+---+---+---+ +---+---+---+
    

    从第一行开始,选择一个列并转到下一行,而不必重新访问已经访问过的列。反复这样做,直到你试过所有的组合。

    2 回复  |  直到 16 年前
        1
  •  8
  •   mathmike    16 年前

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

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

        2
  •  1
  •   Jeremy E    16 年前