寻找带弧和假结的公共子序列及RNA结构相似度计算
1. 带弧和假结的公共子序列算法
在处理带弧和假结的公共子序列问题时,算法会根据不同情况进行操作:
- 遇到初始端点对 :当遇到来自两个序列的一对初始端点时,算法会尝试匹配它们的弧。此时会激活并初始化表格,其中包含两个初始端点的表格需要通过添加该弧分配对来扩展该位置的树。
- 遇到最终端点对 :当遇到一对最终端点时,算法需要使用测试来确定对应的初始端点对是否在树中。如果在,并且匹配最终端点能产生最大值,则匹配这些端点并修剪树;否则,像之前一样合并树和表格。
表格计算完成后,决策算法会根据存储在 $T(0,0)[n, m]$ 中的最长公共保弧子序列的长度来返回结果。如果该长度至少为 $l$,则返回 true
;否则返回 false
。此算法最多计算 $4k$ 个表格的条目,每个表格有 $nm$ 个条目。
时间复杂度分析
每个表格条目 $M_{h1,h2}[i, j]$ 的计算需要 $O(|M_{h1,h2}(i, j)|)$ 时间。在该算法中,树被保持为最小化,仅存储当前活动弧的起始端点的匹配。
为了找到 $M_{h1,h2}[i, j]$ 的大小,我们进行如下操作:
- 树中的每条路径都是匹配的 $i$ 值($i’$)和匹配的 $j$ 值($j’$)的序列。设 $p_1(i’)$ 是 $i’$ 在 $S_1$ 上活动弧的起始端点中的位置,$p_2(j’)$ 是 $j’$ 在 $S_2$ 上活动弧的起始端点中的位置。