通过移动操作编辑距离


13

动机:合著者编辑手稿,我希望看到这些编辑的清晰摘要。如果您同时移动文本(例如,重新组织结构)进行本地编辑,则所有类似于“ diff”的工具都将无用。真的很难做到正确吗?


定义:我想找到最小的编辑距离,其中允许的操作是:

  • “便宜”操作:添加/更改/删除单个字符(通常的Levenshtein操作),

  • “昂贵”:操作:将子字符串移动到新位置(任何字符串,,,)。b Ç dabcdacbdabcd

给定两个字符串和以及整数和,我想解决以下问题:ÿ ķ ķxykK

  • 您最多可以使用廉价操作和最多昂贵操作将转换为吗?ÿ ķ ķxykK

问题:

  1. 这个问题有名字吗?(在序列比对的背景下,这听起来像是一个非常标准的问题。)

  2. 难吗?

  3. 如果比较困难,是否可以使用作为参数来处理固定参数?K

  4. 有高效的近似算法吗?(例如,如果存在具有廉价操作和昂贵操作的解决方案,则找到一个最多具有便宜和昂贵操作的解决方案。)2 K k K2k2KkK

我试图看一下Wikipedia中列出字符串指标,但是没有一个看起来正确。


3
对于,问题是按换位排序。参见,例如,web.cs.dal.ca /〜whidden / HThesis07.pdf。我还没有遇到您的问题,但是动机似乎很好。k=0
Serge Gaspers

4
换位排序问题的NP硬度已在2010年得到证明,请参见按换位排序困难
Marzio De Biasi

3
换位很困难,但插入和删除则不然。如果允许昂贵的操作是删除任意子字符串或插入其他字符串的任何子字符串,则该问题应该变得很容易。但是,所得的距离将不是对称的。
朱尼·瑟伦(JuuniSirén)2013年

我对固定参数的易处理性很好奇。有什么新发现吗?
宜欣曹

Answers:



4

如果我们考虑使用长删除和子字符串复制而不是换位,则问题将变得更加容易。假设我们使用标准动态规划算法进行编辑距离计算,并且对于某些常数,长度为的昂贵操作距离增加。对于长删除和子字符串复制,这些常量可能有所不同。一个ķ + b 一个b 0kak+ba,b0

长删除是从删除任意子字符串。如果将它们分解为两种简单的操作,则支持它们很容易:删除第一个字符(成本)和将删除范围扩展一个字符(成本)。除了标准数组,其中是前缀和之间的编辑距离,我们使用另一个数组来存储编辑距离,最后一次使用的操作是长时间删除。有了这个数组,我们只需要看,,和xa+baAA[i,j]x[1i]y[1j]AdA[i1,j]A[i1,j1]A[i,j1]Ad[i1,j]在计算和,允许我们在时间内完成。A[i,j]Ad[i,j]O(1)

子字符串复制是指将的任意子字符串插入已编辑的字符串。与长删除一样,我们将操作分为两个简单的操作:插入第一个字符并将插入扩展一个字符。我们还使用数组存储前缀之间的编辑距离,条件是最后使用的操作是子字符串复制。xAs

有效地执行此操作比长删除操作更为复杂,而且我不确定是否可以将每个单元的时间摊销。我们为构建一个后缀树,假设它的大小恒定,则需要时间。我们将指向当前后缀树节点的指针存储在,从而允许我们以固定时间检查是否可以通过字符扩展插入。如果是这样,我们可以在恒定时间内计算和。O(1)xO(|x|)As[i,j1]y[j]A[i,j]As[i,j]

Ž 小号 [ Ĵ - 1 ] X ž ' žzy[j]zAs[i,j1]xzzzy[j]xO(|z||z|)As[i,j]A[i,j|z|1]A[i,j1]zO(1)As[i,j]O(|z|)

O(min(|x||y|2,|x|2|y|))

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.