首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

关于完美洗牌算法中圈和圈起点的一个证明

  • 25-03-02 17:21
  • 4570
  • 9453
blog.csdn.net

我们用mod表示对一个数取余数,例如3 mod 5 = 3,  5 mod 3 = 2……   a mod b = a - [a / b] * b。

在完美洗牌算法中,我们用到了一个映射关系  i' = (i * 2) mod (2n + 1)  其中i = 1,2,3,...2n 然后我们对2m = (3^k - 1) 开始找圈了,这个结论的证明还是需要一些数论的基础。现在简要介绍一下,其中一个定理(*)的证明还是稍显复杂,不过可以可以查到。 

先把我们要证的结论用白话形容一下,

我们证明  M = 2m = 3^k - 1的情况下, i' = (i * 2) mod (M + 1) = (i * 2) mod (3^k) ,按照这个置换恰好形成k个圈,每个圈的头部(最小的数)是1,3,9,..3^(k - 1)。 (k >= 1)。证明的关键是这所有的圈合并必须包含全部从1到M之间的整数,一个都不能少。

要证这个结论,先要对原根有一个感性的认识。

一个数g,是另外一个数x的原根,是说集合S = {g ^ 0 mod x, g ^ 1 mod x, g ^ 2 mod x…… },得到的集合包含了所有小于x并且与x互质的数。

这里S看起来像一个无限集合,实际上它是有限的。这是因为我们对x取余数,所以最多只有0到(x - 1)这x种结果。

举例,比如2是3的原根

因为2^0 mod 3 = 1, 2 ^ 1 mod 3 = 2, 2 ^ 2 mod 3 = 1, 2 ^ 3 mod 3 = 2....只有{1,2}两种结果,而且和3都互质。

而2不是7的原根,

这是因为2^0 mod 7 = 1, 2 ^ 1 mod 7 = 2, 2 ^ 2 mod 7 = 4, 2 ^ 3 mod 7 = 1 只有{1,2,4} 3种结果而没包含3,5,6。

为了方便还是先定义欧拉函数phi(x), 也有用希腊字母φ(x)表示的,表示不超过x的整数种和x互质的个数,特别地,当p是质数的时候因为所有小于p的数都与p互质,所以phi(p) = p - 1。

那么数g,是x的原根,表示为集合S = {g ^ 0 mod x, g ^ 1 mod x, g ^ 2 mod x,……}  恰好包含phi(x)个整数。

首先,要判断原根g是x的原根,一个必要条件是g与x必须互质。否则g ^ 1 mod x 产生的数就不和x互质了。

我们之所以取g ^ 0 = 1 是为了方便。

如果我们在g ^ 0 mod x, g ^ 1 mod x, g ^ 2 mod x……这一串数中发现重复的余数,g ^ i mod x = g ^ j mod x 并且 i < j, 则有g ^ (j - i) mod x = 1  = g ^ 0 mod x (一般同余不能两遍随便做除法,但是互质的时候可以除)。这就说明在比j更早的时候,(j - i)时我们已经发现了重复的余数1了。也就是说当g与x互质的时候,按g ^ 0 mod x, g ^ 1 mod x,……的顺序,如果第一次发现重复,重复的数必定是1,这是我们从g^0开始计算的原因。出现余数循环一定是从开头循环的。这对我们要证明的结论至关重要,只看集合里元素的种类数是不够的。

比如不互质的时候 ,结论不一定正确,g = 9, x = 15, 9 ^ 0 mod 15 = 1, 9 ^ 1 mod 15 = 9, 9 ^ 2 mod 15 = 6, 9 ^ 3 mod 15 = 9, 我们发现9 ^ 3和9 ^ 1出现循环,并没有从开头的1开始循环。 

有一个著名的定理叫做费马小定理,它告诉我们当g与x互质的时候,有g ^ phi(x) mod x = 1。

结合原根的定义还有前面的结论,我们要证集合S恰好包含phi(x)个数,只需要证明{g ^ 0 mod x, g ^ 1 mod x ,……g ^ (phi(x) - 1) mod x} 这些数都不相同就可以了。

我们不加证明的给出如下结论:

p是奇素数,如果g是p的原根且g ^ (p - 1)  mod p ^ 2 != 1,则g是任意p^k的原根。(k >= 1)

p是奇素数,如果g是p ^ 2的原根, 则g是任意p^k的原根。 (k >= 1) 

这两个定理的描述和证明可参看

http://people.math.gatech.edu/~mbaker/pdf/primroots.pdf

http://en.wikipedia.org/wiki/Primitive_root_modulo_n

取g = 2, p = 3。

我们知道2是3的原根,2是9的原根。

我们定义S(k)表示上述的集合S,并且x = 3 ^ k。

所以S(1) = {1, 2}

      S(2) = {1, 2, 4, 8, 7, 5}

我们没改变圈元素的顺序,由前面的结论S(k)恰好是一个圈里的元素,且认为从1开始循环的,也就是说从1开始的圈包含了所有与3 ^ k互质的数。 

那与3 ^ k不互质的数怎么办?如果0 < i < 3 ^ k与 3 ^ k不互质,那么它与3 ^ k的最大公约数一定是3 ^ t的形式(只包含约数3),并且 t < k。即gcd(i , 3 ^ k) = 3 ^ t

我们把3 ^ t除下去,有gcd(i / (3 ^ t), 3 ^ (k - t))  = 1, i / (3 ^ t) 都与3 ^ (k - t) 互质了,并且i / (3 ^ t) < 3 ^(k - t), 根据定义,可见i / (3 ^ t) 在集合S(k - t)。 同理,任意S(k - t)中的数x,都满足gcd(x , 3 ^ k)  = 1,于是gcd(3 ^ k , x * 3 ^ t) = 3 ^ t, 并且x * 3 ^ t < 3 ^ k。可见S(k - t)中的数x * 3 ^ t 与 i形成了一一对应的关系。请仔细体会这种一一对应的关系。

      也就是说S(k - t)里每个数x * 3 ^ t形成的新集合包含了所有与3 ^ k的最大公约数为3 ^ t的数,它也是一个圈,原先圈的头部是1,这个圈的头部是3 ^ t。

于是,对所有的小于 3 ^ k的数,根据它和3 ^ k的最大公约数,我们都把它分配到了一个圈里去了。k个圈包含了所有的小于3^k的数。

举例:

比如k = 3。 我们有:

        S(3) = {1, 2 ,4 , 8, 16, 5, 10, 20, 13, 26, 25, 23, 19, 11, 22, 17, 7, 14} 包含了小于27且与27互质的所有数,圈的首部为1,这是原根定义决定的。

        那么与27最大公约数为3的数,我们用S(2)中的数乘以3得到。 S(2) * 3 = {3, 6, 12, 24, 21, 15}, 圈中元素的顺序没变化,圈的首部是3 

               与27最大公约数为9的数,我们用S(1)种的数乘以9得到。 S(1) * 9 = {9, 18}, 圈中得元素的顺序没变化,圈的首部是9。

因为每个小于27的数和27的最大公约数只有1, 3, 9这3种情况,又由于前面所证的一一对应的关系,所以S(2) * 3包含了所有小于27且与27的最大公约数为3的数,S(1) * 9 包含了所有小于27且和27的最大公约数为9的数。



              






文章知识点与官方知识档案匹配,可进一步学习相关知识
算法技能树首页概览49583 人正在系统学习中
注:本文转载自blog.csdn.net的cpcs的文章"http://blog.csdn.net/caopengcs/article/details/10429013"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top