有两个字谜字符串S和P.有两个基本操作:
问题:设计一种有效的算法,最大限度地降低将S改为P的成本。
我尝试了一种贪婪的算法,但我找到了反例,我认为这是不正确的。我知道着名的DP问题编辑距离,但我没有得到这个的公式。
任何人都可以提供帮助?一个想法和伪代码将是伟大的。
答案 0 :(得分:0)
我想知道http://en.wikipedia.org/wiki/A * _ search_algorithm是否算得上有效?对于启发式,查找每个角色必须经过的最小距离,将字符串视为圆,并将这些距离的总和除以2。在圆圈上,每个角色需要参与足够的交换以将其一次一步地移动到其目的地,并且每个交换仅影响两个字符,因此该启发式应该是所需交换数量的下限。 / p>
答案 1 :(得分:0)
没有结束交换,答案很简单:你必须得到正确的第一个和最后一个字母,并且以后不能“保存”;因此,对于单词a i ,其中0 <= i < n
你要“冒泡”正确的 0 和 n-1 ,然后重复单词a i 1 <= i < n-1
,直到你留下0或1个字母。
使用end-swap选项,你会遇到更难的问题,因为有两个方向,每个字母可以到达正确的位置。你基本上在源词和目标词之间有一个二分图,你想要找到一个最小化距离总和的匹配。即使这不是一个真正的算法,因为每个交换移动两个字母,而不仅仅是一个。
底线是,您可能需要进行搜索,但至少可以使用无端交换距离限制搜索。