程序员的数学

菜单导航

1、常用数学公式: 等差/等比数列通项和求和、指数、对数、排列组合等

2、逻辑且/或/非/异或,和余数

3、数学归纳法

4、递归

5、指数爆炸

6、反证法

 

一、常用数学公式

1.0  实数:有理数和无理数的总称,常用字母R表示实数集;

  有理数是整数和分数的集合,有理数的小数部分是有限或者无限循环的数;小数部分为无限不循环的数为无理数

  自然数:全体非负整数组成的集合,常用字母N来表示

  质数:又称素数,大于1的自然数中,除了1和它本身以外不再有其他因数因数:又叫约数,整数a除以整数b(b≠0)的商正好是整数而没有余数,则b是a的因数;

  :乘方的结果。a = n^m, 指m个n相乘,把n^m乘方的结果a叫做幂,也叫n的m次幂;

1.1  等差数列

  定义:一个数列从第二项起,每一项与它的前一项的差等于同一个常数。这个数列就叫做等差数列,这个常数也叫等差数列的公差,公差常用字母d表示。

  通项公式:formula      ,        a1为等差数列首项,公差为d, 为 第n项 

  求和公式:formula  ,   Sn为数列前n项之和

  等差中项:等差数列中,若有n+m=2*r,  则任意两项  的关系为:

  其他:跟等差数列知识相关的一个有趣故事是:“高斯求和

1.2 等比数列

  定义:一个数列从第二项起,每一项与它的前一项的比等于同一个常数。这个数列就叫做等比数列,这个常数也叫等比数列的公比,公比通常用字母q表示。

  通项公式: (n∈N*),当q>0时,可把看做是自变量n的函数,点(n, )是曲线 上的一群孤立的点。

  求和公式:   或   (q≠1)。

  等比中项:  ; 即等比数列中,若q+p = 2r, 则有, 等比中项。

   其他:跟等比数列知识相关的一个有趣故事是:“棋盘上的麦粒

1.3 指数函数

  定义:一般地,函数(a为常数且以a>0,a≠1)叫做指数函数, 函数的定义域是R,自变量x就叫做指数,常数a叫底数。

      对于一切指数函数来讲,值域为(0, +∞);指数函数的前系数为1;

  指数型函数:y = (k≠1), 格式像指数函数,但不是指数函数;

  幂函数:一般地,y=xα(α为有理数)的函数,即以底数为自变量,幂为因变量,指数为常数的函数称为幂函数

      例如函数y=x0 、y=x2、y=x-1(注:y=x-1=1/x、y=x0时x≠0)等都是幂函数

    指数函数常用公式:

  1.3.1:    ;         ;  (同底相乘,指数相加;同底相除,指数相减)   

  1.3.2:      (指数的指数,指数相乘)

  1.3.3:

1.4 对数函数

  定义:一般地,对数函数以幂(真数)为自变量,指数为因变量,底数为常量的函数。

     比如ax = n(a>0,且a≠1),那么数x叫做以a为底n的对数,记作x=logan,读作以a为底n的对数,其中a叫做对数的底数,n叫做真数。

     一般地,函数y=logax(a>0,且a≠1)叫做对数函数,也就是说以幂(真数)为自变量,指数为因变量,底数为常量的函数,叫对数函数。

   常用公式:

  1.4.1 :;    ;   负数和零无对数;

  1.4.2 :  *  = 1 ;

  1.4.3 :  ;

  1.4.4:

  1.4.5:

  1.4.6:  

  1.4.7:

几张图表如下:

程序员的数学_第1张图片程序员的数学_第2张图片

程序员的数学_第3张图片

 

1.5 排列组合

  1.5.1 阶乘:阶乘是指一个运算符号,一个正整数的阶乘factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。

       自然数n的阶乘写作n!,亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

  1.5.2 排列定义:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;

        从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 A(n,m)表示。

  1.5.3 排列计算公式 

  1.5.4 组合定义:从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;

         从n个不同元素中取出m(m≤n)个元素的所有组合的个数,叫做从n个不同元素中取出m个元素的组合数。用符号 C(n,m) 表示。

  1.5.5 组合计算公式 

  1.5.6 排列和组合区别:排列是讲究排序的,而组合不考虑元素排序,一般来说,从n中不同元素取出m个元素的排列,要比组合数量多。

       对于组合公式的理解,相对排列而言会绕一点,这里试图解释一下组合公式:

      从n个不同元素中取出m个元素的所有组合个数,可以理解成先从n个不同的元素中取出m个元素的所有排列个数为Anm    (即A(n, m) ),

      然后因为m个元素的排序方式共有m!(即m*(m-1)*(m-2)*...*1, m的阶乘)种,而组合不考虑元素排序,相当于数量A(n, m)中重复了m!次,

      所以排序数量A(n, m)  除以 排序方式数量m! ,  则是我们需要的没有重复的组合数量了,即C(n, m) = A(n, m) / m!

  

二、逻辑且/或/非/异或,和余数

2.1 计算机为什么采用二进制计数法

  2.1.1 在10进制计数法中,位数少,但是数字的种类多。(对于人类来说,比较易用)

  2.1.2 在二进制计数法中,数字的种类少哦,但是位数多。(对于计算机来说,这种比较易用)

2.2 指数的法则:对于指数 a^n, n每减1,新的值就变成原来的1/a,即a^(n-1) 为 a^n的1/a

2.3 零的作用:用来表示占位;也用来统一标准,简化规则;

2.4 逻辑

  命题:能够判断对错的陈述句叫做命题。命题正确时,则该命题为“真”(true);反之,命题不正确时,称该命题为“假”(false)。

  在建立规则时,需要确认规则有没有“遗漏”和“重复”;

  没有“遗漏”,即完整性,明确此规则在什么情况下都能适用;没有“重复”,即具备排他性,明确此规则不存在矛盾之处。

  逻辑从根本上说是对完整性和排他性的组合表达。

  逻辑非:非真为假,非假为真;

  逻辑且:A和B都为真时,才是真;A和B只要有一个为假,则为假;

  逻辑或:A和B只要有一个为真,则结果为真;A和B都为假,则为假;

  逻辑异或:A和B一真一假,则结果为真;A和B都为真,或者都为假,则结果为假;

  德·摩根定律:“非A”或者“非B”, 和非“A与B”是等价的; “非A”并且“非B”,和非“A或B”是等价的;

2.5 卡诺图:简化复杂逻辑表达式的有效工具

  2.5.1 二灯游戏(绿灯、黄灯):

    规则:1)绿灯灭,黄灯亮;   

       2)绿灯、黄灯灭;   

       3)绿灯、黄灯都亮

    命题A  :  绿灯亮

    命题B :  黄灯亮

    逻辑表达式为:(非A 并且 B) 或者 (非A 并且 非B) 或者 (A 并且 B)

    卡诺图表示法(打上钩):

    程序员的数学_第4张图片

  2.5.3 三灯游戏 (绿灯、黄灯、红灯)

    规则:1)绿灯、黄灯、红灯都灭

       2)黄灯灭、红灯亮

       3)绿灯灭、黄灯亮

       4)绿灯、黄灯、红灯都亮

    命题A : 绿灯亮

    命题B : 黄灯亮

    命题C : 红灯亮

    逻辑表达式:(非A 且 非B 且 非C) 或 (非B 且 C)  或 (非A且 B) 或 (A且B且C)

    卡诺图表示法(打钩):

      程序员的数学_第5张图片

 

 

2.6 余数的作用:分组,将较大的数字除一次就能分组

  2.6.1 思考题:今天是周三,那么100天后是周几? 一亿天以后呢?(运用余数思考)

  2.6.2 思考题:今天是周三,10^100天后是周几?(当计算有难度的时候,可以试图通过找规律来简化问题)

  2.6.3 思考题:1234567^987654321的个位数是什么?(找规律:找出规律,再结合余数,把大数字简化成小数字)

  2.6.4 思考题(黑白棋读心术):

     1)魔术师和他的徒弟在台上表演,台下有观众,魔术师蒙着眼睛,徒弟不允许说话,若干黑白棋(每个黑白棋像硬币样,只是一面黑色,一面白色);

        2)让观众在桌子上随机放7枚黑白棋的棋子排成一列。魔术师蒙着眼睛,看不到棋子;

     3)让魔术师的徒弟在看完这7枚棋子后,在后面添加了一枚棋子,与其他棋子并排。这时有8枚棋子,魔术师依然蒙着眼睛;

     4)这时让观众可以将其中1枚棋子翻转,或者不翻转任何棋子。此间,徒弟和观众不发一言,魔术师依然蒙着眼睛,不知道观众有没有翻转棋子;

     5)魔术师摘下眼罩,观察8枚棋子,然后马上就能判断:“观众翻转了棋子” 或 “没有翻转棋子”,识破观众的行为。

    问:魔术师是如何识破观众的行为的?

   2.6.5 思考题(寻找恋人):

    在一个小王国中,有8个村子(A~H)。如下图所示,各个村之间道路相连(黑点表示村子,线表示道路)。而你要寻找流浪在这个王国的你唯一的恋人。

    你的恋人住在这8个村子中的某一个里,她每过1个月便顺着道路去另一个村子,每个月都一定会换村子,然后选择哪个村子是随机的,预测不了。

    例如:如果恋人这个月住在G村,那么下一个月可能会住在“F、C、H中的某一个村子“。

    目前你手上掌握的确凿信息只是:1年前(12个月前),恋人住在G村。

    现在问:这个月恋人住在A村的概率?(奇数、偶数)

    程序员的数学_第6张图片

  2.6.6 思考题(铺设草席):

    如下图所示,有这样一个房间,使用图中右下角所示的草席能够正好铺满房间吗?(前提是不能使用半张草席)

    如果不能铺满的话,请说明理由?

    程序员的数学_第7张图片

  2.6.7 思考题(哥尼斯堡七桥问题):

    如下图所示,在很久以前,有一个叫哥尼斯堡的小城。小城被河流分割成了4块陆地。人们为了连接这些陆地,建设了7座桥。

    现在要你找出走遍7座桥(a、b、c、d、e、f、g)的方法,但是,必须遵守以下条件:

      1)走过的桥不能再走

      2)可以多次经过同一块陆地

      3)可以从任一陆地为起点

      4)不需要再回到起点

    最后,如果能够走遍7座桥的话,请说明一下方法。如果不能,也请证明一下。

    程序员的数学_第8张图片

 

三、数学归纳法

3.1 断言:断定一个特定前提为真的陈述

3.2 数学归纳法:数学归纳法是证明有关整数的断言对于0以上的所有整数(0、1、2、3...)是否成立时所用的方法。

3.3 数学归纳法的证明方法步骤:

  1)步骤1:证明“P(0)成立”。步骤1也叫基底(base)

  2)步骤2:证明不论k为0以上的哪个整数,“若P(k)成立,则P(k+1)也成立”。步骤2也叫归纳(induction)

  若步骤1和步骤2都能得到证明,就证明了“断言P(n)对于0以上的所有整数n都成立”。

3.4 数学归纳法实例(求奇数的和):

  3.4.1 断言Q(n) : 1 + 3 + 5 + 7 + ... + (2*n-1) = n^2

  3.4.2 用数学归纳法来证明“断言Q(n)对于1以上的所有整数n都成立”

  3.4.3 步骤1:基底的证明

     证明Q(1)成立。因为Q(1) = 1^2, 所以确实成立。步骤1证明完毕。

  3.4.4 步骤2:归纳的证明

    证明k为1以上的任意整数时,“若Q(k)成立,则Q(k+1)也成立”。

    假设Q(k) = 1 + 3 + 5 + 7 + ... + (2*k-1) = k^2 成立

    则来证明等式Q(k+1)成立

    程序员的数学_第9张图片

    Q(k+1)的左边和右边计算结果相同。

    由此,从Q(k)到Q(k+1)推导成功,步骤2得到了证明。

    至此,通过数学归纳法的步骤1和步骤2都证明了断言Q(n)。也就是说,通过数学归纳法,证明了断言Q(n)对于1以上的任意整数n都成立。

     

四、递归

4.1 思考题(汉诺塔):

  有三根细柱(A、B、C)。A柱上套着6个圆盘。这些圆盘大小各异,按从大到小的顺序自下而上摆放。

  现在要把A柱上的6个圆盘全部移到B柱上。并且在移动圆盘时须遵守以下规则:

  1)一次只能移动柱子最上端的一个圆盘

  2)小圆盘上不能放大圆盘。

  将1一个圆盘从一根柱子移到另一根柱子,算移动“1次”。那么,将6个圆盘全部从A移到B最少需要移动几次呢?

  (可以先通过3个圆盘、5个圆盘找出递归规律)

  程序员的数学_第10张图片

  先来看看3层汉诺塔的解法(移动7次):

  程序员的数学_第11张图片

  发现移动2个圆盘的规律:

  程序员的数学_第12张图片

 

4.2 递归的思维方式:将复杂问题转换成较为简单的同类问题。在问题中找出递归结构,根据递归结构建立递归公式。

4.3 思考题(不断繁殖的动物):

  有一种动物,它出生2天后就开始以每天1只的速度繁殖后代。假设第一天,有一只这样的动物(该动物刚出生,从第三天起繁殖后代)。

  问到第11天,共有多少只?

 

五、指数爆炸

5.1 思考题(折纸问题):

  假设现在有一张厚度为1mm的纸,纸质非常柔软,可以对折无数次。每对折一次,厚度便翻一番。

  已知地球距月球约39万公里,请问对折多少次后厚度能够超过月地距离呢?

5.2 指数爆炸:数字每次翻倍,然后我们会发现这种数字会急速增长。这种情况我们叫它“指数爆炸”,也可以称为“指数式增长”

5.3 思考题(寻找犯人,二分法查找)

  有15个犯罪嫌疑人排成一排,其中只有一个是真正的“罪犯”。

  你要通过问他们“罪犯在哪里?”来找出 真正的罪犯。

  假设选择其中1人问:“罪犯在哪里?”会得到以下3钟答案,其中有一个是正确的。

  1)“我是罪犯”(询问对象是罪犯时)

  2)“罪犯在我左边”

  3)“罪犯在我右边”

  这时,仅通过3次问话就能从15人中找到真正的罪犯。那么,应该怎么问话呢?(找出地推结构以及递推公式)

  

  程序员的数学_第13张图片

 

 

六、反证法

6.1 反证法

  1)首先,假设“命题的否定形式”成立

  2)根据假设进行论证,推导出矛盾的结果

  一言以蔽之,反证法就是“先假设命题的否定形式成立,然后再进行推理,引出矛盾”

6.2 反证法实例:为什么不存在“最大的整数”?

  假设存在“最大的整数”,并将它设为M。

  那么M+1就比M大,这与M是最大的整数的假设相矛盾。

  因此不存在“最大的整数”。

6.3 反证法实例2:请证明质数是无穷的

  假设“质数不是无穷的”,即“质数的个数是有限的”成立。

  假设质数的个数是有限的,所以所有质数的集合就可以写为:

  2,3,5,7,..., P

  现在,将所有的质数(2,3,5,7,..., P)相乘,并设相乘的结果+1为Q。

  即Q = 2*3*5*7*...*P + 1

  因为假设质数是有限个的,所以这个Q的大小也是有限的。

  而Q比所有的质数相乘的结果大1,因此Q比任何质数(2,3,5,7,...,P)都大。

  “Q比任何质数都大”也就意味着“Q不是质数”。

  另一方面,这个Q除以2,3,5,7,...,P中的任一一个数,余数都是1(不能整除)。

  这就表明,Q只能被1和Q本身整除,所以根据质数的定义可得“Q是质数”。

  因此“Q不是质数”和“Q是质数”都成立,这是矛盾的。

  因此,通过反证法证明了“质数是无穷的”。

 6.4 反证法的主意事项

  反证法从“要证明的命题的否定形式”出发,即必须先假设错误的假设成立。

  但到引出矛盾结论为止的论证过程本身必须正确,之所以这么说因为如果中途的论证出现错误,就不能得出“因为最初的假设错误,所以产生矛盾”的结论。

 

参考资料:百度百科,和《程序员的数学.(日)结城浩》

你可能感兴趣的:(程序员的数学)