|
本帖最后由 lugionline 于 2016-11-29 08:43 编辑
给个证明,看看有没有漏洞 (要证明的公式写错了,重新改了下)
记 X(单数/双数,单数/双数位置) 表示 X 这个数是单数/双数,当前处于 单数/双数位置
如果 X 处于 X 的位置,那么就说 X 处于本位
归纳法证明
任何一个 N长度的 序列都可以经过 [(N + 1) / 4] + N - 1 次交换恢复到原始序列 (以下所有 [] 表示Floor)
对于 N = 1,2,3,4 显然 
假设 N = k 时成立 (k >= 4)
对于 N = k + 1 (我们要证明交换次数不超过 [(k + 1 + 1) / 4] + k + 1 - 1 = [(k + 2) / 4] + k )
分以下几种情况
第一种:假设有一个数已经处于自己的位置了,那么把剩余的 k 个数重新标记
只需要 [(k + 1) / 4] + k - 1 < [(k + 2) / 4] + k, 显然成立
第二种:假设有一个 X(单数,双数位置) (或者有一个 x(双数,单数位置)),
那么只需要把 这个数和 X位置的这个数 Y(双数或者单数,单数位置) 交换
就能让 X 处于本位,然后把剩余的 k 个数重新标记
只需要 1 + [(k + 1) / 4] + k - 1 = [(k + 1) /4] + k < [(k + 2) / 4] + k, 成立
第三种:所有的数都是 (单数, 单数位置),或者 (双数,双数位置)
任取一个单数和一个双数 (一定能找到,因为 k + 1 >= 5)
记为: X(单数, 单数位置) Y(双数,双数位置)
对于: 处于X位置的那个数,记为 X'(单数,单数位置)
对于: 处于Y位置的那个数,记为 Y'(双数,双数位置)
显然 X, Y, X', Y' 是不同的数,否则就是第一种情况
交换 X(单数, 单数位置), Y(双数,双数位置) --------这里使用了一步
新的状态是
X(单数,双数位置)
Y(双数, 单数位置)
X'(单数,单数位置)
Y'(双数,双数位置)
交换 X(单数,双数位置) 和 X'(单数,单数位置) -----这里使用了一步
交换 Y(双数, 单数位置) 和 Y'(双数,双数位置) -----这里使用了一步
新的状态是
X(单数,单数位置) -- 处于自己的本位
Y(双数, 双数位置) -- 处于自己的本位
X'(单数,双数位置)
Y'(双数,单数位置)
现在 X, Y 已经处于自己的本位,考察 X', Y',分两种情况:
第三1种:
如果 X' 和 Y' 交换后能使 X', Y' 处于自己的本位,那么使用的总步数是
3 + 1 + [(k - 3 + 1) / 4] + k - 3 - 1 -- 一共移动4步,剩余 k - 3 个
= [(k - 2) / 4] + k < [(k + 2) / 4] + k
第三2种:
否则 X'(单数,双数位置) 可以和 X'位置的那个数 X''(单数,单数位置) 交换
Y'(双数, 单数位置) 可以和 Y'位置的那个书 Y''(双数, 双数位置) 交换
同样使 X', Y' 处于自己的本位,使用的总步数是
3 + 2 + [(k - 3 + 1) / 4] + k - 3 - 1
= [(k - 2) / 4] + k + 1 = [(k + 2) / 4] + k
成立
Q.E.D.
上面的过程其实也是一个构造需要 [(N + 1) / 4] + N - 1 步序列的过程,所以这个就是答案
|
|