最全算法:程序员的数学读书笔记_程序员 数学(1),2024年最新阿里P7大牛亲自讲解

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以点击这里获取!

余数就是做除法预算时剩下的数。周期性和分组是余数性质的体现。

作用

当数据很大时,找到规律,使用余数,获得正确的答案。也就是说,运用余数,大数值得问题就能简化成小数值问题。

二、余数性质

问题 : 今天是星期日,100天以后是星期几?

答案:100%7=2 星期二

周期性

一周有7天。每过7天,变循环到相同的星期数。

分组

余数的力量——将较大的数字除一次就能分组

数0~6分别代表星期日~星期六,为一组。

三、更多思考题

加大难度

问题 : 今天是星期日,10的100次幂天以后是星期几?

答案:100%6=4 星期四

27030e2ba0a6473688cd2cf0915a2e88.webp

可以直接计算吗?当然不行,数太大。那我们该怎么做?先不急求出答案,先找规律。

规律

1天以后                  1%7=1                   星期一

10天以后                10%7=3                 星期三

100天以后              100%7=2               星期二

1000天以后            1000%7=6             星期六

10000天以后          10000%7=4           星期四

100000天以后        100000%7=5         星期五

1000000天以后      1000000%7=1       星期一

省略…

余数以1,3,2,6,4,5…的顺序循环。

数0~5分别代表星期一、星期三,星期二、星期六、星期四、星期五为一组。

再加大难度

问题 : 1234567的987654321次幂个位数是多少?

答案:987654321%4=1 个位数为7

8d5a082905e6412fb1aab222f480fb96.webp

通过试算找出规律吗?1234567的2次幂,数就很大了。

那我们该怎么做?能影响乘方结果个位数的只有个位数。

规律

7的0次幂   1

7的1次幂   7

7的2次幂   9

7的3次幂   3

7的4次幂   1

7的5次幂   7

7的6次幂   9

省略…

个位以1,7,9,3…的顺序循环。

数0~3分别代表1、7,9、3为一组。

四、奇偶校验

作用

数据传输过程会受到外界干扰,造成数据的改变。通常让数据流的前面或者后面一位成为奇偶校验位,用来检测数据传输过程中是否发生变化。

奇校验

比如Ascll码,我们知道它使用了7位二进制表示了128个常用的字符。现在我们令它的最高位成为奇偶校验位。在发送前,通过改变奇偶校验位是0还是1,从而使得8位数据中1的个数为奇数。
比如0101011,它包含了4个1,在发送前,我们需要在最高位,也就是我们约定的奇偶校验位也加上一个1。如此一来,数据中总共包含了5个1。
在数据传输过程中,如果受到外界干扰,其中任意一个0变为1,则1的个数变为了偶数6。如果其中任意一个1变为了0,则1的个数也变为了偶数4。
如此一来,接收方便可以通过检查1的个数是否为奇数来确保数据是否发生了改变。如果检查的1的个数是奇数,就是正确的数据。如果是偶数,说明数据发生了改变,就丢弃它。

偶校验

偶校验和奇校验一样,这不过在发送的时候校验位要添加的值要确保数据中1的个数是偶数。然后再接收方要检查1的个数是不是偶数,如果是偶数,就是正确的数据,否则,数据发生了改变。

使用奇校验还是偶校验由通信双方规定。它们的区别在于,使用奇校验发送的数据中不会全是0。

五、总结

对于难以处理的庞大数值,只要发现其周期性并使用余数,就能够简化问题。此外,还可以根据余数结果的差异,将许多事物进行分组。只要运用奇偶性就能省略反复试验的过程。当我们“想要详细地研究”事物时,往往容易陷人“想正确把握所有细节”的思维。但是,像奇偶性校验那般,较之“正确地把握”,有时“准确地分类”更为有效。人们只要发现了周期性和奇偶性,就能将大问题转换为小问题来解决。余数就是其中一种重要的武器。

感兴趣的同学:

可以自行百度寻找恋人、铺设草席、哥尼斯堡七桥(一笔画)问题。

数学归纳法

——如何征服无穷数列

一、简介

数学归纳法是证明某断言对于0以上的所有整数(0,1,2,3,…)都成立的方法。0以上的整数0,1,2,3,…有无穷个,但若使用数学归纳法,只需要经过“两个步骤”,就能证明有关无穷的命题。

二、说明

1+2+3…+100?

大家都知道1加到100是5050。如果通过一步一步计算需要很长的时间。那么,有没有一个方法快速的求出答案。

德国数学家高斯(Karl Friedrich Gauss,1777-1855,后来成为了历史上著名的数学家。)在9岁时遇到了同样的问题,却马上得出了答案。当时他既没有计算器也没用计算机,是不是很厉害啊!那么,他究竟是怎么算出来的呢?

小高斯是这么想的:

1+2+3…+100正向计算和100+99+98…+1逆向计算的结果是相同的。那么,如果两者相加就是100个101,100×101=10100。再除于2,获得一半的值就是5050。真是妙不可言啊!

小哆啦是这么想的:

1+100是101,2+99也是101…

那么101有100÷2=50个

所以答案是101×50=5050

多米诺骨牌

想要推到所有的多米诺骨牌,我们会怎么做呢?

大家会说,把它们排成前面一个倒下就能顺次带倒下一个骨牌,推到第一个骨牌就可以了。是的,没错,就是这样。

以上两个案例,就体现了数学归纳法的“两个步骤”。

三、定义

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

假设现在要用数学归纳法来证明“断言 P ( n )对于0以上的所有整数 n 都成立”。数学归纳法要经过以下两个步骤进行证明。

  1. 基底( base ):证明“ P (0)成立”
  2. 归纳( induction ):要证明无论 k 为0以上的哪个整数,“若 P ( k )成立,则 P ( k + I )也成立”。

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

排列组合

——解决计数问题的方法

一、计数

概念

有人会说:计数有什么概念可言,我们从小就学会“数数”,再简单不过了。但是,如果数非常大的时候,计数结果的正确性,我们就很难保证了。这时,我们就需要通过一些方法,获得正确的计数结果。计数就是通过加法法则、乘法法则、置换、排列、组合等计数方法。获得准确的计数结果。

注意

我们不需要死记硬背计数方法,而是注意这些方法是如何推导出来的。

注意“遗漏”和“重复”

计数和第二期内容讲的逻辑是一样的,遗漏就是没有数全所有的数,重复则和遗漏恰恰相反,是将已经数了的,又多数一次或几次。所以,有“遗漏”或“重复”,就不能获得准确的计数结果。

举个例子:

爸爸是大学毕业生,开发工程师

妈妈是大学毕业生,测试工程师

舅舅是高中毕业生,饭店老板

初中以上学历的学历的是3人,根据条件判断,不能有遗漏。即是大学毕业生,又是开发工程师的是1人,不能重复计算,因为是同一人。

注意不要忘记0

我们回顾一下,0所起到的作用。0的作用:站位、统一标准,简化规则。在计算机中,0起到非常重要的作用。不仅在二进制,排序、集合等等都有涉及。

问题 : 间隔1米站1位同学,那么10米需要几位同学?

需要11位同学,因为第一位同学不需要间距,10÷1是10是间隔数,而不是人数。本题和植树问题相似,不要忘记0的重要性。

二、计数方法

加法法则

要数出分为两个集合的事物时,可以使用加法法则。但是,加法法则只在集合中没有重复元素的条件下成立。也就是说,使用加法法则时,一定要注意是否有重复。

问题 : 1~13数字中2的倍数和6的倍数的有多少?

2的倍数有:2,4,6,8,10,12,共6个

3的倍数有:3,6,9,12,共4个

即是2的倍数,又是3的倍数有:6,12,共2个

因此有6+4-2=8

既不是2的倍数,也不是3的倍数。的倍数的个数,加上3的倍数的个数,再减去重复的个数,就是容斥原理(the rinciple of inclusion and exclusion)。这是“考虑了重复元素的加法法则”。在使用容斥原理时,必须弄清“重复的元素有多少”。这也是“认清计数对象性质”的一个例子。

乘法法则

需要根据两个集合进行“元素配对”时,可以使用乘法法则。

举2个例子:

  1. 大家都非常熟悉扑克牌,有4种花色,每个花色有A、2~10、J、Q、K,共13张牌。除大王牌,一共是4×13=52张牌。
  2. 有3个骰子,摇骰子,3个骰子摇出来的数,形成3位数,共能形成6×6×6=216种。也可以理解为6的3次幂,每个骰子出来的结果有1~6,6种情况,3个骰子就有6的3次幂种。

置换

将 n 个事物按顺序进行排列称为置换(substitution)。

举个例子:

A、B、C这3张牌,有3×2×1=6种排法。因为第1张牌,可以从A、B、C任选。而第2张牌,只能从剩下2张牌中选,第3张牌没得选。

问题:扑克牌(不包括王牌)摆成一排,有多少种排法呢?

和↑例子,思路相同。

52!=52×51×50×…×1 数非常大

这里,52!称为52的阶乘(factorial),是因乘数呈阶梯状递减而得名。

8d5a082905e6412fb1aab222f480fb96.webp

0! 是多少呢?0还是1

三、排列组合​​​​​​​

排列

排列(permutation)和置换类似,都需要考虑顺序。区别是置换是排序所有事物,而排序是从事物中拿出几个或多个进行排序。

举个例子:

在上面置换例子的基础上,多了D和E两张牌,也就是有5张牌。从5张牌中,选择3张牌,有如下图所示种排法。P是排列首字母大写。

eq?P_%7B5%7D%5E%7B3%7D%20%3D%20%5Cfrac%7B5%21%7D%7B%285-3%29%21%7D%20%3D%20%5Cfrac%7B5%20%5Ctimes%204%20%5Ctimes%203%20%5Ctimes%202%20%5Ctimes%201%7D%7B2%20%5Ctimes%201%7D%20%3D%205%20%5Ctimes%204%20%5Ctimes%203

组合

组合(combination)和置换、排列不同,不考虑排序,内容一样就是相同。

举个例子:

5张里面取3张的组合的总数写作eq?C_%7B5%7D%5E%7B3%7D(C是combination的首字母。)计算如下。

5张里面取3张的组合的总数 = 5张里面取3张的排列总数(考虑顺序排列的数) / 3张的置换总数(重复度)eq?%5Cfrac%7BP_%7B5%7D%5E%7B3%7D%7D%7BP_%7B3%7D%5E%7B3%7D%7D%20%3D%20%5Cfrac%7B5%20%5Ctimes%204%20%5Ctimes%203%20%7D%7B3%20%5Ctimes%202%20%5Ctimes%201%7D%20%3D%2010​​​​​​​

置换、排列和组合的关系

  • 置换:可以看作是排列的一个特例,即当排列中选取的元素数目等于集合中元素的总数时,排列就变成了置换。
  • 排列和组合:虽然都涉及从n个不同元素中取出m个元素,但排列关注的是元素的有序排列,而组合关注的是元素的无序组合。简单来说,排列是需要考虑顺序的;组合不需要考虑顺序,仅考虑选择对象。​​​​​​​

递归

——自己定义自己

一、开头

“GUN is Not UNIX”,这里GUN是什么的缩写?是“GUN is Not UNIX”的缩写。那第一个单词GUN是什么的缩写?那也是“GUN is Not UNIX”的缩写。是不是一脸懵,这就是递归。在开发中,常常使用递归,方法调用自己。使用递归时,要注意逻辑,不然有可能死循环。

二、汉诺塔

有可能大家没有听说过“汉诺塔”这个词汇。但是,大家一定玩过或听说过这个游戏。是一个由法国数学家爱德华.卢卡斯(Edourd Lucas)于1883年发明的游戏。

6a8e1c0850d74f78b082e9006146c9a4.webp​​​​​​​

游戏规则

有3个柱子,1个柱子上有圆盘,从上往下,圆盘逐渐变大。需要把所有的圆盘从一个柱子上,移动到另一个柱子上。

  • 规则1:一次只能移动一个圆盘。
  • 规则2:圆盘上不能放置比自己大的圆盘。

问题 : n层汉诺塔,至少要移动多少次呢?

2的n次幂减1

我们先笼统的看一下,需要进行的步骤。因为,规则2的限制,需要将最大圆盘以上的圆盘,移动到临时柱子上。我们先将n-1层汉诺塔的移动次数,用H(n-1)函数表示。最大圆盘,只要移动一次,就能放到目标柱子上。然后,我们需要将剩余的圆盘,从临时柱子上,移动到目标柱子。同样,用H(n-1)函数表示。所以,总的移动次数H(n)=H(n-1)+1+H(n-1)。我们将这种 H(n) 和 H(n-1) 的关系式称为递推公式(recursion relation , recurrence)。

我们先依次计算一下:

0个圆盘,H(0)=0,没有圆盘,不需要移动。

1个圆盘,H(1)=H(0)+1+H(0)=0+1+0=1,只需要移动最大圆盘。

2个圆盘,H(2)=H(1)+1+H(1)=1+1+1=3,需要将上面的圆盘先移动到临时柱子,再移动到目标柱子。

3个圆盘,H(3)=H(2)+1+H(2)=3+1+3=7

6个圆盘,H(6)=H(6)+1+H(6)=31+1+31=63

在来回移动圆盘的过程中,你一定会觉得“在重复做相似的事情”。之所以会产生这种感觉是因为我们有“发现规律的能力”。这种感觉很重要。

我们看一下,依次计算结果:0,1,3,7,15,31,63…

我相信直觉敏锐且聪明的你,已经找到规律:

0  =  1 - 1

1  =  2 - 1

3  =  4 - 1

63  =  64 - 1

获得表达式H(n)=2的n次幂-1,这种只使用 n 表示 H(n) 的式子叫作解析式。

总结

将 n 层汉诺塔转换为 n-1 层汉诺塔的问题,即在问题中找出递归结构。虽然不知道 H(n-1) 的结果,但将它当作“已知条件”来运用。接下来就根据递推结构建立递推公式,求出答案。这就是递归的思维方式。

三、阶乘

我们先看一下,上一期遗留的问题。

n! = n × (n-1) × (n-2) × … × 2 × 1

按照↑的定义,似乎“0的阶乘”意义不明确。

递归定义阶乘

阶乘的递推结构:

n! = n × (n-1)!

阶乘的递推公式:

3! = 3 × 2!

2! = 2 × 1!

1! = 1 × 0!

0! = 1

为了顺利进行上诉递归定义,所以 0! = 1。大家是否发现阶乘的递归定义和数学归纳法比较类似呢?n=0时相当于数学归纳法的步骤1(基底), n >1时相当于步骤2(归纳)。若用多米诺骨牌来打比方,“正确地定义0!”就相当于“确保推倒第1张多米诺骨牌”。

递归(recursion)和归纳(induction)在本质上是相同的,都是“将复杂问题简化”。

四、斐波那契数列(Fibonacci sequence)

数列0,1,1,2,3,5,8,13,21,34,55,89,… 是在13世纪由数学家斐波那契(Leonardo Fibonacci 1170-1250)发现的,因此被命名为斐波那契数列。

斐波那契数列,只要是程序员,都会了解并掌握。原题是不断繁殖的动物,动物出生后,第二天开始每天1只的速度繁殖下一代,不考虑死亡。动物数量呈爆发式增长。

递归思路和汉诺塔相近且网上有很多。

F(n) = F(n-1) + F(n-2)

F(0) = 0

F(1) = 1

F(2) = F(n-1) + F(n-2) = 1 + 0 = 1

F(3) = F(n-1) + F(n-2) = 1 + 1 = 2

感兴趣的同学:

可以继续计算一下,还可以百度摆砖头、创作旋律等递归。

五、分形图(fractale)

含有递归结构的递归图形叫做分形图。插入图片来自于网络。

杨辉三角(帕斯卡三角形)

百度百科解释:杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形(Pascal’s triangle)。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

6d60369e6db14103b72f18d5bb2c3a70.jpeg

谢尔平斯基三角形

谢尔平斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出。

b28798958cd7d0228705464046398a53.gif

递归图形

baa7c6ffc9824fe5b23bafd7e327d8bb.webp

感兴趣的同学:

还有很多很多递归图形,可以自行查找。

指数爆炸

——如何解决复杂问题

一、指数爆炸

概念

“指数爆炸”,所谓爆炸,其实不是真的爆炸。指数爆炸(blow up),是一个数学术语,即指数函数的 “爆炸性” 增长。如果遇到的问题中包含指数爆炸就要多加注意了。因为一旦处理不好,该问题可能会膨胀到难以收拾的地步。相反,若能巧妙利用 “指数爆炸”,它将成为解决难题的有力武器。

我们先来体验一下指数爆炸的威力。

cab1a99d235d465c967faa5053ad91eb.webp​​​​​​​

问题:假设现在有一张厚度为 1 mm 的纸,纸质非常柔软,可以对折无数次。毎对折1次,厚度便翻一番。已知地球距月球约 390000 km,请问对折多少次后厚度能超过地月距离呢?

◆提示
这个问题看上去有点异想天开。即从 1 mm 开始,反复进行厚度翻倍的 “倍数游戏”,要重复多少次才能超过 390000 km。

我们先凭感觉估计一下,需要对折多少次才能达到月球。一万次差不多吧?哈哈 学过的小伙伴们,应该已经知道答案了。经过计算发现,仅仅对折 39 次,就让 1 mm 的纸的厚度达到了地球到月球的距离,实在是让人大吃一惊!

仅仅反复 “折纸”,数值不断翻倍,就很快得出了非常庞大的数值。我们把这种数值息这增长的情况称为指数爆炸。之所以称为指数爆炸是因为折纸时厚度(2的n次幂)的指数 n 就是对折次数。根据上下文,也可以称为指数式增长。

虽然把 1 mm 的纸,仅仅对折 39 次,就能从地球到达月球。但是,我们对折 8 次,已经是极限。所以,对折 39 次,只是理论上来说是可以达到的,而现实是做不到的。如同,给我一个支点就能撑起整个地球。

二、倍数游戏

指数爆炸引发的难题

我们开发程序往往都需要测试,如果测试不完备,就会遗留Bug,程序就有可能崩溃(crash)或挂起(freeze)。

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值