一、奇偶归一猜想

横跨半个世纪悬而未决的考兰兹猜想的别名有很多,我比较喜欢奇偶归一猜想这个名字,大家若是感兴趣,可以去搜一搜。已经有很多对数学感兴趣的爱好者和数学家正在研究、探讨它,也产生了很多优秀成果。作为一名课辅老师,我不敢说能对它了解有多透彻,只是从一个新的角度谈谈自己的看法。那么,奇偶归一猜想说的是什么呢?我们先来看一个函数:

Mod对于我们学计算机的人来说并不陌生,是求模运算,这里把它看作求余函数。一个正整数对2求余,结果为0说明它是偶数,否则说明它是奇数。

接下来对奇偶归一猜想的理解就简单了:对于每个正整数,如果它是奇数,则对它乘以3再加1;如果它是偶数,则对它除以2。然后得到一个新的正整数,对它重复前述步骤若干次后,得到的正整数一定是4,2,1,4,2,1……

下面,我用一段python程序给大家演示一下。

当x=8时,结果[x]:

当x=11时,结果[x]:

当x=27时,结果[x]:

当x=39时,结果[x]:

当x=256时,结果[x]:

因为按奇偶归一猜想,这个过程会无限重复下去,会让我的笔记本电脑中的资源慢慢损耗殆尽,直到崩溃,所以在我的代码里对重复次数作了限定,最多运行到出现3个 “4,2,1”为止。并且对输出结果作格式化处理。大家可以多观察一下以上各种结果,并试着谈谈自己的收获。

二、奇偶归一猜想小探

很多人一直在从数学角度去证明是不是对于任意一个正整数都是如此,并借助计算机强大的计算能力做出部分验证,然而始终没有人能给出一个可以完全说服大家的结论。

若用[x]表示正整数x在不断迭代中产生的数字序列,s[x]表示数列中的最小值,我们一起来看一下已有的研究成果。

1976年,Terras证明,几乎对所有的正整数x(在自然密度意义下),有s[x]

1979年,Allouche证明,对任意a>0.869,几乎对所有的正整数x(在自然密度意义下),有s[x]

1994年,Korec证明,对任意a>ln3/ln4≈0.7924,几乎对所有的正整数x(在自然密度意义下),有s[x]

前不久,菲尔兹奖获得者陶哲轩试图证明,只要是一个趋于正无穷的实数列{f(x)},那么几乎对所有的正整数x(在对数密度意义下),有s[x]

从以上可以看出,此类研究大都着眼于数学上的性质与证明,但是,还有一个比较清晰的视角,那就是[x]的生成过程。

从计算科学角度看,奇偶归一猜想就是一个没有终止条件的递归迭代(分段函数遇到递归调用特别容易出现这种情形),结果自然是无限重复。为什么会这样?从f(x)来看,仅因为它是一个分段函数且自己调用自己吗?那我们再看一个分段函数:

如果迭代过程相同,那么g(12)会和f(12)一样吗?显然不完全是,

再看一个:

还是在相同迭代过程下,h(12)=1。

因此,导致奇偶归一猜想的结论是4、2、1不断重复的根本原因是函数定义本身与递归,而不是数或函数的性质。

三、计算机科学下的奇偶归一猜想

我用下面的状态图表示奇偶归一猜想的运行时(即[x]的产生过程)。

其中,圆圈“○”是运行时状态,圆内代表的是操作,圆外字母是状态名。方向箭头为运行方向,共有4个无条件方向,2个条件方向。

通过观察状态图,很容易发现一个设计上的缺陷:没有终止态。

也就是说,函数定义本身没问题,递归迭代没问题,但是在递归迭代的前提下遇到这样定义的函数,就出现缺陷,或漏洞。

我们来进一步分析问题出现在哪里。

假设在运行方向下从状态A运行到状态C再到状态A的一次执行过程叫作路径“ABCA”(路径ABDA的意义类似),我们分别统计一下在[x]的产生过程中路径ABCA和路径ABDA的执行次数。

这段程序和之前那段程序的核心过程基本一样,只是将输出改成路径统计,仍是运行到第3次产生“1”后结束。如当x=8时,产生的[x]:8、4、2、1、4、2、1、4、2、1,其中ABCA执行2次,ABDA执行7次。然后将正整数X的输入改为随机产生。

这段程序的作用是:随机产生10个1到100的正整数x,统计在产生[x]的过程中两条路径ABCA与ABDA各自执行次数。下面是运行一次后的统计结果:

Rate这一列是路径ABDA执行次数与路径ABCA执行次数之比,它反映的是路径执行的次数的多少。为便于观察,我准备将以上结果制成一幅图。

路径跟踪程序:

路径跟踪数据表:

表中序号1,2,……,41表示在生成一个正数X的[x]时,一个迭代发生的次序,即第1次迭代,第2次迭代等。0表示当前执行的路径是ABDA,1表示当前执行的路径是ABCA。

根据路径跟踪数据表制作的路径跟踪图:

“1”这行的点数比“0”这行的点数要少。这意味着在刚才10个随机数各自的[x]生成过程中,ABCA的执行总数远小于ABDA的执行总数。在单独的某一个数的[x]生成过程中亦是如此。实际上把数的个数增加至任意个,远不止10个,结果一样。这和在之前运行结果统计表中Rate这列反映的意义相同。

实际上跟不跟踪整个执行过程,看不看具体数据,都可以得到这个结论,看f(x)这个函数的定义就知道:但凡x是偶数就一直除以2直到变为奇数;而成为奇数后立马通过3x+1变成偶数。这个过程一直继续并重复。

因为ABCA的执行次数较小,主要是起到一个将奇数调节为偶数的作用,所以函数

就近似于函数

其近似意义是一个大于1的偶数不断地除以2,最终结果一定是x=1。但是在原f(x)中还有一个3x+1的调节,使x变成一个大于1的偶数,这样一个无限循环就产生。

因为任何一个正整数无论它多大,总是非奇即偶,因而在递归迭代与f(x)的作用下,一定会进入4,2,1……的无限循环。这也间接地说明,当“静态”的数学遇到“运动”的计算机科学,就会产生一些有趣的现象。

我觉得这个猜想没什么多大意义,可以作为一项数学兴趣探究,倒是一个函数在递归迭代的过程中会自我调整,这种特性非常有趣。

c语言递归函数奇偶归一猜想,计算机科学视角下的奇偶归一猜想相关推荐

  1. C语言递归函数实现十位数转换进制并打印出来(超详细)

    C语言递归函数实现十位数转换进制并打印出来 思路 事例 代码 思路   取余倒排序   将数字每次除以进制数的余数打印,但这样不是倒排序,通过将打印操作写在调用递归函数下面,可以在每次调用递归函数时将 ...

  2. C语言递归函数——汉诺塔问题笔记

    C语言递归函数--汉诺塔问题笔记 学C的时候老师根本没讲过递归,当时自己也没把它当回事,但是递归在算法中的地位实在太重要了.于是翻了翻C课本上的递归,书上讲的不多,但是一个经典的汉诺塔问题就让我伤透了 ...

  3. C语言递归调用return语句,理解C语言递归函数的逐级返回(return)

    递归函数,也即调用自身的函数. C Primer Plus中有个例子很棒: /*理解C语言递归函数*/ #include void up_and_down(int); int  main(void) ...

  4. C语言 递归函数实现二分查找

    C语言 递归函数实现二分查找 二分查找 #include<stdio.h> int binary(int arr[], int min, int max, int key) //min, ...

  5. c语言递归函数编程,c语言递归函数的使用方法

    c语言递归函数的使用方法 发布时间:2020-06-11 09:39:53 来源:亿速云 阅读:157 作者:Leah 这篇文章给大家分享的是c语言递归函数的使用方法.小编觉得挺实用的,因此分享给大家 ...

  6. 6.0、C语言——递归函数

    6.0.C语言--递归函数 函数递归 什么是递归?         程序调用自身的编程技巧称为递归(recursion),递归作为一种算法在程序设计语言中广泛应用.一个过程或函数在其定义或说明中有直接 ...

  7. 政、企、学三方视角下的智慧城市发展 | 2020中关村论坛“人工智能与城市可持续发展论坛”成功举办...

    人工智能技术在城市中孕育,城市亦为人工智提供了广阔的应用场景.如何更好地将智能与城市结合,是政府.企业与学术三界人士共同关心的重要问题.2020中关村论坛"人工智能与城市可持续发展论坛&qu ...

  8. 能量视角下的GAN模型(二):GAN=“分析”+“采样”

    作者丨苏剑林 单位丨广州火焰信息科技有限公司 研究方向丨NLP,神经网络 个人主页丨kexue.fm 在这个系列中,我们尝试从能量的视角理解 GAN.我们会发现这个视角如此美妙和直观,甚至让人拍案叫绝 ...

  9. 听红宝书译者谈Web视角下的前端开发

    Web视角下的前端开发 ⏳序言 ⏰一.关于前端开发 1. 起源.架构.变迁 (1)起源 (2)架构 (3)变迁 2. 前端应用的领域 (1)所面向群体 (2)所面向领域 3. 语言.框架.工具 4. ...

最新文章

  1. ajax走error的条件,Ajax进入ERROR的部分条件总结
  2. hdu2037 今年暑假不AC
  3. Codeforces 491B. New York Hotel 最远曼哈顿距离
  4. 如何上传本地文件到github又如何删除自己的github仓库
  5. Java tree set_Java TreeSet tailSet()方法
  6. VB.NET 教程_02_常见对象
  7. yate工具的使用求教
  8. 台州学院计算机翁黄格,中国高校计算机大赛-团体程序设计天梯赛全国总决赛获奖.DOC...
  9. php形状特征提取方法,LowB沙箱-PHP动态特征提取
  10. 点线面的意义_点线面在绘画中的意义
  11. erlang与rabbitmq下载(Window)
  12. (十八)Flink Table API SQL 编程指南 Table API 和Datastream API 集成
  13. 爬虫练习(二)—股票信息抓取
  14. error C2143/C2501/C2059/C2238
  15. 计算机和遥感哪个专业好啊,遥感科学与技术专业毕业是干什么的
  16. php找不到localhost下的文件夹,我在localhost里找不到shopImooc下的文件,每次都要手动输入地址,还有就是index.php每次打开都是这样的页面,是数据库没连吗...
  17. 高压功率放大器ATA-4052在径向驻波型超声波电机研究中的应用
  18. python无法启动此程序丢失zlib.dll_关于winserver2012运行c++程序缺少dll的理由
  19. 视频剪辑必备,这6个网站承包你一年的音效素材
  20. C++ 判断是否存在Emjoi表情

热门文章

  1. 心路历程(四)-我的2015
  2. atitit 提升数据库死锁处理总结
  3. GNU cflow实现调用关系分析
  4. B00008 C++实现的大整数计算(一)
  5. 从 XML 到 XPath
  6. 猫眼(门镜)中的光学
  7. SQOOP——MySQL 和 HDFS 的桥梁
  8. C++基础:: struct vs class
  9. python 机器学习——从感知机算法到各种最优化方法的应用(python)
  10. java中的criteria_java-jpa-criteriaBuilder使用入门