之前在买书的时候凑单的时候买了一本《程序员的数学》,希望能够提升一下自己解决问题的能力,数学应该是最锻炼脑力的学科了。但是当我兴冲冲的去翻阅这本书的时候,展现在我面前的内容不是很符合我的要求~一句话,知识太过于基础。
我觉得这本书面向的读者更适合那些刚接触程序员的人,这样可以从数学的角度把他们带入程序的世界,这样就有不同的思考方式,能够激起更多的兴趣在程序的世界中走的更远,总的来说是一本非常不错的“数学书”,因为它不是那么晦涩难懂,没有啃不动的定理和公式,这样可以使得你更专注于它传达的知识。
保持求知欲是提升解决问题能力的源泉。
主要内容:
”0“--做出简单规则 , 很多的情况下引入0只是让规则更加容易的描述。如果能够拥有一致性的简单的规则,就更加的便于计算机进行处理。例如按位计数法中的0次幂为1的规则引入。
”逻辑“--两个世界 , 逻辑消除歧义的工具,表述更加严格,具有完备性和排他性。关于逻辑的工具有逻辑表达式,真值表,文氏图,卡诺图,其中卡诺图非常适合用来化简复杂逻辑表达式。
”余数“--分组 , 如果碰到一个复杂的问题,可以首先进行逐个计算,是否能够发现周期性的循环规律,如果可以则可以利用余数的方法缩减问题的规模,复杂问题就得到了简化。
”数学归纳法“--通过2个步骤挑战无穷 , 数据归纳法在程序正确性验证中的一个应用就是循环不变式。
”排列组合“--关键在于认清问题的性质 , 排列,组合,置换等概念。
”递归“--在自己中找出自己 , 递归也是分解,降级问题的一个方法,一个问题必须包含相同结构的小规模问题才是正确的递归结构,一定是相同结构的子问题。
”指数爆炸” , 指数的增长非常的恐怖,但是指数的下降也可以应用到程序设计中加快程序运行时间,如二分查找。
“不可解问题”--展示了原理上的界限
解决问题的能力非常重要,无论数学还是程序应用,解答思考题时,可以首先利用较小的规模试算的方法,发现规律,性质,结构,循环,一致性等。认清隐含在问题中的模式。另外抽象化也是解决问题中重要的概念,只有同样能够运用于其他类似问题的方法,才能够称为解法。
《程序员的数学》读后感