《程序员的数学:3余数parity 》

本文属于《程序员的数学》读书笔记系列。本章通过几个例子学习“余数就是分组”。

一 星期数的思考题

 今天是星期日,100天后今天是星期几?

一周有七天,每过7天,便循环到相同的星期数。如果今天星期日,则7天后,14天...这种7天倍数天后,都是星期日。98是7的倍数。则推算:

98天后 --- 星期天
99天后 --- 星期一
100天后 -- 星期二

运用余数思考

上面的题下面这种方法计算的。

  

         100 / 7 = 14 余2

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

除了100天,作者还介绍了1亿天也可以用类似的方式实现。如何求解10^{100} 天后是星期几?

就是1后面有100个0.数字很大,用计算机也很难算。

如何找出规律性呢?

我们并不急于求出10^100,而是想1,10,100,1000,10000,。。。。这样依次增加0的个数,观察规律。

 果然有规律

  1. 余数以1,3,2,6,4,5的顺序循环,星期数以一,三,二,六,四,五...的顺序循环;
  2. 通过观察发现,每增加6个0,星期数就相同,因此周期为6,将0的个数除以6,得到的余数为0,1,2,3,4,5的其中之一,它们分别对应星期一,星期三,星期二,星期六,星期四,星期五;

因此,10^100天以后的星期数,可以将天数中0的个数除以6,通过余数来判断,所以 100 /6 = 16 ...4

答案是星期四。

最开始的发现规律,借助数字,下面的是借助0的个数。

二 乘方的思考题

   1234567^{987654321} 的个位数是什么呢?

原始数据很大,没发直观找规律,3次方就1881672302290562263。所以再来看题,是要求个位,而不是全部数字,能影响乘方结果个位数字的,只有个位数字了,所以我们就简化为只看个位数字7.

7^{0}=1, 7^{1}=7, 7^{2}=49, 7^{3}=343, 7^{4}=2401, 7^{5}=16807, 7^{6}=117649, 7^{7}=823543,

只看个位数,就能发现规律,个位数是1,7,9,3 这4个数字循环。周期为4.

所以只需要吧指数987654321对4求余,结果为1,所以对应的个位数为7.

如果你觉得看会了,下面有到类似的ACM的题。

INput:Multiple test cases. Each test case is an integer n(0≤n101000) in a single line.

Output:For each test case, output the answer of f(n)mod2.

这是一道斐波那契数列求奇偶的问题。后面可以动手做一下。

三 通过黑白棋通信

  魔术师和他的徒弟在台上表演,下面有3个观众。魔术师蒙着眼睛
1)桌子随机排列着7个黑白棋,魔术师蒙着眼睛,看不到棋子。

2)魔术师的徒弟在看完这7枚棋子之后,又往右面添了一枚棋子,与其他棋子并排,这时有8枚棋子。

3)这时观众可将其中一枚棋子翻转,或不翻转任何棋子;此间,徒弟和观众不发一言,魔术师还是蒙着眼睛,并不知道观众没有翻转棋子。

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

那魔术师是如何识破观众的行为呢?
提示:
徒弟只是放了一枚棋子,而且放棋子的动作在观众行动之“前”,那么,徒弟是如何向魔术师传递有没有翻转棋子的信息的呢?

答案:
徒弟在观众摆放的7枚棋子中,数出黑棋子个数,若为奇数,就添加黑旗。若为偶数,则添加白棋。不管哪种情况,在最终的8个棋子中,黑棋必为偶数个。
观众可以有1--3三种情况:

  1. 观众翻转白棋,那么黑棋就增加了一枚,即黑棋变为奇数个。
  2. 观众翻转黑棋,那么白棋就增加了一枚,即黑棋也变为奇数个。
  3. 观众不翻转棋子,黑棋仍然是偶数个。

魔术师摘下眼罩,马上数出黑棋的个数。如果黑棋为奇数个,就说“观众翻转了棋子”。如果是偶数个,就说“没有翻转棋子”。
这里,徒弟摆放棋子使黑棋个数为“偶数”;若使黑棋个数为奇数也可以,只要魔术师和徒弟商量好就行。

奇偶校验

我们将魔术师和徒弟表演的戏法想作白棋为2进制的0,黑棋为2进制的1,那么它就和计算机通信中奇偶校验的方法一样的。

  • 徒弟是为发送方,魔术师是接收方。中途翻转黑白棋的观众为“干扰通信的噪音”。
  • 徒弟作为发送方,放置的一个棋子,在通信领域中被称为奇偶校验位,魔术师作为接收方,通过检查摆放的棋子的奇偶性来判断是否因噪音发生了通信错误。
  • 至于奇偶校验位是设为偶数还是奇数,那么在发送方和接收方之间的通信规定中所约定。
    奇偶校验位将数字分为两个集合。

实际上计算机本身也广泛采用了奇偶校验,为了能检测和纠正内存软错误,首先出现的是内存“奇偶校验”。内存中最小的单位是比特,也称为“位”,位只有两种状态分别以1和0来标示,每8个连续的比特叫做一个字节(byte)。不带奇偶校验的内存每个字节只有8位,如果其某一位存储了错误的值,就会导致其存储的相应数据发生变化,进而导致应用程序发生错误。而奇偶校验就是在每一字节(8位)之外又增加了一位作为错误检测位。在某字节中存储数据之后,在其8个位上存储的数据是固定的,因为位只能有两种状态1或0,假设存储的数据用位标示为1、1、1、0、0、1、0、1,那么把每个位相加(1+1+1+0+0+1+0+1=5),结果是奇数。对于偶校验,校验位就定义为1;对于奇校验,则相反。当CPU读取存储的数据时,它会再次把前8位中存储的数据相加,计算结果是否与校验位相一致。

 在现实数据传输中,偶尔1位出错的机会最多,2位及以上发生错误的概率比较低,且由于奇偶校验实现简单,具有相对理想的检错能力,因此得到广泛使用。但奇偶校验法有如下2个明显的缺陷:

  • 奇数位误码能检出,偶数位误码不能检出
  • 不能纠错,在发现错误后,只能要求重发。

该校验法主要是针对byte传输校验而言,常见对于网络传输都是基于TCP/IP协议,都是数据包packet级别,熟悉网络协议的都知道,最简单的有checksum方法。这里顺带说这些是说数学本身应用范围很广泛。

四 寻找恋人问题

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

     你的恋人住在这8个村子中的某一个里。 她每过1个月便顺着道路去另一个村子,每个月都一定会换村子,然而选择哪个村子是随机的,预测不了。例如,如果恋人这个月住在G村,那么下个月就住在“C,F,H”中的某个村子。
      目前你手上掌握的信息只有,1年前(12个月前),恋人住在G村。请求出这个月恋人住在A村的概率。

  

看到这个题目,我真的找个纸,从G开始,画出了可能出现的位置。

恋人12个月前住在G村。那就意味着,在这12个月中,恋人从G开始随机地移动了12次。这次的问题就是要求出移动12次后恋人在A处的概率。

12个月前(第0次移动),恋人在G;
11个月前(第1次移动),恋人在C,F,H其中之一
10个月前 (第2次移动),恋人在B,D,E,G其中之一
9个月前(第3次移动),恋人在A,C,F,H其中之一
8个月前(第4次移动),恋人在B,D,E,G其中之一

。。。

从这之后,奇数次移动时,恋人在A,C,F,H其中之一;偶数次移动时,在B,D,E,G其中之一。因此我们得出,现在(第12次移动)恋人在B,D,E,G其中之一,并不在A村。即概率为0。

如果你关注路线,可能性很多。影响你找到问题的关键,而我们关注目的地。这样问题就迎刃而解了。

以G为起点,我们将恋人移动奇数次到达的目的地称为“奇数村”,移动偶数次到达的目的地称作“偶数村”

奇数村:A,C,F,H
偶数村:B,D,E,G

本题的解答要点是:不是分别考虑这8个村的情况,而是将8个村分为奇数村和偶数村2组来解答。因为就算不知道第12次移动具体到达了8个村里的哪个村,但能知道是在奇数村还是偶数村。

A-H这8个村没有一个是既属于奇数村又属于偶数村的。并且,所有这8个村必定属于奇数村或偶数村的其中之一。即,奇数村和偶数村的分类是“兼具排他性和完整性的分类”。并且,从奇数村移动1次就到了偶数村,从偶数村移动一次就到了奇数村。通过该规律,就能够解答这个问题。本题也是奇偶校验的一个例子。

  我不知道奥数题是不是就是这个套路的。还是数学本身就有套路可用,怎么发现规律更重要。

五 铺设草席问题

假设在这样的房间,使用图中右下角所示的长方形草席能够正好铺满房间吗?前提是不能使用半张草席。

我看了下,是个8*8的图形,砍去两个小方块。算了下8*8=64,-2 = 62. 是个偶数 ,能整除2,应该可以。

再一看答案,打脸了,是不能的。

以半张草席为单位,涂上颜色。

黑色半张=30.

白色半张=32.

按照草席应该是黑白相等,不相等说明不能正好铺满房间。

需要寻找“合适的分类方法”,寻找恋人问题是村子分奇偶村,铺设草席是方格涂颜色。

六 一笔画问题(哥尼斯堡七桥问题)

  一个小城,被河流分为了4块陆地,分别修建了7做小桥。

找出走遍7桥的方法,如果能走遍请说明一下方法,如果不能走遍,请证明一下,必须遵守的条件如下:

① 走过的桥不能再走;

② 可以多次经过同一块陆地;

③ 可以以任意陆地为起点;

④ 不需要回到终点。

做题之前,可以试着去尝试下,发现怎么也走不完。

用图来简化题目

  

用白色的圆圈表示陆地A,B C,D. 我们称其为“顶点”。用顶点之间的联线表示桥a,b,c,d,e,f,g.我们称之为“边”。

1738年,瑞典数学家欧拉( Leornhard Euler)解决了柯尼斯堡问题。由此图论诞生。欧拉也成为图论的创始人。

顶点所关联的边数,称作该顶点的度数,度数为偶数的顶点称为“偶点”,度数为奇数的顶点称为“奇点”。

① 出发时,顶点的度数减1;

② 每经过一个顶点,顶点的度数都减2,因此不管经过顶点几次,经过的顶点的奇偶性不变;

③ 到达终点时,该顶点度数减1。

可能出现的两种情况
情况一:起点和终点相同
① 根据“边走边减”的结果是所有顶点的度数变为0(偶数),如果还存在没有变为0的顶点,说明还有没经过的边(桥);

② 由于经过的顶点奇偶性不变,度数为0(偶数)的经过点,在原图本来就是偶点;

③ 起点度数减1,终点度数减1,变为0,由于起点和终点相同,该顶点度数减2,该顶点在原图中也是偶点。

结论:起点和终点相同的情况下,原图中的顶点都是偶点。

情况二:起点和终点不相同
和情况一相同的思路,经过的顶点都是偶点,只有起点和终点是奇点。

以下命题成立

(如果)“可以一笔画成”,(那么)“图中的所有顶点都是偶点,或者有两个奇点”。

由此可证明:在给定的情况下,不能走遍哥尼斯堡七桥。(图中的顶点都是奇点)

欧拉论断的重点在于:不用反复验证也能证明一笔画不能画成。不用频繁走各种路径,只需要观察顶点度数就行。

另外,它蕴含很重要的思维方法,我们在观察个顶点度数的时候,不是“度数本身”,而是“度数奇偶性”,并不是1条,3条,5条这样的分散的思考,而是概括为“奇偶数”来整体考虑,奇偶性是解题关键。也是奇偶校验的例子。

 

小结:

    码字不易,贴一下书上的小结。

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值