Programmer’s Math
零的故事——无即是有
一、指数法则:
a0 = 1 (a!=0); 理解为 n每减一,数变为原来的1/10。,而非n个相乘
二、进制问题
按位计算法, 0 的占位作用
逻辑——真与假的二元世界
消除自然语言的歧义,做到不重不漏
引用:程序员处于人类和计算机的分界线上。只有做到逻辑性的思考和表达,就不会为常识和感情所困,从而写出符合要求的文档和程序。程序员应努力将问题转化为程序,让计算机有活可干。 ——P 23
条件分支(If,switch)语句,体现了“兼顾完整性和排他性的分解”
Venn diagram 集合与逻辑 联系
异或:同真假,则为真。(或,但不都满足 || 只满足一个)a⊕b
De Morgan’s Laws:
对偶性
KarnaughtMap:真假组合以二维表来展示
三值逻辑: True False Undefined
&& ||短路操作符
!Undefined = Undefined
True && Undefined = undefined
False && Undefined = false
False || Undefined = Undefined
复杂规则 -> 逻辑表达式 -> 卡诺图简化 –> 简单规则
余数——周期性和分组
除法就像分组,余数决定在哪一组(利用循环的规律)
奇偶性parity:
思考题:
123456^654321的个位数是?
余数通过规律将大数字问题简化小数字问题
数学归纳法——征服无穷数列
基于正确的某一项,不断递推
所有 -> 任一 应用于循环
比喻:
可以走出第一步,假设可以走出下一步,推出可以再走一步,于是可以走到远方。
排列组合——计数问题
计数对象与整数的对应规则
不重不漏
加法法则:
不同方法做同一种事情,即不重复,不交叉
容斥原理:(考虑了重复元素的加法法则)
|A|+ |B| - 重复个数
乘法法则:
逐步完成,递进
不要忘记0——
在10米长的路上,从路的一端起每隔1米种一棵树,可以种多少棵?
置换:全对象的交替排列方法
排列:先置换,除以 没置换的
组合:先排列,除以 重复计数部分(消除相对顺序)
——————————————————————————————————
(隔板法)从A,B,C三种药品中,共取100粒进行调剂。要求:
·A,B, C 至少有一个
·不考虑A,B,C的顺序,且同种药品每粒都相同
C
分析: 对象总数一定,有99个位置,可以插板的位置有2个
递归——自己定义自己
(问题的包含关系)
GNU : GNU is Not Unix
发现规律的能力:好像在重复做相似的事
Tower of Hanoi
RecursiveIdea:将复杂问题转化为较简单的同类问题
虽然暂未解决给定的问题,寻找更小的同类问题,当已知条件用
阶乘的递归定义
递归和归纳,只是方向不同。
Inductive:由已知到未知
Recursive:由未知到已知
Fibonacci :(兔子繁殖问题)
A动物出生2天后就开始繁殖后代,一天一个。假设有一个刚出生A(第3天繁殖1个),
那么11天后,共有多少个A动物?
分析:f(1) = 1, f(2) = 1, f(3) = 2
A->B->C递归的地方?
昨天存在的一直活着,前天存在的每天生一个
今日存在的 昨天存在的仍活着 前天存在的会每日一生
删除部分问题
❤在列举子问题时,思考剩余问题与目标问题的联系
现要将1 * 2的砖头摆成2 * N的长方形阵列,请问有几种摆法
分析:(加法原理)
·左边竖着摆1块,右边相当于摆(n-1)的方案
·左边横着摆2块,右边相当于摆(n-2)的方案
杨辉三角: (道尔顿板?)
问题:假设要到达C53这点,请问有多少种走法?
① 每下落一层,就需要选择 Left or Right,即在5次选择中需要选择3次向右。
② (递归,加法原理)
·到达左肩上的点,的走法方案数
·到达右肩上的点,的走法方案数
即
指数爆炸——如何解决复杂问题
有一张白纸,不断的对折,为何需要的力度不断增加,最后不能再对折?
二分查找法:(log n)
在有序数据中,利用1/2的指数爆炸,递归地缩小范围
暴力破解法:
用不同的字节流去试密码,∴增加字长,可让其费时
·极力求解,增加计算机性能,如:超级计算机
·变相求解,即技巧
·近似求解,如:最佳逼近定理
·概率求解,即瞎蒙试验。
不可解问题——无法编写的程序
反证法:
假设问题对立面成立,然后论证,推出矛盾
可数:可以按一定规律将其一一列出 或 可以与自然数一一对应
停机问题。