1、二进制:不了解计算机的源头,你学什么编程

我们都知道,计算机的起源是数学中的二进制计数法。可以说,没有二进制,就没有如今的计算机系统。那什么是二进制呢?为什么计算机要使用二进制,而不是我们日常生活中的十进制呢?如何在代码中操作二进制呢?专栏开始,我们就从计算机认知的起源——二进制出发,讲讲它...

程序员的数学基础课

2、余数:原来取余操作本身就是个哈希函数

你好,我是黄申。今天我们来聊聊“余数”。 提起余数,我想你肯定不陌生,因为我们生活中就有很多很多与余数相关的例子。 比如说,今天是星期三,你想知道50天之后是星期几,那你可以这样算,拿50除以7(因为一个星期有7天),然后余1,最后在今天的基础上加一...

程序员的数学基础课

3、迭代法:不用编程语言的自带函数,你会如何计算平方根

你好,我是黄申。 今天我们来说一个和编程结合得非常紧密的数学概念。在解释这个重要的概念之前,我们先来看个有趣的小故事。 古印度国王舍罕酷爱下棋,他打算重赏国际象棋的发明人宰相西萨·班·达依尔。这位聪明的大臣指着象棋盘对国王说:“陛下,我不要别的赏赐...

程序员的数学基础课

4、数学归纳法:如何用数学归纳提升代码的运行效率

你好,我是黄申。 上次我们聊了迭代法及其应用,并用编程实现了几个小例子。不过你知道吗,对于某些迭代问题,我们其实可以避免一步步的计算,直接从理论上证明某个结论,节约大量的计算资源和时间,这就是我们今天要说的数学归纳法。 平时我们谈的“归纳”,是一种从...

程序员的数学基础课

5、递归(上):泛化数学归纳,如何将复杂问题简单化

你好,我是黄申。上一节的结尾,我们用递归模拟了数学归纳法的证明。同时,我也留下了一个问题:既然递归的函数值返回过程和基于循环的迭代法一致,我们直接用迭代法不就好了,为什么还要用递归的数学思想和编程方法呢?这是因为,在某些场景下,递归的解法比基于循环的...

程序员的数学基础课

6、递归(下):分而治之,从归并排序到MapReduce

你好,我是黄申。 上一节,我解释了如何使用递归,来处理迭代法中比较复杂的数值计算。说到这里,你可能会问了,有些迭代法并不是简单的数值计算,而要通过迭代的过程进行一定的操作,过程更加复杂,需要考虑很多中间数据的匹配或者保存。例如我们之前介绍的用二分查找...

程序员的数学基础课
1239