程序员的数学——读书笔记

时间:2021-03-09 02:08:48

0的故事

10进制

常用的10进制如:0、1、2、3、4、5、6、7、8、9

逢10进1,1我们读作一,10我们读作十一,如数字1125,我们分别从右往左数,5(个),2(十),1(百),1(千),把它写成一个算式就是下面这样。

1*1000 + 1*100 + 2*10 + 5*1

程序员的数学——读书笔记

2进制

程序员的数学——读书笔记

程序员的数学——读书笔记

程序员的数学——读书笔记

计算机为什么采用2进制

计算机之所以采用2进制是因为2进制的种类比较少,不是0就是1,而10进制的种类就比较多了,不过对于人类来说10进制会被2进制好理解,因为10进制的位数比2进制的位数要少很多,但因为计算机的处理速度非常快,因此它并不在乎你有多少位。

在编程中,计算机会将人类的10进制转换成2进制,通过2进制进行计算,计算出来的结果再转换成10进制输出。

0的作用

1、占位

2、统一标准,简化规则

3、没有

4、起点

5、分界点

计数法的作用

当一个数越大就越难分辨它的大小,而计数法的作用就是将大的数分解成一个小的数,使我们能更快的理解。

逻辑

逻辑是消除歧义的工具

很多人都觉得,"逻辑冰冷且机械死板",确实,逻辑有这种特征,但正因如此,它才有用,人类易被感情左右,但计算机不同,正因为它冰冷且机械死板,计算机才会一直稳定地运行,给我们所用。

异或

当A和B都满足或都不满足时为false,因为对于某些情况,你不可能同时既是A又是B,它跟或是不一样的。

异或 ^ 的几个作用

在javascript中有一个按位异或运算符 (^),可以用它来实现当只能有一个为真的情况。

var a = 5;
var b = 12;
console.log(a>4 ^ b>10); 0
console.log(a>5 ^ b>10); 1
console.log(a>5 ^ b>12); 0
console.log(a>5 ^ b>10); 1
^ 运算符会查看两个表达式中二进制形式的值,当且仅当只有一个表达式的某位为 1 时,结果中的该位才为 1。否则,结果中的该位为 0。
蕴含

p→q仅当p为真、q为假时为假,否则为真。

逻辑规则中「蕴含」概念的通俗解释

数学归纳法

求1到100的和

(100+1)*100/2

(起始数 + 终止数) * 一共的份数 / 2(因为起始数加终止数需要耗费两份)

抽象思维和归纳法的背后就是方便重用。

排列组合

植树问题

在10m的路,每隔1m植一颗数需要多少颗?

需要11颗,起始位也需要一颗。

二分法

一分为2,可以直接过滤掉一半的数据。

总结

1、认清模式

在解答思考题时,我们经常会使用"先用较小的数试算"的方法。用较小的数进行尝试,可以发现规律、性质、结构、循环、一致性等,认清隐含在问题中的模式(认清模式,进行抽象化)。否则,即使解决了问题,也只是一知半解。

另外,我们还尝试了"对目前得到的结果进行抽象化"。通过抽象化,可以将结论运用到当前问题以外的其他问题中。如果问题的解法严格来说只能够运用于当前问题,那么这个解法就名不副实。只有同样能够运用于其他类似问题的方法,才能称为解法。

2、由不擅长催生出的智慧

人类擅长某事,正是这些不擅长,催生出了各种闪耀的智慧。

人类不擅长处理庞大的数字,因此在计数法上下了很多工夫,罗马数字表示法,指数表示法等。

人类不擅长毫无差错地进行复杂判断,因此逻辑就诞生了。从此可以通过逻辑表达式进行推论,也可以通过卡诺图解决复杂逻辑。

人类不擅长管理大量事物,因此进行了分组。将同一组的事物视为同类事物,管理起来就会方便许多。

人类不擅长处理无穷,因此通过有限的步骤处理无穷。

...诸如此类,人类运用智慧,细心钻研,不断地挑战问题。想法设法缩小问题规模,降低复杂度,使问题达到"可以机械式地解决"的状态。

只要达到这个状态,就能将接力棒传至下一位赛跑运动员----计算机。

你有不擅长的地方吗?那里或许会让你产生新的智慧,找到新窍门呢!