排列生成与回文子序列深度解析
排列生成的排序问题
在排列生成的研究中,排序是其中一个关键环节。为了能在常数时间内访问某些值,我们需要进行一些预处理操作。所有的 (|W_k|) 和 (\sum_{i = 0}^{k}(|W_i| + n - 1))(其中 (k \in {0..n - 4}))都可以在 (O(n)) 的总时间内计算出来,并且之后能够在 (O(1)) 时间内访问。
枢纽种子代表的排名很容易计算。例如,当 (n = 6) 时,有如下结果:
| 排列 | 排名 |
| ---- | ---- |
| 643215 | 1 |
| 632154 | 3 |
| 621543 | 5 |
| 615432 | 7 |
| 654321 | 9 |
对于给定的排列 (\pi),我们可以在 (O(n)) 时间内完成以下计算:
- 如果 (\pi \in perms(\psi)),计算 (rank(\pi) - rank(\hat{\psi}))。
- 如果 (\pi \in perms(\psi)) 且 (\psi \in Hub_n),计算 (rank(\pi))。
接下来,我们重点关注种子代表类型的排列排序。对于非枢纽种子 (\psi),用 (anchor(\psi)) 表示 (\psi) 的最高非枢纽祖先 (\varphi),并令 (hub(\psi) = parent(anchor(\psi)))。这里的 (anchor(\varphi)) 是与枢纽首次接触的种子,即 (\psi) 的第一个祖先,使得 (perms(\varphi) \cap perms(\bet
超级会员免费看
订阅专栏 解锁全文
1万+

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



