📜  G 事实 21 | Collatz 序列(1)

📅  最后修改于: 2023-12-03 15:15:12.937000             🧑  作者: Mango

Collatz 序列
什么是 Collatz 序列?

Collatz 序列又称为奇偶归一序列,是指对于任意正整数 n,如果 n 是偶数,则将它除以 2,否则将它乘以 3 再加 1。按照这样的操作进行下去,最终必定得到 1。

举个例子:

输入 n = 7

得到的 Collatz 序列为 7 -> 22 -> 11 -> 34 -> 17 -> 52 -> 26 -> 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 -> 1。

可以看到,不计算初始的 7,这个序列一共有 16 个数字。

实现一个 Collatz 序列计算程序

下面是一个 Python 语言实现的 Collatz 序列计算程序:

def collatz(n):
    sequence = [n]
    while n != 1:
        n = n // 2 if n % 2 == 0 else 3 * n + 1
        sequence.append(n)
    return sequence

这个函数接收一个正整数 n 作为输入,并返回一个列表,表示从 n 开始得到的 Collatz 序列。

分析程序复杂度

该程序时间复杂度为 O(logn),空间复杂度为 O(logn)。

具体分析如下:

当 n 为 1 时,程序终止,循环执行了 k 次。因此程序的时间复杂度与 Collatz 序列的长度正相关,即 O(logn)。

同时,Collatz 序列的长度不会超过 logn,因此程序的空间复杂度也是 O(logn)。

实际应用

Collatz 序列是一个简单而著名的问题,在编程竞赛和数学研究中广泛使用。在实际应用中,Collatz 序列可以用于生成随机数,并且难以破解。同时,Collatz 序列也有很多有趣的性质等待探索。