因为本人数学不佳,逻辑思维也不强,最近想提升一下自己的数学素养和逻辑思维能力,于是去图书馆借来了《程序员的数学》一书,拜读之后,有所思有所想,总结如下。
总体来说,这本书对于学习了高中数学的人和有最基础的编程知识(甚至没有)的人来说,都是可以看懂的。本人虽不优秀,但是上过大学之后,看这本书确实觉得内容不是很有深度,但是其中确实有些思想,值得我们学习和研究。
在看书的时候,我也总结了一些自认为比较重要的内容,记录如下:
(1) 在十进制计数法中,位数少,但数字种类多——>>对人类来说比较容易使用;
在二进制计数法中,位数多,但是数种类少——>>对计算机来说比较容易使用。
(2) 罗马数字中,使用I表示1,使用V表示5,使用X表示10,使用L表示50,使用C表示100,使用D表示500,使用M表示1000。
举例:MCMXCVIII=(M)+(CM)+(XC)+(V)+(III)
=(1000)+(1000-100)+(100-10)+(5)+(3)
=1998
(3) 在考虑规则时,兼顾完全性和排他性。
完整性:没有遗漏,由此明确该规则无论什么情况下都能适用;
排他性:没有重复,由此明确该规则不存在矛盾之处。
(4) 注意在逻辑运算中,除了true和false,还存在undefined这个状态,这就是包含未定义状态。
(5) 运用
余数
,大数字的问题就能够简化成小数字的问题来解决。
|
|
——>>余数一般要结合周期性来使用。
(6) 数学归纳法是证明断言对于0以上的所有整数n都成立的方法。
(7) 容斥原理:考虑了重复元素的加法法则。
(8) 置换是排列的特殊情况,置换和
排列
都需要考虑顺序,而
组合
是不考虑顺序的方法。
组合的实现:先考虑书序进行计数,然后取出重复度。
去除重复度的重点是要知道重复度是多少,重复度就是选取数量的排列数。
(9) 组合:从n中去k的组合
从以上公式可以清楚的看出,置换和组合相结合(相乘)就是排列。
(10) 递归和归纳的本质是相同的,都是将复杂问题简化。但是它们的方向不同:
(11)
停机
问题可以证明“不可解问题”确实存在。
|
|
———>>>停机问题就是判断“某程序在给定的数据下,是否会在有限时间内结束运行”的问题。
|
|
———>>>可以通过反证法来证明无法判断。
以上就是我在这本书中看到的一些自认为比较有价值的东西,在这里与大家分享。如果其中有错误之处,敬请指正,不胜感激。