В биоинформатике, когда вы выравниваете две последовательности ДНК, у вас может быть модель, стоимость которой зависит от того, является ли замена переходом или трансверсией. Это именно то, что вы хотите, но вместо матрицы 4x4, вы хотите матрицу 40x40 или что-то еще, осмелюсь сказать, функцию расстояния? Таким образом, стоимость замены зависит от матрицы / функции, а не от константы.
ПРЕДУПРЕЖДЕНИЕ. Убедитесь, что удаления и вставки правильно взвешены, поэтому они не принимаются за минимальное значение. В итоге вы получите строку вставок / удалений / символов без подстановок.
Новая функция, которую вы пытаетесь минимизировать, будет:
d[i, j] := minimum(
d[i-1, j] + del_cost,
d[i, j-1] + ins_cost,
d[i-1, j-1] + keyboard_distance( s[i], t[j] )
)