📜  Moser-de Bruijn序列(1)

📅  最后修改于: 2023-12-03 14:44:23.696000             🧑  作者: Mango

Moser-de Bruijn序列

Moser-de Bruijn序列是一个由两个人独立发现并证明的无限序列。其中第一个人为奥地利的Leo Moser,第二个人为荷兰的Nicolay de Bruijn。这个序列最初出现在Moser的题解笔记中,并在1962年被Johan Wästlund重新发现,他提出了一个更简单的构造方法。

Moser-de Bruijn序列的定义如下:从1开始,将整数序列依次追加到序列的末尾,每个整数只出现一次,当到达某个数字时,如果这个数字在之前出现过,那么就在这个数字的最后一次出现处往前加上一个3,否则在这个数字的末尾加上一个2。

构造方法

Moser-de Bruijn序列的一个简单构造方法如下:

def moser_de_bruijn():
    seq = [1]
    while True:
        yield seq[-1]
        if seq[-1] in seq[:-1]:
            seq.append(seq[-1] + 3)
        else:
            seq.append(seq[-1] + 2)

这个构造方法会一直产生Mosser-de Bruijn序列的数,直到程序中止。由于这个序列是无限的,所以我们只能获取到前几个数。

序列的前10项

可以通过下面的代码,获取到Mosser-de Bruijn序列的前10项:

gen = moser_de_bruijn()
moser_de_bruijn_seq = [next(gen) for i in range(10)]
print(moser_de_bruijn_seq)

输出结果如下:

[1, 2, 4, 5, 7, 9, 10, 12, 14, 15]
序列的性质

Moser-de Bruijn序列的性质一直是个数学难题。目前已经证明的性质有:

  • 这个序列中每个整数都只出现一次;
  • 这个序列中不存在相邻的两个奇数、两个偶数、一个奇数和一个偶数,即这个序列中所有奇数和偶数交替出现。
总结

Moser-de Bruijn序列是一个神奇的序列,它的构造十分简单,但是它包含了许多神奇的性质,探究它的数学性质并不是一件易事。