程序员的数学
程序员的数学
0 -- 做出简单规则
0 明确表现可 "无即是有"。换言之,就是不对 "无" 进行特别处理。引入 0 以后,
更容易简化规则。如果找出具有一致性的简单的规则,则便于机械式处理,让计算机来解决问题。
逻辑 -- 两个世界
逻辑基本上被分为 true 和 false 两个世界。解决问题时,并不是眉毛胡子一起抓,而应该根据某条件分为 “条件成立”
和 “条件不成立” 两种情况来解决。逻辑同时也是消除自然语言歧义的好工具。
余数 -- 分组
对于有无数个对象的问题,只要发现其规律,就能使用余数将其简化为对象个数较少的问题。
有效利用余数,能将分散的事物同等看待并加以分类。通过 “余数” 进行分组之后,本来需要反复试验的问题也能轻松解决。
数学归纳法 -- 通过 2 个步骤挑战无穷
数学归纳法只需要通过基底和归纳 2 个步骤,就能进行有关无穷的证明
排列组合 -- 关键在于认清问题的性质
对于多得无法无法直接计数的庞大数据,先缩小规模找出问题的本质,再将其抽象化,就能得到答案。
递归 -- 在自己中找自己
递归也是分解问题的方法,但不是分解成同类同规模的问题,而是分解成同类不同规模的问题。在面对复杂的问题时,先观察
它的内部是否含有相同结构的小规模问题。如果正确地找到了递归结构,就可以使用递归公式抓住问题的本质。
指数爆炸
包含指数爆炸的问题,规模稍微一扩大,就会变得棘手。但是相反,若能有效利用指数爆炸,就能将复杂的问题简化。
不可解问题 -- 展示了原理上的界线
我们能有计算机来解决的问题都是无穷的。但是,这个无穷也只是可数的。所有问题的集合是比可数更多的无穷,那里有我们无法及其的世界。