【问题标题】:how many n-length binary sequence problem多少个n长度的二进制序列问题
【发布时间】:2021-02-10 02:29:01
【问题描述】:

如何在 python/java 或任何其他语言中找到解决此问题的方法:

提前致谢

【问题讨论】:

  • 看起来根本不是编程问题。这似乎是离散数学课的家庭作业问题。
  • @JohnColeman 是的,我需要提示 :)
  • 编写一个 Python 程序来暴力破解小 n 的答案很容易。出于我不能说清楚的原因,我怀疑答案与斐波那契数有关。

标签: math binary sequence


【解决方案1】:

由于程序不是证明,你仍然需要证明它,这里有一些 Python 代码:

def zig_zag(seq):
    """tests if binary sequence seq satsifies zig-zag pattern"""
    for i in range(len(seq)-1):
        if (i%2 == 0 and seq[i] > seq[i+1]) or (i%2 == 1 and seq[i] < seq[i+1]):
            return False
    return True

def count_zig_zags(n):
    """counts the number of binary zig-zag patterns of length n"""
    count = 0
    for i in range(2**n):
        b = bin(i)[2:]
        if zig_zag(b): count += 1
    return count

例如:

>>> [count_zig_zags(n) for n in range(1,12)]
[2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233]

证明将通过强归纳。

【讨论】:

  • 我认为对于长度 3,输出必须是 10,例如。为什么是 5 个?!
  • 有递归解决方案吗?
  • n = 3 的输出怎么可能是 10? 2^3 = 8,因此即使对二进制序列没有限制,它也必须 000, 010, 011, 110, 111。
  • 对于递归解,请注意长度为n 的有效解可以通过1 种方式或2 种方式扩展为长度为n+1 的有效解,并且可以是以 2 种方式扩展与长度为 n-1 的有效序列的数量相同(证明,这似乎需要 2 种情况,具体取决于 n 是偶数还是奇数,未给出)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 2011-03-02
  • 2021-04-06
  • 1970-01-01
相关资源
最近更新 更多