Изменение определения расстояния редактирования только с помощью вставок и удалений?

#python #levenshtein-distance #edit-distance

#python #левенштейн-расстояние #редактировать-расстояние

Вопрос:

Мне нужно найти расстояние редактирования между словом и его отсортированным словом (например: apple и aelpp), рекурсивно используя только вставки и удаления.

Я нашел несколько источников, в которых использовались вставки, удаления и замены, но я не уверен, как использовать только вставку и удаление.

Это код, который я нашел:

 def ld(s, t):
    if not s: return len(t)
    if not t: return len(s)
    if s[0] == t[0]: return ld(s[1:], t[1:])
    l1 = ld(s, t[1:])
    l2 = ld(s[1:], t)
    l3 = ld(s[1:], t[1:])
    return 1   min(l1, l2, l3)
  

Какие изменения нужно было бы внести, чтобы определить только количество вставок и удалений?

Ответ №1:

Удалить l3 , который вычисляет замены следующим образом

 def ld2(s, t):
    if not s: return len(t)
    if not t: return len(s)
    if s[0] == t[0]: return ld2(s[1:], t[1:])
    l1 = ld2(s, t[1:])
    l2 = ld2(s[1:], t)
    return 1   min(l1, l2)
  

Вы можете видеть, что это ld('apple', 'applx') равно 1, в то время как ld2 при тех же параметрах равно 2.