📜  鲍姆甜蜜序列(1)

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

鲍姆甜蜜序列

Baum-Sweet sequence

鲍姆甜蜜序列 (Baum-Sweet sequence) 是一种二进制序列,对于每个非负整数 $n$,其第 $n$ 项的值如下定义:

  • 如果 $n$ 的二进制表示中不包含连续的 $0$,则此项为 $1$;
  • 否则,将 $n$ 转化成二进制后最长的连续 $0$ 的长度为 $k$,如果这个 $k$ 是偶数,则此项为 $1$,否则为 $0$。

例如,当 $n=7$ 时,它的二进制表示为 $111$,其中不包含连续的 $0$,因此第 $7$ 项的值为 $1$;当 $n=20$ 时,它的二进制表示为 $10100$,其中最长的连续 $0$ 的长度为 $2$,因此第 $20$ 项的值为 $0$。

应用

鲍姆甜蜜序列的应用之一是用于代表无理数的部分展开式。具体地,对于一个无理数 $x \in [0, 1]$,我们可以考虑其二进制展开式的连续子段。将这些子段按照字典序排序,并将它们对应的鲍姆甜蜜序列连接起来,得到一个新的二进制序列。这个序列称作 $x$ 的连分数分母的鲍姆甜蜜序列。

例如,对于 $\frac{13}{23}$,其二进制展开式为 $0.10011110010110011\cdots$,其中的连续子段按照字典序排序后得到 $000, 001, 01, 100, 101$,对应的鲍姆甜蜜序列为 $11010$。注意到,这个序列的长度为 $5$,与 $\frac{13}{23}$ 的分母 $23$ 是互质的。这意味着,我们可以用以这个序列为分母,以 $23$ 为分子的最简有理数来逼近 $\frac{13}{23}$,从而得到它的连分数表示。

实现

下面是一个 Python 的实现:

def baum_sweet_sequence(n: int) -> int:
    if n == 0:
        return 1
    k = len(bin(n)[2:].rstrip("0"))
    return 1 if k % 2 == 0 else 0

该函数接受一个非负整数 $n$ 作为输入,返回其对应的鲍姆甜蜜序列中的值。其中,bin(n) 返回 $n$ 的二进制表示,rstrip("0") 去除末尾的 $0$,len 返回字符串的长度。