Remove unicode '\u200b' (zero width space) character inserted by Typora.
诚然,我们仍需证明该值为最优解。实际上,如果有一个比 $k$ 更小的压缩表示,那么前缀函数的最后一个值 $\pi[n - 1]$ 必定比 $n - k$ 要大。因此 $k$ 就是答案。
-现在假设 $n$ 不可以被 $k$ 整除,我们将通过反证法证明这意味着答案为 $n$[^1]。假设其最小压缩表示 $r$ 的长度为 $p$($p$ 整除 $n$),字符串 $s$ 被划分为 $n / p \ge 2$ 块。那么前缀函数的最后一个值 $\pi[n - 1]$ 必定大于 $n - p$(如果等于则 $n$ 可被 $k$ 整除),也即其所表示的后缀将部分的覆盖第一个块。现在考虑字符串的第二个块。该块有两种解释:第一种为 $r_0 r_1 \dots r_{p - 1}$,另一种为 $r_{p - k} r_{p - k + 1} \dots r_{p - 1} r_0 r_1 \dots r_{p - k - 1}$ 。由于两种解释对应同一个字符串,因此可得到 $p$ 个方程组成的方程组,该方程组可简写为 $r_{(i + k) \bmod p} = r_{i \bmod p}$,其中 $\cdot \bmod p$ 表示模 $p$ 意义下的最小非负剩余。
+现在假设 $n$ 不可以被 $k$ 整除,我们将通过反证法证明这意味着答案为 $n$[^1]。假设其最小压缩表示 $r$ 的长度为 $p$($p$ 整除 $n$),字符串 $s$ 被划分为 $n / p \ge 2$ 块。那么前缀函数的最后一个值 $\pi[n - 1]$ 必定大于 $n - p$(如果等于则 $n$ 可被 $k$ 整除),也即其所表示的后缀将部分的覆盖第一个块。现在考虑字符串的第二个块。该块有两种解释:第一种为 $r_0 r_1 \dots r_{p - 1}$,另一种为 $r_{p - k} r_{p - k + 1} \dots r_{p - 1} r_0 r_1 \dots r_{p - k - 1}$ 。由于两种解释对应同一个字符串,因此可得到 $p$ 个方程组成的方程组,该方程组可简写为 $r_{(i + k) \bmod p} = r_{i \bmod p}$,其中 $\cdot \bmod p$ 表示模 $p$ 意义下的最小非负剩余。
$$
\begin{gather}
所以,我们已经找到了当将字符 $c$ 添加至 $s$ 后新出现的子串数目为 $\operatorname{length}(t) - z_{\max}$。
-作为其结果,该解法对于一个长度为 $n$ 的字符串的时间复杂度为 $O(n^2)$。
+作为其结果,该解法对于一个长度为 $n$ 的字符串的时间复杂度为 $O(n^2)$。
值得注意的是,我们可以用同样的方法在 $O(n)$ 时间内,重新计算在头部添加一个字符,或者移除一个字符(从尾或者头)时的本质不同子串数目。
给定一个长度为 $n$ 的字符串 $s$,找到其最短的 “压缩” 表示,即:寻找一个最短的字符串 $t$,使得 $s$ 可以被 $t$ 的一份或多份拷贝的拼接表示。
-其中一种解法为:计算 $s$ 的 Z 函数,从小到大循环所有满足 $i$ 整除 $n$ 的 $i$。在找到第一个满足 $i + z[i] = n$ 的 $i$ 时终止。那么该字符串 $s$ 可被压缩为长度 $i$ 的字符串。
+其中一种解法为:计算 $s$ 的 Z 函数,从小到大循环所有满足 $i$ 整除 $n$ 的 $i$。在找到第一个满足 $i + z[i] = n$ 的 $i$ 时终止。那么该字符串 $s$ 可被压缩为长度 $i$ 的字符串。
该事实的证明同应用[前缀函数](./prefix-function.md)的解法证明一样。