知识点-超实数
解决问题
不平等博弈问题
概要
考虑一种问题,有n堆石子,每堆石子有 a i ai ai个石子,两个人进行取石子游戏,第一个人每一轮可以选一堆石子取 a a a个,第二个人每一轮可以选一堆石子取 b b b个,谁先不能取谁输。
由于两个人的行动方案不一样了,所以不能再使用SG函数分析这个问题,所以,我们在这里要引入一个新的概念–超实数。
在超实数的概念里,数的定义是这样给出的: { L ∣ R } \{L|R\} {L∣R}
其中 L L L 和 R R R分别代表一个集合(集合由已有的数构成),并且需要满足 L L L中不存在一个数大于等于 R R R中的任意一个数。
而它的小于等于被定义为一个数小于等于另一个数,当且仅当前者的左集合里不存在大于等于后者的数,并且后者的右集合里不存在小于等于前者的数。比如,如果 x = { a , b ∣ c } x = \{a, b | c\} x={a,b∣c} , y = { d ∣ e } y = \{d | e\} y={d∣e} ,那么 x x x小于等于 y y y ,当且仅当 a a a、 b b b 都不大于等于 y y y ,并且 e e e 不小于等于 x x x 。
有了小于等于之后,剩下的符号我们就可以定义了,例如我们可以定义 x ≥ y x \ge y x≥y为 y ≤ x y \le x y≤x; x < y x < y x<y为 x ≤ y ∧ ¬ ( y ≤ x ) x \le y \land \lnot (y \le x) x≤y∧¬(y≤x); x = y x = y x=y为 x ≤ y ∧ y ≤ x x \le y \land y \le x x≤y∧y≤x等等。至于这些定义为什么可以由小于等于推导成立这里就不说了,比较复杂,我没学会。。。感兴趣的可以去《实数、超实数和博弈游戏:数学的结构之美》这篇文章学习一下,这篇博客也是我对学习这篇文章的学习记录。
(这里有个奇怪的性质值得记录一下: x ≤ y x \le y x≤y 和 y ≤ x y \le x y≤x不可能都不成立,但却有可能同时成立。证明略)
可以看到,所有的数和大小关系都是递归得到的,而且每个新的数都需要一些已有的数来定义,而最初的数显然就是 { ∣ } \{|\} {∣},因为一开始没有任何数,左右集合只能是空集。然后用这个数就可以定义出两个数 { { ∣ } ∣ } \{\{|\}|\} {{∣}∣}和 { ∣ { ∣ } } \{|\{|\}\} {∣{∣}}(要注意, { { ∣ } ∣ { ∣ } } \{\{|\}|\{|\}\} {{∣}∣{∣}}不是一个合法的超实数,因为 L L L集合中存在了一个数大于等于 R R R集合中的数),然后新的两个数又定义其他的数…如此不断递归下去,从而把超实数的所有的定义出来。
有了数集之后,我们还需要知道一些数的运算操作
x x x和 y y y是两个超实数,则 x + y x+y x+y的左集合 L L L和右集合 R R R分别是
L = { u + y ∣ u ∈ L ( x ) } ∪ { x + v ∣ v ∈ L ( y ) } L = \{ u + y | u ∈ L(x) \} ∪ \{ x + v | v ∈ L(y) \} L={u+y∣u∈L(x)}∪{x+v∣v∈L(y)}
R = { u + y ∣ u ∈ R ( x ) } ∪ { x + v ∣ v ∈ R ( y ) } R = \{ u + y | u ∈ R(x) \} ∪ \{ x + v | v ∈ R(y) \} R={u+y∣u∈R(x)}∪{x+v∣v∈R(y)}
这里的加法同样是满足交换律和结合律的,和正常的加法一样,证明过程同样自行了解。
并且定义加法逆元:把 x x x 的“逆元”记作 − x -x −x ,那么 − x -x −x 的左右集合就应该是
L = { − u ∣ u ∈ R ( x ) } L = \{ -u | u ∈ R(x) \} L={−u∣u∈R(x)}
R = { − u ∣ u ∈ L ( x ) } R = \{ -u | u ∈ L(x) \} R={−u∣u∈L(x)}
然后,我们可以惊喜的发现, { ∣ } + { ∣ } \{|\}+\{|\} {∣}+{∣}仍然等于 { ∣ } \{|\} {∣},并且任何一个超实数加上 { ∣ } \{|\} {∣}都仍然等于那个数本身,这些性质让你想到了什么?没错, { ∣ } \{|\} {∣}其实就相当于实数里的0。类似的由乘法的定义,我们可以找到 { 0 ∣ } \{0|\} {0∣}就是1,这里由于超实数的乘法和下面要讲的博弈没多大关系,就不列出具体定义了,就直接把结论拿来用啦
有了0和1之后,用加法和乘法就可以将其他的数字定下来了,每次用的话都要推太麻烦了,所有我就去找了个在博弈里常用的结论:若是 L L L和 R R R之间存在整数,则 { L ∣ R } \{L|R\} {L∣R}就等于 L L L和 R R R之间最接近0的整数;若是 L L L和 R R R之间不存在整数,则 { L ∣ R } \{L|R\} {L∣R}就等于一个 j / 2 k j/2^k j/2k形式的数,其中 k k k是满足 L < j / 2 k < R L< j/2^k <R L<j/2k<R的最小数, j j j是在满足 k k k最小的情况下可以取到的让这个数最接近0的整数。
P s : Ps: Ps:补充一个性质, { L ∣ R } \{L|R\} {L∣R}等价于 { m a x ( u ) , u ∈ L ∣ m i n ( v ) , v ∈ R } \{max(u), u ∈ L |min(v),v ∈ R\} {max(u),u∈L∣min(v),v∈R},比如 { 1 , 2 , 3 ∣ 4 , 7 , 9 } \{1,2,3|4,7,9\} {1,2,3∣4,7,9}等价于 { 3 ∣ 4 } \{3|4\} {3∣4}
好了,到这里,超实数的概念介绍就告一段落了。接下来让我们讨论一下它和博弈的关系。
考虑之前的游戏,我们首先考虑只有一堆石子的情况,把在一个局面下,第一个人拿完石子后可能产生的所有局面的集合和第二个人拿完石子后可能产生的所有局面的集合组合在一起,就形成了一个类似超实数的东西。而多堆石子情况下的解就等于每堆石头下的超实数之和(超实数的值为正代表第一个人必胜,不管先手后手,值为负代表第二个人必胜,不管先手后手,为0就代表后手必胜)
另外,在博弈中可能会有一些局面是无法用超实数表示的,因为超实数必须保证左集合小于右集合,但是这一点在实际情况下很难保证。比如我们考虑这样一种局面,但上述游戏里面 a = b a=b a=b的话,那么就会出现两个人都可以把局面转移到没有石子的情况也就是 { 0 ∣ 0 } \{0|0\} {0∣0},这种情况显然是先手必胜的。为了表示这种状态,我们引入一个特殊符号 ∗ * ∗, ∗ = { 0 ∣ 0 } *=\{0|0\} ∗={0∣0}。并且根据定义,因为只能转移到先手必胜态的状态必定是后手必胜态,我们可以得到 0 = { ∗ ∣ ∗ } 0=\{ *|* \} 0={∗∣∗},所以 ∗ * ∗小于所有正数,大于所有负数。
因此我们可以求出 ∗ * ∗和正数负数的运算结果了,但还剩下 ∗ * ∗号和0的运算结果无法确定,因此,我们定义 ↑ = { 0 ∣ ∗ } \uparrow = \{0|*\} ↑={0∣∗}, ↓ = { ∗ ∣ 0 } \downarrow = \{*|0\} ↓={∗∣0}。可以发现 ↑ \uparrow ↑大于0且小于所有正数,相当于正无穷小,同理, ↓ \downarrow ↓相当于负无穷大。
另外,还有 L L L大于 R R R 的情况,这里就不多加讨论了,找不到什么好的定义,只能根据具体问题具体分析了
例题
HDU3544