好玩的数学--程序员篇
Computer - ComMath
第1章 0的故事--无即是有
需求--问题:为什么我们需要发明计数法呢?
数越大就越难处理,将大问题分解成小“单元”;
方法论之一:“问题分解法”;
数字本身即是容器,并无实际意义;真正有意义的在于使用者;
进制
2进制:机器数字;逢二进位;两种数字;
10进制:阿拉伯数字;常用进制,适用我们使用手指个数;
--60进制:罗马数字;逢60进位;实例:时间应用60进制;
应用:进制数转换;
0
大多数机器对于0的处理都有自己的一套方法论,会进行特殊处理;
指数--10的0次方是多少?0次方的意义,基数的几分之一;
作用:占位--统一标准,简化规则;实例:吃药问题;
第2章 逻辑--真与假的二元世界
机器逻辑--布尔逻辑;
AI逻辑--模糊逻辑;实例:偶尔;经常;非常频繁; 设计对应数值:0.1;0.5;0.9;
需求--问题:为何逻辑如此重要?
逻辑是消除歧义的工具;
我们平时使用的语言--自然语言,是极易产生歧义的;
规格说明书(记述如何编写程序的文件)一般都是用自然语言描述的;因此,程序员必须走出自然语言的歧义的迷宫,谨慎解读规格说明书,确定其正确的意义;
“逻辑”是消除自然语言的歧义、严密准确的记述着事物的工具;假如尝试使用逻辑语言(逻辑表达式)来重新解释规格说明书,有时就会发现其中存在歧义或矛盾的地方;另外,借助逻辑还能够将复杂的规格说明书转换成简单易懂的形式;
程序员处于人类和计算机的分界线上;只要做到逻辑性的思考和表达,就不会为常识和感情所困,从而写出符合要求的规格说明和程序;程序员应该努力将问题转化为程序,让计算机有活可干;
乘车费用问题--兼顾完整性和排他性;
学习逻辑的基本思路:兼顾完整性和排他性;
命题及其真假--能够判断对错的陈述句叫做命题;
命题正确时,该命题为“真”;反之,命题不正确时,称该命题为“假”;也将“真”称作 true ,“假”成为 false;
有没有“遗漏”;
有没有“重复”;
画一根数轴辅助思考;
确认没有“遗漏”和“重复”是相当重要的。在查看乘车费用规则这类说明时,在阅读文字的同时,最好像下面那样 画一根数轴;
注意边界值
通过数轴,我们可以看到边界值是需要注意的;
兼顾完整性和排他性
没有“遗漏”,即具备完整性;
没有“重复”,即具备排他性;
使用if语句分解问题
逻辑的基本是两个分支;If-else;true or false
真值表
真值表没有遗漏和重复,兼顾了完整性和排他性;
文氏图
与 或 非 异或 蕴含 相等;
德.摩根定律
“非A”或者“非B”,和非“A与B” 是等价的;
“非A”并且“非B”,和非“A或B” 是等价的;
对偶性
分别将true和false、A和非A、且和或进行互换,就能够得到该逻辑表达式的否定式;
卡诺图
包含未定义的逻辑
true 真
false 假
undefined 未定义
三值逻辑
方法论之二:布尔逻辑;与或非;
第3章 余数--周期性和分组
运用余数,大数字的问题就能简化成小数字问题;
第4章 数学归纳法--如何征服无穷数列
1.基底的证明;
2.归纳的证明;
第5章 排列组合 --解决计数问题的方法
加法法则
乘法法则
置换
阶乘
排列
树形图
组合
置换和排列都要考虑顺序,不考虑顺序的方法--组合;
第6章 递归 --自己定义自己
递归和归纳的本质是相同的,都是“将复杂问题简化”;
斐波那契数列
F(0)=0
F(1)=1
F(n)=F(n-1)+F(n-2) n>=2,n属于实数
第7章 指数爆炸 --如何解决复杂问题
指数爆炸是指数字呈爆炸式增长;
二分法查找--利用指数爆炸进行查找;
密码 --利用指数爆炸加密;
现在使用的密码,是俗称“秘钥”的随机字节流来加密的;
总结:
If判断的语句块,用于形成的逻辑分支;
for进行的语句块,用于解决重复性问题;
方法论之一:“问题分解法”--数越大就越难处理,将大问题分解成小“单元”;
方法论之二:逻辑--布尔逻辑;与或非;等等;模糊逻辑;
参考文献
--《程序员的数学》.(日)结城浩