第 一章 一道弹性碰撞的物理题,结果为什么会出现π? 1
1.1 碰撞的滑块 1
1.2 隐藏的椭圆 3
1.3 把椭圆 “捏” 成圆 5
第二章 超级任务与一致收敛 8
2.1 Ross-Littlewood 悖论 8
2.2 逐点收敛与一致收收敛 9
第三章 怎样在球面上 “均匀” 排列许多点? 13
3.1 神奇的斐波那契网格 13
3.2 从平面点阵入手 19
3.2.1 连分式与丢番图逼近 20
3.2.2 模式与模式图 22
3.2.3 连分式中的大项对模式的影响 30
3.2.4 斐波那契网格为什么混乱又密集? 32
3.2.5 总结 36
3.3 回到球面点阵 37
第四章 一道 “小黄鸭” 概率题及其有趣扩展 40
4.1 “小黄鸭” 原题 40
4.2 高维情况初探 44
4.3 高维情况再探 48
4.4 高维情况的解决 54
4.5 编程验证 30
第五章 “赌徒” 的征程 66
5.1 引子 66
5.2 递推法的困境 68
5.3 鞅的停时定理 75
5.4 会长大的笼子 80
5.5 靠谱的谱分析 83
5.6 尾声 88
第六章 一种错误的洗牌算法,以及乱排常数 90
6.1 乱排常数的起源 90
6.2 乱排常数的推导 95
6.3 乱排常数的简洁形式 101
6.4 乱排常数的几个推广 103
第七章 用位运算速解 n 皇后问题 108
7.1 解法一: 步步回眸 109
7.2 解法二: 雁过留痕 111
7.3 解法三: 以一当百 113
7.4 解法四: 弹无虚发 116
7.5 解法五: 精益求精 119
7.6 总结 120
第八章 如何不重复地枚举 24 点算式? 122
8.1 朴素的枚举法 122
8.1.1 算式的表示方式 123
8.1.2 朴素的枚举算法 125
8.1.3 算式重复的统计 126
8.1.4 算式重复的原因 127
8.2 避免由交换律、结合律、独立运算顺序不造成的重复 129
8.2.1 避免由 “交换律” 造成的重复 129
8.2.2 避免由 “结合律” 造成的重复 130
8.2.3 避免由 “独立运算顺序不” 造成的重复133
8.2.4 小结 135
8.3 避免由去括号、反转减号造成的重复 136
8.3.1 避免由 “去括号” 造成的重复 137
8.3.2 避免由 “反转减号” 造成的重复 138
8.3.3 总结 143
第九章 Sprague-Grundy 定理是怎么想出来的? 145
9.1 游戏介绍 145
9.2 策梅洛定理 148
9.3 游戏状态的组合 149
9.4 Sprague-Grundy 数的提出 151
9.5 状态组合时 Sprague-Grundy 数的运算规则 154
9.5.1 规则的发现 154
9.5.2 规则的证明 156
9.6 Sprague-Grundy 定理的完整表述 157
第十章 小算法题,大应用:如何 “掰平” 一个不单调的序列? 159
10.1 如何 “掰平” 一个不单调的序列? 159
10.1.1 Matlab 的掰乎算法 160
10.1.2 高效的掰平算法 162
10.2 “掰平” 算法的应用: multi-dimensional scaling 163
10.3 附记 168
第十一章 二叉树怎样序列化才能重建? 169
11.1 几种常见的序列化方法 169
11.1.1 仅使用一种遍历的序列化方法 169
11.1.2 使用两种遍历的序列化方法 170
11.1.3 二叉搜索树 (BST) 的序列化方法 173
11.2 二叉树序列化能够重建的充分条件 175
11.3 “不含重复元素” 的必要性探讨 176
参考文献 180