关于 k - 子序列通用词排序与逆排序及带间隙约束的最长公共子序列问题
1. k - 子序列通用词的排序与逆排序
在处理 k - 子序列通用词时,排序与逆排序是重要的操作。
对于逆排序过程,以确定长度为 n 且排名为 i 的 k - 子序列通用词 w 为例。从 w[1] 开始,对于任意 x ∈ Σ,以 x 为前缀的单词数量由 CS(1, n - (kσ), k) 给出。并且,以第一个符号 x 开头的单词排名范围在 (x - 1)CS(1, n - (kσ), k) + 1 到 xCS(1, n - (kσ), k) 之间。所以,w[1] 的值是满足 (x - 1)CS(1, n - (kσ), k) < i ≤ xCS(1, n - (kσ), k) 的 x。
更一般地,设 t(j) 是以前缀 w[1, j] 开头的单词的最小排名,其由以下求和确定:
[t(j) = \sum_{\ell\in[1,j]}\sum_{x\in[1,w[\ell]-1]}|S(w[1, \ell - 1]x)| = t(j - 1) + \sum_{x\in[1,w[j]-1]}|S(w[1, j - 1]x)|]
可以使用 t(j - 1) 和 CS(q, m, c) 的值在 O(σ) 时间内计算 t(j)。w[j + 1] 的值是满足 (t(j) + \sum_{y\in[1,x - 1]}|S(w[1, j]y)| < i \leq t(j) + \sum_{y\in[1,x]}|S(w[1, j]y)|) 的符号 x,并且也可以在 O(σ) 时间内计算。经过 O(nσk) 的预处理后,w 的逆排序总时间复杂度为 O(nσ)。
以下是相关的结
超级会员免费看
订阅专栏 解锁全文
795

被折叠的 条评论
为什么被折叠?



