Меня интересует функция из двух списков слов, которая бы возвращала расстояние редактирования без учета порядка.
То есть аргументы будут представлять собой два списка (скажем, разделенных пробелами) слов, а возвращаемое значение будет минимальной суммой расстояний редактирования (или Левенштейна) слов в списках.
Расстояние между "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 |
---+---+---+---+ +---+---+---+
Начиная с первого ряда, выберите столбец и перейдите к следующим строкам, даже не посещая уже посещенный столбец. Делайте это снова и снова, пока не перепробуете все комбинации.
Для меня это звучит немного похоже на проблему коммивояжера. И как бы вы решили мою конкретную проблему?