求导
用上面的求导方法求出以下函数的导数:
解:
剩下的就是一个商法则了, 太麻烦, 不写了。
乘积法则的证明:
要证明的是这个 (dfrac{d}{dx}(uv) = vdfrac{du}{dx} + udfrac{dv}{dx})
显然 (Delta(uv) = (u+Delta u)(v + Delta v) - uv = vDelta u + uDelta v + Delta u Delta v)
对这个式子两边同除以 (Delta x), 得到
那么由于 (Delta x) 趋近于 0, 乘积法则就得证了。
商法则的证明:
类似地, (Delta(dfrac{u}{v}) = dfrac{u+Delta u}{v + Delta v} - dfrac uv = dfrac{vDelta u - uDelta v}{v^2 + vDelta v}) 。
类似地, 得证。
链式法则的证明:
要证明 (h^{'}(x) = f^{'}(g(x))g^{'}(x)) 。
不证了。
关于交换排序那些事
在本文中, 交换排序是指:对于 1~n 的一个排列 (p_1dots p_n) , 仅通过若干次将两个数交换的操作来将其变成 (1dots n) 。
考虑标号 1~n 的 n 个节点, 每个节点 i 向 p_i 连一条边, 显然每个节点的出度和入度都为 1, 意即这些节点和边构成的图是若干不相交的有向环构成的; 显然一个 1~n 的排列唯一对应着这样的一个 n 个节点的图, 排列 1……n 对应的就是有 n 不相交自环的图。
将对排列的操作转化为对图的操作:
交换两个在不同的环内的数字, 会形成一个更大的环(规模合并)
有一个引理:
把一个长度为 n 的环变成 n 个自环, 最少需要 n-1 次交换操作
这个可以用归纳法证。
根据这个引理, 把一个 n 个节点的图变成 n 个自环的最小操作数的方法就是在不合并环的前提下分别把所有环变成自环。
公平组合游戏
基础知识
NIM博弈
给定 n 堆物品, 第 i 堆物品有 A~i~ 个。 两名玩家轮流行动, 每次可以任选一堆, 取走任意多个物品, 可把一堆取光, 不能一个不取。取走最后一件物品者获胜。两人都采用最优策略, 问先手能否必胜。
公平组合游戏ICG
若一个游戏满足:
1.两名玩家交替行动
2.在游戏进程的任意时刻, 可以执行的合法行动与轮到哪名玩家无关
3.不能行动的玩家判负
则成该游戏为公平组合游戏
有向图游戏
给定一个有向无环图, 图中有一个唯一的起点, 在起点上放有一颗棋子。 两名玩家交替地把这枚棋子沿着有向边移动, 每次必须且只能移动一步, 无法移动者判负。该游戏被称为 有向图游戏。
任何一个公平组合游戏都可以转化为有向图游戏, 具体方法是, 把每个局面看成图中的一个节点, 并且从每个局面向沿着合法行动能够到达的下一个局面连有向边。
Mex运算
设 S 表示一个非负整数集合, 定义 mex(S) 为不属于集合 S 的最小非负整数, 即
SG函数
在有向图游戏中, 对于每个节点 x , 设从 x 出发共有 k 条有向边, 分别到达节点 y~1~ …… y~k~ , 定义 SG(x) 为 x 的后继节点 y~1~ …… y~k~ 的 SG 函数值构成的集合执行 mex 运算后的结果, 即:
特别地, 整个有向图游戏的 SG 函数值定义为其起点的 SG 函数值。
有向图游戏的和
设 G~1~ ,……,G~m~ 是 m 个有向图游戏。 定义有向图游戏 G, 它的行动规则是任选某个有向图游戏 G~i~ , 并在其上行动一步。 G 被称为这些有向图游戏的和。
有向图游戏的和的 SG 函数值等于它包含的各个子游戏 SG 函数值的异或和。
定理1
对于有向图游戏, 必胜局面的 SG 函数值大于 0, 必败局面的 SG 函数值小于 0。
定理2
对于有向图游戏的和 A, 某局面必胜等价于 A 的 SG 函数大于 0。
证明:
对于和中所有游戏都不能行动的情况, 和的 SG 函数为 0, 显然这是个必败局面。
对于一个和的 SG 函数为 0 的局面, 对任意子游戏进行操作后, 和的 SG 函数必然不为 0。 这是因为对于任意子游戏, 当前局面的 SG 函数与下一局面的 SG 函数必定不同
SG 函数具有这样的性质, 很妙。
对于一个和的 SG 函数不为 0 的局面, 设它的 SG 函数为 x, x的二进制最高位为 k, 显然必定有至少一个子游戏的 SG 函数不为 0 且最高位为 k, 对于这个子游戏, 可以看出它的当前局面的后继局面的 SG 函数包含了 [0, 当前局面的 SG 函数值-1], 这样, 由于 x Xor 当前局面的 SG 函数 < 当前局面的 SG 函数, 一定可以将游戏和的 SG 函数变为 0。
SG 函数具有这样的性质, 很妙。
mex 运算设计成这样, 真是巧妙至极。(说设计好像不太对……
例题
Uva10561 Treblecross游戏
有 n 个格子排成一行, 其中一些格子里面有字符 X, 两个玩家轮流操作, 每次可以选一个空格, 在上面放上字符 X。如果此时有三个连续的 X 出现, 则该游戏者赢得比赛。 初始情况下不会有三个 X 连续出现, 给定初始局面, 求先手必胜还是必败。
先特判掉已经出现 XX 或 X[一个格子]X 的情况, 这样,对于序列中的每个 X, 其左右各两格之内都不可以放 X, 放了之后局面一定转移到必败局面。
这样整个序列就被分为了若干段, 相当于若干个游戏的和。
由于每个序列片段都是连续的, 用 g(x) 表示由连续的 x 个格子组成的序列对应游戏的 SG 函数值, 递推即可。
这样就可以解决原来的判定问题了。
小结
mex, 异或, SG函数 等等东西都十分巧妙,目前我只能够证明与其相关的定理, 据网友分享的对这些东西的理解, 我推断要进一步理解这些东西需要提高抽象代数水平 orz , 打算最近做。
Prufer序列
以下树均指无向无根树。
树的度数序列 将树的所有节点的度数写出来构成树的度数序列。
命题 对于任意满足
的序列 {d}, 一定有至少有一颗树满足这棵树的度数序列是 {d} (不考虑序列中 d 的先后顺序)
(Proof.)
引理: 一个度数序列中必然存在至少一个 (d_i) 使得 (d_i=1) , 否则度数和至少为 2n。(与证明无关地, 一个长度至少为 2 的度数序列中至少有两个 1, 可以证明)
接下来用归纳法证明命题。
假设 n = k 时命题成立, 对于一个长度为 k+1 的满足条件的度数序列, 从中去掉一个 1, 就变成了长度为 k 的满足条件的度数序列, 而根据归纳假设可以通过这个序列构造一棵树, 往这个树上随便连一个点, 还是一颗树, 度数序列就是原来那个长度为 k+1 的度数序列, 命题得证。
Prufer编码 一种完全刻画(即编码与树一一对应)一颗特定的边无权无向无编号点无权有编号无根树的编码方法。
求出树 T 的 Prufer 编码的方法:
0.最初序列为空
1.令 (b_1) 为 T 中编号最小的叶子, 令 (a_1) 为 (b_1) 唯一的邻接点。
2.从 T 中删除 (b_1) , 产生新树 (T_1), T = (T_1) , 并将 (a_1) 插入序列尾部
3.重复 1、2, 直到序列长度为 n-2
于是得到了序列 (ig<a ig>_{n-2}) , 这就是树 T 的 Prufer 编码 了。
通过还原 b 序列求出 (ig<a ig>_{n-2}) 对应的树 T 的方法:
0.首先 n 这个数一定不在 a 中, 把 n 加入 a, 成为 (a_{n-1}) 。
1.第 i 步令 (b_i) 为不在 (a_i ext{~} a_{n-1}) 且不为 (b_1 ext{~} b_{i-1}) 的最小节点
3.重复 n-1 次
这种方法的依据是 “(b_1) 一定没有在 a 序列中出现过” 。
可以看到, 不论是树的 Prufer 编码算法还是通过 Prufer 编码构造树的算法, 都是确定性的,即对同样的对象运行算法只会有一种结果, 即特定的 Prufer 编码与特定的边无权无向无编号点无权有编号无根树一一对应。