书刊介绍
《程序员的数学思维修炼(趣味解读)》内容简介
本书是一本专门为程序员而写的数学书,介绍了程序设计中常用的数学知识。本书门槛不高,不需要读者精通很多高深的数学知识,只需要读者具备基本的四则运算、乘方等数学基础知识和日常生活中的基本逻辑判断能力即可。本书拒绝枯燥乏味的讲解,而是代之以轻松活泼的风格。书中列举了大量读者都很熟悉,而且非常有趣的数学实例,并结合程序设计的思维和算法加以剖析,可以训练读者的数学思维能力和程序设计能力,进而拓宽读者的视野,增强职场竞争力。
本书共11章,分别介绍了数据的表示、神奇的素数、递归、排列组合、用余数进行数据分组、概率、复利、数理逻辑、推理、几何图形构造、统筹规划等程序设计中常用的数学知识,从而引导读者深入理解编程中的数学方法和思路。本书包含的实例有结绳记事、孪生素数、梅森素数、哥德巴赫猜想、阶乘、汉诺塔、斐波那契数列、乘法原理、加法原理、字符编码、密码长度、日历中的数学、心灵感应魔术、约瑟夫环、智叟分牛、百枚钱币鼓士气、庄家的胜率、中奖概率、用概率方法求π值、复利的威力、对折纸张、舍罕王的赏赐、三段论、选言推理、假言推理、关系推理、花盆摆放、残缺棋盘、丢失的线条、田忌赛马、背包问题等。
本书适合广大程序设计人员及数学爱好者阅读,尤其适合有一定程序设计经验,但还需要进一步加深对程序设计理解的人员阅读。本书对IT求职人员、信息学竞赛和大学生程序设计竞赛等参赛学员也有很好的参考价值。
周颖,毕业于电子科技大学。高级程序员、某软件公司的技术总监。擅长C和C++语言,对数据结构和算法有深入的研究。长期从事行业软件设计和团队管理工作,已十年有余。有着丰富的IT架构设计经验和行业咨询经验。负责过多个大型软件项目的开发工作。作品目录
前言
第1章:数据的表示
1.1、一则童话
1.1.1、0和1的故事
1.1.2、0是什么都没有?
1.1.3、0的位置
1.1.4、程序中的0、1.2、司空见惯的十进制数
1.2.1、远古的结绳记事
1.2.2、什么是十进制计数
1.2.3、为啥人类习惯十进制
1.2.4、十进制运算规则
1.2.5、十进制数的分解
1.2.6、20!等于多少
1.2.7、大整数构想
1.3、为啥要用二进制
1.3.1、人脑与电脑
1.3.2、二进制计数规则
1.3.3、简单的二进制运算规则
1.3.4、二进制数的分解
1.3.5、十进制数转换为二进制数
1.4、还有哪些进制
1.4.1、神奇的八卦:八进制
1.4.2、钟表使用的十二进制
1.4.3、半斤八两:十六进制
1.4.4、60年一个甲子:六十进制
1.4.5、各种进制之间的转换
1.4.6、二进制与八进制、十六进制的转换
第2章:神奇的素数
2.1、怎么判断素数
2.1.1、什么是素数
2.1.2、验证素数
2.1.3、寻找素数的算法
2.1.4、已被证明的素数定理
2.2、孪生素数
2.2.1、什么是孪生素数
2.2.2、孪生素数的公式
2.2.3、中国剩余定理
2.2.4、孪生素数分布情况
2.3、使用素数的RSA算法
2.3.1、什么是RSA
2.3.2、RSA算法基础
2.3.3、RSA算法实践
2.3.4、RSA应用:数字签名
2.3.5、RSA被破解的可能性
2.4、哥德巴赫猜想
2.4.1、哥德巴赫猜想是什么
2.4.2、数值验证
2.5、梅森素数
2.5.1、什么是梅森素数
2.5.2、已知的梅森素数列表
第3章:递归——自己调用自己
3.1、从前有座山,山里有座庙
3.1.1、老和尚讲的故事
3.1.2、德罗斯特效应
3.1.3、什么是递归
3.1.4、用递归能解决哪些问题
3.1.5、一个简单例子:求最大公约数
3.2、用递归计算阶乘
3.2.1、阶乘该怎么计算
3.2.2、阶乘的递归计算方法
3.2.3、递归的过程
3.2.4、递归的本质:缩小问题规模
3.3、汉诺塔
3.3.1、古老的传说
3.3.2、从两个盘考虑
3.3.3、找出递归结构
3.3.4、实现程序
3.3.5、究竟需要移动多少次
3.4、斐波那契数列
3.4.1、兔子的家族
3.4.2、从最初几月数据中找规律
3.4.3、斐波那契数列
3.4.4、神奇的魔八方
第4章:排列组合——让数选边站队
4.1、把所有情况都列出来
4.1.1、从0还是1开始
4.1.2、赛程安排
4.2、乘法原理
4.2.1、行程安排的问题
4.2.2、乘法原理适用条件
4.2.3、棋盘上棋子的放法
4.2.4、买彩票保证中奖的方法
4.3、加法原理
4.3.1、仍然是行程问题
4.3.2、总结出的加法原理
4.3.3、骰子出现偶数的次数
4.4、排列与组合的关系
4.4.1、排列
4.4.2、组合
4.4.3、排列与组合的联系
4.4.4、可重排列
4.5、计算机中的字符编码
4.5.1、ASCII码能表示的字符数量
4.5.2、能表示更大范围的编码
4.6、密码的长度
4.6.1、容易破解的密码
4.6.2、多长的密码才安全
4.6.3、密码中使用的字符数量也很关键
第5章:余数——数据分组
5.1、复习小学的余数
5.1.1、自然数的余数
5.1.2、余数的性质
5.1.3、用余数进行分组
5.2、日历中的数学
5.2.1、n天后是星期几
5.2.2、下月的今天是星期几
5.2.3、10年后的“今天”是星期几
5.3、心灵感应魔术
5.3.1、一个小魔术
5.3.2、魔术师是怎么猜出来的
5.4、奇偶校验
5.4.1、不可靠的网络传输
5.4.2、用奇偶校验检查错误
5.5、吕洞宾不能坐首位
5.5.1、座位安排
5.5.2、试排座位找规律
5.5.3、西方的约瑟夫环
5.5.4、用数学方法解约瑟夫环
5.6、智叟分牛
5.6.1、遗产分配难题
5.6.2、智叟给出的分配方案
5.6.3、分配原理
第6章:概率——你运气好吗
6.1、初中学习过的概率
6.1.1、谁先开球
6.1.2、用程序模拟抛硬币
6.1.3、什么是概率
6.1.5、概率的基本性质
6.2、百枚钱币鼓士气
6.2.1、狄青的计谋
6.2.2、全为正面的概率是多少
6.2.3、必然还是偶然
6.3、庄家的胜率是多少
6.3.1、一个看似公平的游戏
6.3.2、庄家能赢钱吗
6.3.3、庄家盈利比率
6.3.4、游戏参与者获胜的概率
6.4、你能中奖吗
6.4.1、想中大奖吗
6.4.2、计算中奖概率
6.5、渔塘中有多少条鱼
6.5.1、该怎么估算渔塘中的鱼
6.5.2、用概率来估算
6.5.3、用概率方法求π值
第7章:翻一番是多少
7.1、翻番的概念
7.1.1、什么是翻番
7.1.2、翻倍的概念
7.1.3、计算倍数和番数
7.2、复利的威力
7.2.1、利润——投资回报
7.2.2、认识单利
7.2.3、认识复利
7.2.4、计算投资回报的程序
7.2.5、忘还钱的信用卡
7.2.6、爱因斯坦的72法则
7.3、对折纸张
7.3.1、有趣的问题:纸张对折
7.3.2、100米长的纸能对折几次
7.3.3、计算对折次数的程序
7.4、一棋盘的麦子
7.4.1、舍罕王的赏赐
7.4.2、需要多少麦粒
7.5、折半法的运用
7.5.1、翻番的逆运算
7.5.2、找出假硬币
7.5.3、编写程序找出假硬币
7.5.4、折半法在查找中的应用
第8章:数理逻辑——非此即彼
8.1、逻辑的重要性
8.1.1、模棱两可的表述
8.1.2、肯定或否定
8.1.3、程序中的逻辑判断
8.2、命题逻辑
8.2.1、什么是命题
8.2.2、命题的逻辑形式
8.2.3、简单命题
8.2.4、复合命题
8.2.5、复合命题的联结词
8.3、布尔逻辑
8.3.1、逻辑或
8.3.2、逻辑与
8.3.3、逻辑非
8.3.4、逻辑异或
8.3.5、二进制位运算
8.4、考虑到各种可能了吗
8.4.1、逻辑重叠的实例
8.4.2、逻辑遗漏的实例
8.4.3、用数轴确定边界
8.5、用卡诺图简化逻辑函数
8.5.1、什么是卡诺图
8.5.2、三变量卡诺图
8.5.3、四变量卡诺图
8.5.4、卡诺图化简
8.5.5、卡诺图中的相邻
第9章:推理——逻辑的应用
9.1、演绎推理
9.1.1、认识演绎推理点
9.1.2、三段论
9.1.3、选言推理
9.1.4、假言推理
9.1.5、关系推理
9.1.6、演绎推理综合实例
9.2、归纳推理
9.2.1、什么是归纳推理
9.2.2、完全归纳推理
9.2.3、不完全归纳推理
9.3、足球比赛的得分
9.3.1、粗心的记分员
9.3.2、从已有数据推算出比分
第10章:几何图形构造
10.1、花盆摆放问题
10.1.1、10盆花摆成5行,每行4盆
10.1.2、转变思路,找出答案
10.1.3、升级问题(10盆花摆10行,每行3盆)
10.2、残缺的棋盘能补上吗?
10.2.1、被切割的棋盘
10.2.2、能拼接出残缺棋盘吗
10.3、线条哪里去了?
10.3.1、神奇的魔术
10.3.2、解析丢失的线条
10.4、图形剪拼
10.4.1、均分三角形
10.4.2、拼接正方形
第11章:统筹规划
11.1、认识统筹规划
11.1.1、田忌赛马
11.1.2、为什么会赢
11.2、生活中的统筹规划
11.2.1、匆忙的早晨
11.2.2、如何节约运输成本
11.3、著名的背包问题
11.3.1、什么是背包问题
11.3.2、用递归程序解决背包问题
11.3.3、用穷举法解决背包问题