对于本题归并做法正确性的证明以及一个可能的误区
查看原帖
对于本题归并做法正确性的证明以及一个可能的误区
206875
pref_ctrl27楼主2023/4/30 10:59

题外话:在 这篇题解 中并没有证明该做法的正确性,并且我也没看到有什么比较严谨的证明,所以自己写了个证明。

如果有更加简洁的证明方法,欢迎指教。


首先由官方拓扑排序做法可以知道,将 P−1P^{-1} 翻转,我们实际上是要通过交换相邻两个权值差不小于 KK 的位置使得字典序最大。

考虑证明如下事实:对于排列 PP,每次任意交换一对满足 Pi+K≤Pi+1P_i+K\leq P_{i+1} 的 PiP_i 和 Pi+1P_{i+1},当无法继续交换的时候,所得就是最优解。

首先,由于交换会使逆序对恰好减少 11,因此一定能通过不超过 O(n2)\mathcal O(n^2) 次交换停止。

考虑反证法,设最终得到的排列为 PP。

假设所得的首位不是最优解,则记最优解中首位为 PiP_i,由合法性可知 ∀x<i\forall x<i,都有 ∣Px−Pi∣≥K|P_x-P_i|\geq K。由最优性可知 Pi>P1P_i>P_1。

考虑找出 [2,i][2,i] 中第一个 ≥Pi\geq P_i 的位置 jj,则易知 ∀x∈[1,j),Px+K≤Pi≤Pj\forall x\in[1,j), P_x+K\leq P_i\leq P_j,则有 ∣Pj−Pj−1∣≥K|P_j-P_{j-1}|\geq K,矛盾,因此首位一定是最优解。

进一步地,我们可以证明 PP 就是最优解。

可以发现由于上述证明,翻转是没有必要的,我们可以直接在 P−1P^{-1} 上任意交换 Pi>Pi+1+KP_i>P_{i+1}+K 的位置即可。

注意到上述证明用到了 ∣Pi−Pj∣≥K|P_i-P_j|\geq K 的一些性质,如果将限制变为 ∣Pi−Pj∣≤K|P_i-P_j|\leq K,则上述结论不再成立。此时存在一些显然的 Hack,比如 K=2K=2,序列为 2 3 4 1。

2023/4/30 10:59
加载中...