结构字符串边界数组与部分单词模式避免指数的研究
结构字符串的边界数组构建
在字符串处理中,边界数组的构建是一项重要的任务。对于结构字符串(s - 字符串),我们可以通过不断改进的算法来高效地构建其边界数组。
传统边界构建中,寻找下一个最长边界的方式是一个关键性质。对于字符串 $T$ 的最长边界 $b_1$,若 $b_2$ 是 $b_1$ 的最长边界,那么 $b_2$ 就是 $T$ 的下一个最长边界。利用这个性质,我们可以通过回溯之前的边界元素来找到 $T[1…i]$ 的下一个最长边界。具体来说,若当前最长边界无法继续扩展,我们可以尝试下一个最长边界,其最后一个符号可能会匹配。如果第二长边界的最后一个符号不匹配,我们可以继续尝试第三长边界,以此类推。这种回溯可以递归到第 $v$ 层,即 $B_1[i] = B[i], B_2[i] = B[B[i]], \cdots, B_v[i] = B[B_{v - 1}[i]]$。
对于 s - 字符串和 s - 边界,这个性质同样成立。以下是相关引理:
- 引理 11 :给定长度为 $n$ 的 s - 字符串 $T$,第 $v$ 长的 s - 边界的长度 $q_v$ 可以通过 $q_v = B_s^v[i]$ 计算得到,当 $B_s[i] > 0$ 时;否则 $q_v = 0$。
基于之前证明的引理 10 和引理 11 的性质,我们可以提出一种改进的算法(算法 4)来计算 s - 边界。该算法与传统边界构建类似,但核心区别在于对单个 s - 后缀符号的观察和比较方式。
以下是改进的 $B_s$ 构建算法:
超级会员免费看
订阅专栏 解锁全文
3045

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



