花了差不多一整天的时间看完了程序员的数学,内容浅显易懂,但是看过后学到的东西还是很多的
1、0的故事
这一章主要是教会我简化问题,0主要是为了简化问题,为了便于统一处理
2、逻辑
切记:不要重复和遗漏,很多代码问题都在这块出现的,找到逻辑的表达很重要
还有德.摩根定律 (!A)||(!B) == !(A&&B)
3、余数
分组的方法解决问题(当然,准确的分类才是最重要的),很多时候,都是先分组,然后就找到了解决方案,写几个特例来看看规律,还有奇偶校验,很多问题看起来不一样,但是解决的方法确实相同的,所以得把问题抽象出来
4、数学归纳法
从特殊推出一般,类似多米诺骨牌,把牌排好(一个倒下能带倒第二个),然后推倒第一张(边界条件),这两个一个都不能少的
有时候用图形画一画,能帮你分析出很多问题,比如说1+3+5的那个,直接把图画出来就好
5、排列组合
不遗漏、不重复,置换(全排列5选5有序),排列(选择排列5选3有序),组合(无序,5选3无序是排列除去选出的3的排列)
放隔板的方法,牛掰
6、递归
自己调用自己,但是问题的规模是不断变小的,然后一定有一个边界条件
汉诺塔,分析出求解的时候的模式,然后就可以用函数表达了,杨辉三角和组合的关系
7、指数爆炸
指数爆炸的问题,切记不要在编程中用到这种复杂度的算法,稍微大点基本就废了,but当做密码的时候,就有用到了,防止暴力破解,位数越多就越优秀了,当然只是从暴力破解的角度来说
同时,换一种思维模式,二分法效率就超高了
8、不可解问题
归谬法:一种神奇的方法,先假设问题的反面是真的,然后推导出与假设矛盾的结果
就酱紫,最重要的其实是多动脑子~~~