记录读书过程中有启发和有趣的知识点,关于书本内容的截图全部来自对书本的拍照。
第1章 0 的故事
主要讲的是 0 在数学中的作用和按位计数法(二进制,十进制,指数法等等)。
拓展:
参考链接:https://www.cnblogs.com/xiaoyh/p/10249006.html。
题目:计算整数的二进制表示中1的个数。其中的一个解法:把一个整数n减去1,再和原来的整数与运算,会把该整数的最右边的1变成0。
这个思路可以用来解如下问题:
Power of Four(来自LeetCode)
Given an integer (signed 32 bits), write a function to check whether it is a power of 4.
输入一个32位的整数,判断是否是4的倍数
我的代码:
public class Solution {
public bool IsPowerOfFour(int num) {
bool result = false;
if(((num - 1) & num) == 0){
if(Math.Log(num, 2)%2==0){
result =true;
}
}
return result;
}
}
第2章 逻辑
复习了逻辑的基础知识。
摩根定律:一个命题和他的逆否命题是等价的。
逻辑的4种表现形式:表达式,真值表,卡罗图,文氏图。
如下是书中关于逻辑的四种表现形式的截图:
第3章 余数
书中介绍的一些很有意思的思考题,也介绍了很多数学中有意思的规律:
-
10 的 100 次方天后是星期几?
10的100次方除以7的余数是有规律的。 -
1234567 的 987654321 次方的个位数是什么?
7 乘方的末位数是有规律的。 -
寻找恋人
-
哥尼斯堡七桥问题
本章还介绍了简单奇偶校验的数学原理,在通信中应用很广泛,感兴趣的可以百度了解更多。
第4章 数学归纳法
数学归纳法的基本原理和内容就不多说。
有个小规律记录下:
1
+
2
+
3
+
.
.
.
+
(
2
×
n
−
1
)
=
n
2
1+2+3+...+(2 \times n-1)=n^2
1+2+3+...+(2×n−1)=n2
第5章 排列组合
这章写得简单易懂,以后需要可以再来温习一遍。下面是关于排列组合的几个公式:
P
n
k
=
n
×
(
n
−
1
)
×
(
n
−
2
)
×
.
.
.
×
(
n
−
k
+
1
)
P_n^k=n\times(n-1)\times(n-2)\times...\times(n-k+1)
Pnk=n×(n−1)×(n−2)×...×(n−k+1)
P
n
k
=
n
!
(
n
−
k
)
!
P_n^k=\frac{n!}{(n-k)!}
Pnk=(n−k)!n!
C
n
k
=
n
!
(
n
−
k
)
!
k
!
C_n^k=\frac{n!}{(n-k)!k!}
Cnk=(n−k)!k!n!
C
n
k
=
P
n
k
P
k
k
C_n^k=\frac{P_n^k}{P_k^k}
Cnk=PkkPnk
第6章 递归
递归对程序员来说一点都不陌生,本章介绍了几个经典问题的解法。
汉诺塔,斐波拉契数列,帕斯卡三角形,谢尔平斯基三角形。
没看这本书之前,我一直以为斐波拉契数列是个无聊数列,没有什么实际意义,看了这章的介绍改变了这种想法。
帕斯卡三角形
LeetCode 上正好刷到帕斯卡三角形的题:Pascal’s Triangle II
编写函数输出帕斯卡三角形第n层,层数从0开始。如下是我结合书中介绍的帕斯卡三角形和组合数的关系写出的代码:
public class Solution {
public IList<int> GetRow(int rowIndex) {
List<int> result = new List<int>();
result.Add(1);
long pre=1;
for(int i=0;i<rowIndex;i++){
pre=(pre*(rowIndex-i))/(i+1);
result.Add((int)pre);
}
return result;
}
}
第7章 指数爆炸
本章介绍了指数,二分法查找,对数,利用对数求解乘法运算。
第8章 不可解问题
这章介绍了什么是不可解问题,理论有点绕,还是能看懂。
第9章 什么是程序员的数学(总结篇)
对书本内容进行了总结,读完本书感觉数学是还是很有意思的。
附录:迈向机器学习的第一步
附录简单介绍了机器学习的一些基础知识。机器学习预测问题和分类问题,感知器,梯度下降法,神经网络。
机器学习的简化流程: