本
文
摘
要
一、二进制
二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。这一系统中,通常用两个不同的数字0和1来表示。
二进制是计算机系统的基础,数字电子电路中,逻辑门直接采用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个比特(Bit,Binary digit 的缩写)。
(二进制)
程序员的数学 第2版(图灵出品) ¥41 购买二、余数
余数就是指整数除法中被除数未被除尽的部分,且余数的取值范围为 0 到除数之间(不包括除数自身)。取余数运算 a mod b = c(b不为0)表示整数a除以整数b所得余数为c。例如:32÷5= 6…2,更专业的符号也可以写作 32÷5=6 又 2/5,或者32 mod 5=2。
可不要小看余数,无论是在日常生活中,还是计算机领域中,它都发挥着重要的作用。当然,计算机中的余数思想大多被运用在很多常见的算法和数据结构中,而且有可能你在不知情情况下就运用到它。
(求余数)
程序员的数学2 概率统计(图灵出品) ¥56.4 购买三、布尔代数
布尔代数是一个用于 *** 运算和逻辑运算的公式:〈B,∨,∧,¬ 〉。其中B为一个非空 *** ,∨,∧为定义在B上的两个二元运算,¬为定义在B上的一个一元运算。通过布尔代数进行 *** 运算可以获取到不同 *** 之间的交集、并集或补集,进行逻辑运算可以对不同 *** 进行与、或、非。
可以说,布尔代数算是编程中控制逻辑的灵魂。因为真值可以在逻辑电路中表示为二进制数数或电平,这种相似性同样扩展到它们,所以布尔代数在电子工程和计算机科学中同在数理逻辑中一样有很多实践应用。在电子工程领域专门化了的布尔代数也叫做逻辑代数,在计算机科学领域专门化了布尔代数也叫做布尔逻辑。
(布尔代数)
程序员的数学3 线性代数(图灵出品) ¥56.4 购买四、迭代
迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果。每一次对过程的重复被称为一次“迭代”,而每一次迭代得到的结果会被用来作为下一次迭代的初始值。
数学中的迭代可以指函数迭代的过程,即反复地运用同一函数计算,前一次迭代得到的结果被用于作为下一次迭代的输入。
在计算机科学中,迭代是程序中对一组指令(或一定步骤)的重复。它既可以被用作通用的术语(与“重复”同义),也可以用来描述一种特定形式的具有可变状态的重复。
将迭代法和计算机强大的处理能力相结合,我们能创造出很有价值的数据结构和算法。
(一个五边形的迭代。将对角用直线段连起来得到一个五角星,后者中心围成了一个倒过来的小五边形。迭代地执行这一过程会产生一系列嵌套的五边形和五角星。)
程序员的数学基础课 从理论到Python实践 ¥44.5 购买五、递归
递归(Recursion),在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。也可以理解为自我复制的过程。
程序调用自身的编程技巧称为递归。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
递归的能力在于用有限的语句来定义对象的无限 *** 。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
(德罗斯特效应是递归的一种视觉形式。图中女性手持的物体中有一幅她本人手持同一物体的小图片,进而小图片中还有更小的一幅她手持同一物体的图片,依此类推。)
六、数学归纳法
数学归纳法(Mathematical Induction、MI、ID)是一种数学证明方法,通常被用于证明某个给定命题在整个(或者局部)自然数范围内成立。除了自然数以外,广义上的数学归纳法也可以用于证明一般良基结构,例如: *** 论中的树。这种广义的数学归纳法应用于数学逻辑和计算机科学领域,称作结构归纳法。
(多米诺骨牌效应:骨牌一个接一个倒下,就如同一个值到下一个值的过程)
迭代和递归,以及与它们相关的数学归纳,是和基础编程关系非常紧密的。迭代法和递归都是通过不断反复的步骤,计算数值或进行操作的方法。迭代一般适合正向思维,而递归一般适合逆向思维。而递归回溯的时候,也体现了正向递推的思维。它们本身都是抽象的流程,可以由不同的编程实现。
七、排列和组合
排列(permutation),一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列。特别地,当m=n时,这个排列被称作全排列(all permutation)。
组合(combination),是一个数学名词。一般地,从n个不同的元素中,任取m(m≤n)个元素为一组,叫作从n个不同元素中取出m个元素的一个组合。我们把有关求组合的个数的问题叫作组合问题。
八、动态规划
动态规划(Dynamic Programming,DP),是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法,是求解决策过程最优化的过程。
20世纪50年代初,美国数学家贝尔曼等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划能减少不必要的排列和组合,最终大幅提升算法的性能。
(算法中的动态规划问题)
机器学习的数学 ¥81.8 购买九、树
树是图论中最重要的概念之一,也是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的 *** 。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树。
(数据结构中的树存储结构)
十、图
在数学的分支图论中,图(Graph)用于表示物件与物件之间的关系,是图论的基本研究对象。一张图由一些小圆点(称为顶点或结点)和连结这些圆点的直线或曲线(称为边)组成。
图是一种多对多的数据结构,比线性表和树更复杂,它由顶点的有穷非空 *** 和顶点之间边的 *** 组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的 *** ,E是图G中边的 *** 。
(一个有六个顶点,七个边的图)
——
数学决定了一个人技术上发展的上限,它对程序员来说意义非凡!
数学不仅仅是程序员的工具,更是从低端向高端进阶的黑魔法。那么,程序员如何学好数学给自己夯实好进阶的台阶呢?
《程序员的数学基础课 从理论到Python实践》可以帮你搞定!
作者:黄申
程序员的数学基础课 从理论到Python实践 ¥44.5 购买内容
本书内容分为三大模块:“基础思想”篇梳理编程中常用的数学概念和思想;“概率统计”篇以概率统计中核心的贝叶斯公式为基点,向上讲解随机变量、概率分布等基础概念,向下讲解朴素贝叶斯,并分析其在生活和编程中的实际应用;“线性代数”篇从线性代数中的核心概念向量、矩阵、线性方程入手,逐步深入分析这些概念是如何与计算机融会贯通以解决实际问题的。
亮点
1.紧紧围绕程序员的需求。
数学的课题非常广泛,但本书没有涉及数学领域的全部课题,而是从程序员的需求出发,精心挑选了编程所需的常用知识点,并实现学以致用。
2.结合生动的案例和形象的比喻解读难点。
降低技术理解的门槛,让程序员更容易理解数学背后的逻辑,并对实际生产问题进行数学建模,进而设计出更有效的算法,编写出更优雅的代码。
3.注重编程实践。
除了阐述理论知识,书中还提供了要通过大量实践才能积累的宝贵经验,让读者有机会亲自动手编写Python 代码,进而加深理解。
4.提供源代码下载。
本书从概念到应用再到本质,层层深入,不但注重培养读者的数学思维,而且努力使读者的编程技术实现进阶,非常适合希望从本质上提升编程质量的中级程序员阅读和学习。
程序员的数学基础课 从理论到Python实践