1、怎么学
不要纠结数字计算,把握数学的工具属性,用数学的理论和抽象思想去解决问题,多思考不同问题是否可以用同一个思想(理论)去解决,同一个问题是否可以用不同的思想(理论)去解决(即不同的解题思路);任何工具方法的出现都是有原因的,学习它们一定要去找到背后的起因,再思考结果。
程序员的数据应用地图:
![](https://img.haomeiwen.com/i2062300/3552b6ebe0dd87bb.png)
看看这张图,里面的内容无论是我已经熟悉还是不熟悉的、无论是我已经会用还是不会用的,我都将去探寻其背后的数学原理,并总结其他可以适用的地方。
在探索的过程中,可能一个原理的某些部分你是理解的,但是结合在一起就不理解了,没关系,多学几遍,当你真正用的时候就会有一种醍醐灌顶的感觉。
2、二进制
二进制的计算方式和其他进制的转换简单提一下:问:计算机的二进制数110101转为十进制是多少?
解:
抓住一个本质,那就是进制中的基数,几进制,基数就是几,本质知道了就简单了。
比如一个数字2871,本质的写法就是:2 * 1000+8 * 100+7 * 10+1,那么和基数有什么关系呢?把基数10带入进去,写法就会变成:2 * 10^3+8 * 10^2+7 * 10^1+1 * 10^0 = 2000+800+70+1=2871。
总结出:一个X进制的数字,转换为十进制,原理就是:各个位置上的数字乘上它的基数X的位数-1次幂。
比如一个二进制数字:110101,转换为十进制;其本质的基数是2。通过原理可以写出:1 * 2^5 + 1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 32+16+0+4+0+1 = 53。
上面整个过程,从十进制开始到推导出原理,到用二进制验证,本身就是数学思维。那么依据第一条“怎么学”的原则,思考起因:为什么要用十进制去推导原理呢?
因为数字的发展从早期的石子计数到罗马数字到阿拉伯数字0-9,最终人类使用最广泛的就是阿拉伯数字0-9,也就是十进制,理解起来很快。
再思考结果:为什么要用二进制来验证呢?因为计算机的逻辑电路(硬件)部分本质都是开关,只有两种状态:开和关,对应就是0和1,也就是二进制。
二进制左移一位就是把数字翻倍,比如110101左移一位得到 1101010 ,106是52的两倍。
二进制右移一位是数字除以2的整数商,比如110101右移一位得到11010,26是52的一半。
二进制左移N位就是把数字乘以2的N次方,右移N位就是数字除以2的N次方的整数商。
3、求余运算本身是个哈希函数
整数是没有边界的,可以正负无穷大,但是余数是有边界的,余数的边界取决于“模”。
不同整数对于同一个模可能会得到同一个余数,我们可以认为这些整数就是同一类,所以用同余定里可以把无限大整数通过不同的模来规划到有限的“区域”中。
4、迭代
把上一次计算的结果放入到同一套计算规则中得到一个新的计算结果,用于下一次计算,从而无限接近想要的结果。举例:二分法查找。
网友评论