2022.8.8 闲话
一道题的 Markdown 源码的 SHA256:1c08db54e2631466d962960e94a784a578cd63a6fa0bedb23759177e7c474f62
.
LCS 的一些做法:
Longest Common Subsequence
给两个序列 \(\{a_n\}\),\(\{b_n\}\),求一个序列 \(\{c_k\}\),使得:
- \(\{c\}\) 同时是 \(\{a\}\),\(\{b\}\) 的子序列 .
- \(k\) 最小 .
最需输出最小的 \(k\) .
特别的,我们有一些特殊性质:
- 性质 A:\(\{a\}\),\(\{b\}\) 为排列 .
- 性质 B:\(\{a\}\),\(\{b\}\) 中每个数出现的次数是小常数 .
性质 A:对 \(\{b\}\) 施置换 \(\{a\}\),则问题变为求 \(\{b\}\) 的 LIS,可以 \(O(n\log n)\) 解决 .
性质 B:对于每个元素 \(x\),我们在 \(\{a\}\) 中找到 \(x\) 的出现位置并降序写出,然后替换 \(\{b\}\) 中所有 \(x\),得到序列 \(\{c\}\),求其 LIS 即为答案 .
General:令 \(dp_{i,j}\) 表示 \(a_{1\dots i}\) 与 \(b_{i\dots j}\) 的 LCS 长度,于是可以朴素 \(O(1)\) 转移,时间复杂度 \(O(n^2)\) .
值得一提的是,在 James W. Hunt 和 Thomas G. Szymansky 的论文 "A Fast Algorithm for Computing Longest Common Subsequence" 中,给出了一个 \(\Omega(n\log n)\),\(O(n^2\log n)\) 的做法 .
以下是博客签名,正文无关
本文来自博客园,作者:yspm,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16563231.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ