《程序员的数学思维修炼(趣味解读)》是一本专门为程序员而写的数学书,介绍了程序设计中常用的数学知识。本书门槛不高,不需要读者精通很多高深的数学知识,只需要读者具备基本的四则运算、乘方等数学基础知识和日常生活中的基本逻辑判断能力即可。本书拒绝枯燥乏味的讲解,而是代之以轻松活泼的风格。书中列举了大量读者都很熟悉,而且非常有趣的数学实例,并结合程序设计的思维和算法加以剖析,可以训练读者的数学思维能力和程序设计能力,进而拓宽读者的视野,增强职场竞争力。
本书共11章,分别介绍了数据的表示、神奇的素数、递归、排列组合、用余数进行数据分组、概率、复利、数理逻辑、推理、几何图形构造、统筹规划等程序设计中常用的数学知识,从而引导读者深入理解编程中的数学方法和思路。本书包含的实例有结绳记事、孪生素数、梅森素数、哥德巴赫猜想、阶乘、汉诺塔、斐波那契数列、乘法原理、加法原理、字符编码、密码长度、日历中的数学、心灵感应魔术、约瑟夫环、智叟分牛、百枚钱币鼓士气、庄家的胜率、中奖概率、用概率方法求π值、复利的威力、对折纸张、舍罕王的赏赐、三段论、选言推理、假言推理、关系推理、花盆摆放、残缺棋盘、丢失的线条、田忌赛马、背包问题等。
目录
- 第1章 数据的表示
- 1.1 一则童话
- 1.1.1 0和1的故事
- 1.1.2 0是什么都没有?
- 1.1.3 0的位置
- 1.1.4 程序中的
- 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.4 必然事件与不可能事件
- 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 用穷举法解决背包问题