证明1 可链化
P: 必然存在某个最优解: 这个最优解中存在相邻的元素没有发生交换
这个命题的否命题:¬p: 存在某个数据,这个数据的所有最优解(∀);任意两个相邻的元素都会发生交换,
我把这种任意两个相邻元素都发生交换的情况:我称之为:封闭
显然,我们要证明的就是¬p是不正确的,比较直觉的想法,就是使用反正法.
使用反证法,我们需要知道反法和前提条件有一定的冲突. 那这里呢我们需要更深入的理解前提条件.

如上图所示,我们给每一条边进行编号. 我们规定,如果相邻的两个元素之间发生的交换为顺时针方向:则数值为正,反之为负.
显然很容易想到,我们所求的最小交换牌数就是
sum=∑∣xi∣(1)长链: 我们尽可能的把相邻的同方向的边串在一起组成的链.
设 pi 表示每一个点的净流出值,显然,我们可以得到下面公式:
pi=ai−avg(2)1∑npi=0(3)当pi>0表示需要流出(给别人牌), pi<0 反之
推论一: 长链的起点和终点必然发生交换
参考方向
根据公式三,加上平衡理论,理论上,我们应该也可以利用xi计算出pi:

如上图figure_2左所示: p2=5+1,p3=−1+(−3),这种计算方法需要我们知道每一条边的方向以及数值. 但是:当我们每条边的变量为xi,我们想要采用变量法来研究问题,写这个时候,我们也不知道每条边的具体方向,我们应该如何列出公式 pi 呢?
其实这个问题的核心在于: 一条边对于相邻的点具有不同的方含义,比如x2对于点3就是流入,对于点3就是流出,我们需要解决这个问题.
根据电路的相关知识灵感,我们取顺时针为参考方向,所有与参考方向相同的边为正值,方向相反的边负值,发现:每一个点的流入等于前一条边的数值减去后一条边的数值,则每一个点的流入应该计算为:xi−1−ximodn,此流入值显然应该等于−pi
xi−1−ximodn+pi=0变形得: 平衡公式二
ximodn=pi+xi−1(4)一元一次方程
显然想到:若知道x0的值是多少,则其他所有边的值都知道,则我们可以通过 x0 的值计算出其他所有 xi 的值
这里其实是线性代数的内容,涉及到一个概念叫独立方程
x0x1x2x3⋯xn−1=x0=p1+x0=p2+x1=p3+x2=pn−1+xn−2===p2+p1+x0p3+p2+p1+x0pn−1+⋯+p1+x0设 si=∑1ipi,且∑1npi=0⇒sn=0, 若存在xn 则 xn=x0
xi=si+x0xn=sn+x0=x0
于是我们可以得到一个重要的函数:当第 n 个人与第一个人之间的交换排数为 x0 时,最小交换牌数为F(x0)
F(x0)=1∑n∣si+x0∣(a)F(x0)性质探究
此时,我们认为命题¬p是成立的,则 ∀i(si+x0=0),用集合的方法来表示就是 x0∈/{−s1,−s2,⋯,−sn},对−si进行从大到小排序,得到一个新的序列si′

这就说明 x0定义域,是在数轴上去除了si′.
假设sj′<x0<sj+1′
- 对于 i⩽j,由于 x0>sj′⩾si′,所以 ∣x0−si′∣=x0−si′
- 对于 i>j,由于 x0<sj+1′≤si′,所以 ∣x0−si′∣=si′−x0
带入F(x0)得到:
F(x0)=1∑j(k−si′)+j+1∑n(si′−k)=j×k−1∑jsi′+((n−j)×−k)+j+1∑ksi′=(2j−n)k−1∑jsi′+j+1∑ksi′=(2j−n)k+Constant其中,Constant表示和 x0 无关的一个定值,F(x0)是一个一元一次线性方程,下面分情况讨论
- 如果 2j−n>0,F(x0) 在这个区间内是单调递增的。这意味着如果我们稍微减小 x0,F(x0) 的值就会变小。我们可以一直减小 x0 直到 x0 到达区间的左端点 sj′,此时成本 F(sj′) 会比区间内任何一点的成本都低。
- 如果 2j−n<0,F(x0) 在这个区间内是单调递减的。同理,我们可以一直增大 x0 直到 x0 到达区间的右端点 s1j+1,此时成本 F(s1j+1) 会更低。
- 如果 2j−n=0,F(x0) 在这个区间内是常数。这意味着区间内所有点的成本都一样,包括端点 sj′ 和 sj+1′
在所有情况下,如果我们有一个最优解 x0 位于开区间 (sj′,sj+1′) 内,我们总能找到一个新的最优解 x0’(它等于 sj′ 或 sj+1′),使得 F(x0′)⩽F(x0)
这个新的最优解 x0’ 属于关键点集合 S′。
但如果 x0’ 属于 S′,那么 x0′=−si 对于某个 i 成立。
这意味着 xi=x0′+si=(−si)+si=0
这就找到了一个最优解,其中存在一对相邻元素没有交换!
这与我们最初的假设——“任何最优解中所有相邻元素都发生交换”——产生了直接的矛盾。
重要规律
接下来我们发现一个非常重要的规律: 当某一条边xi的数值改变时,比如说减一,那么其他所有的边都要改变(加一或减一):以达到重新的平衡.
证明2 求出拆分位置
通过枚举某个xi=0,来求解
根据可链化证明

假如,我们认为x0=0,于是按照顺时针的方向,我们就依次可以算出x1,x2,⋯,xn−1,根据公式四:
xix1=p1−0x2=p2+p1x3=p3+p2+p1⋯xn−1xn=xn=0数值s1s2s3⋯sisn=0现在我们从 xk 开始断开,那我们就是从xk+1开始数.
xixk+1=pk+1−0xk+2=pk+2+pk+1xk+3=pk+3pk+2+pk+1⋯xn=pn+⋯+pk+1x1=p1+xnx2=p2+x1x3=p3+x2⋯数值sk+1−sksk+2−sksk+3−sk⋯sn−sks1+sn−sks2+sn−sks3+sn−sk⋯我们又知道sn=∑pi=0
xixk+1=pk+1−0xk+2=pk+2+pk+1xk+3=pk+3pk+2+pk+1⋯xn=pn+⋯+pk+1x1=p1+xnx2=p2+x1x3=p3+x2⋯数值sk+1−sksk+2−sksk+3−sk⋯sn−sks1−sks2−sks3−sk⋯所以我们得到,从xk处断开得到的函数F(k)
F(k)=∑∣si−sk∣(b)如果从x0,也就是xn处断开 F(n)=∑∣si−sn∣=∑∣si∣,符合题目.
且公式 b,显然就是: 一堆数中,选哪个数x,求其它数到x的距离和最小? 中位数:
- 如果数字的数量是奇数,则选择排序后中间的那个数字
- 如果数字的数量是偶数,则选择排序后中间的那个两个之一都可以