Day4 Hailstone

  • 希尔顿序列(Hailstone Sequence)
  • Collatz 猜想
  • 强悍的27



算法目录

希尔顿序列(Hailstone Sequence)

希尔顿序列(Hailstone Sequence)问题(即考拉兹猜想,又称奇偶归一猜想,冰雹猜想)作为一个著名的数学问题,其正确与否至今都未能得到证明。即:对任一正整数 n,若为偶数则除以 2,若为奇数则乘 3 再加 1,最后 n 总会变为 1。其表达式如下所示:

Python填空题冰雹猜想 python源代码冰雹猜想_python


举个例子

Python填空题冰雹猜想 python源代码冰雹猜想_Python填空题冰雹猜想_02

问题的特殊之处在于:尽管很容易将这个问题讲清楚,但直到今天仍然不能保证这个问题的算法对所有可能的输入都有效——即至今没有人证明对所有的正整数该过程都终止。

import numpy as np
import matplotlib.pyplot as plt

def hailstone(n):
    length = 1
    while(1<n):
        if n%2 == 0:
            n = n/2
        else:
            n = n*3 + 1
        length += 1
        
    return length

x = [n for n in range(10000)]
y = [hailstone(h) for h in x]

plt.scatter(x,y)
plt.xticks(np.arange(min(x),max(x)+1,1000))
plt.xlabel('n')
plt.ylabel('hailstone(n)')
plt.show()

我们可以看出来,因为最后的图形貌似冰雹,所以被称为Hailstone Sequence
但是我们一直有一个问题,是否存在一些数,可以使得while循环一直执行下去,也就是说这个函数到底满不满足有穷性?意思是对于任意的n,while循环都会执行有限次而退出吗?
可惜至今学术界都无法证明对于任意的n,一定满足:hailstone(n)<

算法的主要特点有时并不容易证明。例如,人们通常认为算法的有穷性是最容易判断的,其实不然。由于 无法证明上述程序的 “有穷性”,故 不能称该程序是一个算法。可见证明算法有穷性的困难。

Python填空题冰雹猜想 python源代码冰雹猜想_python_03

Collatz 猜想

有一个很有意思的问题,我们这样实验:

def hailstone(n):
    length = 1
    seq = []
    while(1 < n):
        if n % 2 == 0:
            n = n//2
            seq.append(n)
        else:
            n = n * 3 + 1
            seq.append(n)
        length += 1
    return length,seq
print(hailstone(7))
print(hailstone(17))
print(hailstone(103))

打印结果如下,数字7,17,103的 Hailstone 序列长度分别为 17, 13, 88,最惊奇的是:每个这

种序列的最后三个数一定是4,2,1

Python填空题冰雹猜想 python源代码冰雹猜想_while循环_04


感兴趣的可一直向右滑动,查看序列的结尾是不是4,2,1这个周期!

并且已经得出:无论使用什么起始值,每个hailstone 序列最终都将停留在4、2、1个周期上。

计算机甚至已经检查了所有起始值(最大到5 × 260)(一个 19 位数字),并发现最终出现4、2、1个周期。

但是很遗憾:依然没有科学家能够证明所有序列都是这种情况。

这个开放问题在数学家 Lothar Collatz 于 1937 年首次提出该问题之后被称为 Collatz猜想。

令人惊讶的是,即使是最好的数学家都无法回答,如此简单的形成序列的公式也会引发一个问题。

强悍的27

冰雹的最大魅力在于不可预知性。英国剑桥大学教授John Conway找到了一个自然数27。虽然27是一个貌不惊人的自然数,但是如果按照上述方法进行运算,则它的上浮下沉异常剧烈:首先,27要经过77步骤的变换到达顶峰值9232,然后又经过34步骤到达谷底值1。全部的变换过程(称作“雹程”)需要111步,其顶峰值9232,达到了原有数字27的342倍多,如果以瀑布般的直线下落(2的N次方)来比较,则具有同样雹程的数字N要达到2的111次方。其对比何其惊人!
但是在1到100的范围内,像27这样的剧烈波动是没有的(54等27的2的次方倍数的数除外)

27的归一步数要经过多次剧烈波动的奇偶变换,其路径呈不光滑锯齿

Python填空题冰雹猜想 python源代码冰雹猜想_数据结构_05


每日一句

Winners do what losers don’t want to do.(胜利者做失败者不愿意做的事!)