目录
一、希尔顿序列 (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 猜想。令人惊讶的是,即使是最好的数学家都无法回答,如此简单的形成序列的公式也会引发一个问题。
参考文献:
希尔顿序列(Hailstone Sequence)是基于一个未解决的数学问题,也称为冰雹猜想。序列通过将正整数n按偶数时除以2,奇数时乘3加1的操作,最终总会达到1。虽然对于任意n,hailstone(n)的有穷性尚未得到证明,但每个序列最后的三个数总是4, 2, 1。该问题由Lothar Collatz在1937年提出,至今仍是未解之谜。"
133918015,7337247,深度解析:卷积神经网络CNN详解与实践,"['人工智能', '深度学习', '神经网络', '图像识别', '模型压缩']
777

被折叠的 条评论
为什么被折叠?



