我想以最佳方式比对两个 DNA 序列,但我有长度为 L 的空位惩罚函数,如果 L 是 3 的倍数,则对于某个常数 a,惩罚是 a * L。如果 L 不是 3 的倍数,那么对于某个常数 b,惩罚是 b * L。
我应该设计一个 O(n * m) 算法,其中 n 和 m 是 DNA 序列的长度,可以找到最佳比对。但棘手的部分是我必须跟踪它正在扩展的间隙的大小。例如,如果我有两个连续的差距并进一步扩大一个差距,我需要将分数更新为L - b (L-1),但我无法制定能很好地处理这种情况的子问题。我考虑过引入一个新参数 L 来“猜测”最终间隙的长度,但这很容易超过 O(n * m)。
有没有办法有效地制定这些子问题?任何关键意见将不胜感激。