【算法笔记】希尔顿序列

希尔顿序列(Hailstone Sequence)是基于一个未解决的数学问题,也称为冰雹猜想。序列通过将正整数n按偶数时除以2,奇数时乘3加1的操作,最终总会达到1。虽然对于任意n,hailstone(n)的有穷性尚未得到证明,但每个序列最后的三个数总是4, 2, 1。该问题由Lothar Collatz在1937年提出,至今仍是未解之谜。" 133918015,7337247,深度解析:卷积神经网络CNN详解与实践,"['人工智能', '深度学习', '神经网络', '图像识别', '模型压缩']

目录

一、希尔顿序列 (Hailstone Sequence)

1.1 原理

1.2 实现 

1.3 其他


一、希尔顿序列 (Hailstone Sequence)

1.1 原理

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

举例说明 (n = 3):


1.2 实现 

import random

def hailstone(n):
    hs_seq = [n]
    length = 1
    while(1 < n):
        if n % 2 == 0:
            n = n//2
        else:
            n = n*3+1
        length += 1
        hs_seq.append(n)
        length += 1
    #return length
    return hs_seq

if __name__ == "__main__":
    n = random.randint(1, 1000)
    print("{} 的 HailStone 序列是:".format(n), hailstone(n))
    # 144 的 HailStone 序列是: [144, 72, 36, 18, 9, 28, 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
    # 24 的 HailStone 序列是: [24, 12, 6, 3, 10, 5, 16, 8, 4, 2, 1]
    # 38 的 HailStone 序列是: [38, 19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]

以上的 hailstone 函数满足有穷性吗?即对于任意的 n, while 循环都会执行有限次而退出吗?事实上,至今无法证明对任意的 n 一定满足:hailstone(n) < ∞

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

此外,由于绘制的图案形似冰雹,所以被称为 Hailstone 序列。


1.3 其他

按如下方式实验:

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。

(17, [22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1])
(13, [52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1])
(88, [310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1])

事实上,无论使用哪个起始值,每个 Hailstone 序列的最后三位总是 4, 2, 1。甚至检查所有起始值 (最大可达 19 位数 5 × 2^60),结果仍满足上述规律。但很遗憾,依然无法证明所有序列都是这种情况。这个开放问题在数学家 Lothar Collatz 于 1937 年首次提出该问题之后被称为 Collatz 猜想。令人惊讶的是,即使是最好的数学家都无法回答,如此简单的形成序列的公式也会引发一个问题。


参考文献:

https://www.jianshu.com/p/a1522252cb30

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值