文章目录

  • 题目
  • 分析与解答
  • 求解
  • 程序实现(C++)

题目

来看下面一道题,主要用到的是组合数学中的递推关系部分的内容。

某长度为nnn的二进制序列,要求其中至少有连续的333个000出现,问:能产生多少种符合条件的序列?

分析与解答

先来一个直观的表示:
{n=4:1000,0001,00003种情况n=5:11000,10000,01000,00010,00011,00001,10001,000008种情况⋮\begin{cases} {n=4: 1000, 0001, 0000 \quad 3种情况}\\ {n=5: 11000, 10000, 01000, 00010, 00011, 00001, 10001, 00000 \quad 8种情况}\\ \vdots \end{cases} ⎩⎪⎪⎨⎪⎪⎧​n=4:1000,0001,00003种情况n=5:11000,10000,01000,00010,00011,00001,10001,000008种情况⋮​

看到这种题目自然想到要用递推关系来解,在之前的文章(《(组合数学笔记)递推关系小结及典型题分析》)中已经有提到一些简单的概念与定理,大概就是通过分析题目条件,列出递推关系式,并进行求解即可。

在本题中,这个序列要求至少有连续的三个0\color{red}{至少有连续的三个0}至少有连续的三个0,先设长度为nnn的二进制序列中满足条件的有ana_nan​个,则可以分为以下两种情况:

  1. 考虑长度为n−1n-1n−1的序列,an−1a_{n-1}an−1​为已经满足条件序列的个数,则对于下一个数(第nnn个数),只有000和111两种选择,所以满足条件的序列有2×an−12\times a_{n-1}2×an−1​个。但是仅这样考虑会有一部分没有被考虑到,因为“000000000”这个模式可以仅在最后一位规定好后才出现,换言之,在前面n−1n-1n−1个数组成的序列中可以完全不出现“000000000”这个模式,这就需要进行第二步的讨论;

  2. 考虑前面n−1n-1n−1个数组成的序列,若其中没有出现“000000000”,那么为使该序列满足题目条件,则必须在最后一位添加上之后出现“000000000”,而只能是下面这一种情况:
    (…,第n−4位,第n−3位,第n−2位,第n−1位,第n位)(…,第n−4位,1,0,0,⏟共n−1位0)( \dots,第n-4位,第n-3位,第n-2位,第n-1位,第n位) \\ ( \underbrace{\dots,第n-4位,\qquad\quad1\ ,\qquad\quad0\ ,\qquad\quad0\ ,\qquad}_{共n-1位} \ \ 0 ) (…,第n−4位,第n−3位,第n−2位,第n−1位,第n位)(共n−1位…,第n−4位,1 ,0 ,0 ,​​  0)
    那么对于这种情况(末4位为“100010001000”),我们只需考虑前面的n−4n-4n−4位组成的序列即可,这个序列不考虑限制条件的话有2n−42^{n-4}2n−4种排列方法,但是这样会出现前面含有“000000000”的模式,于是在后面还要减去里面含有“000000000”模式的个数,而这是我们前面已经的规定好的记号,即an−4a_{n-4}an−4​。

综上所述,整个递推关系式就是:
{an=2an−1+2n−4−an−4,n⩾4,a0=0,a1=0,a2=0,a3=1,\begin{cases} a_n=2a_{n-1}+2^{n-4}-a_{n-4},n\geqslant4, \\ a_0=0,\ a_1=0,\ a_2=0,\ a_3=1, \end{cases} {an​=2an−1​+2n−4−an−4​,n⩾4,a0​=0, a1​=0, a2​=0, a3​=1,​
结果中的a0,a1,a2a_0,\,a_1,\,a_2a0​,a1​,a2​均规定为111。

求解

利用特征方程进行求解发现其根比较复杂,于是我从著名的整数数列线上大全之中寻找答案,

a(n) is the number of n-tosses having a run of 3 or more heads for a fair coin (i.e., probability is a(n)/2^n).

译文:

a(n)是具有3个或更多正面的公平投掷的n掷次数,即概率为a(n)/2^n。

该序列的主页:A050231,有兴趣的朋友可以继续研究,里面还提到了Tribonacci Number,是Fibonacci Number的扩展版本。在这里能找到这个序列的前三百位。

程序实现(C++)

这个题最初是出现在算法实验题库的’问题 C: 简单的密码’,不过从组合的观点来看这也是一道很有意思的题。下面用C++输出了这个序列的前30位。

#include <iostream>
using namespace std;
const int N=30;
int main()
{int f[N] = {0, 0, 0, 1};for(int n=4; n <= N; n++){// 使用左移位计算2的n-4次幂f[n] = 2 * f[n - 1] + (1 << (n - 4)) - f[n - 4];cout<<"Length: "<<n<<", number: "<<f[n]<<"\t"<<endl;}return 0;
}

结果:

Length: 4, number: 3
Length: 5, number: 8
Length: 6, number: 20
Length: 7, number: 47
Length: 8, number: 107
Length: 9, number: 238
Length: 10, number: 520
Length: 11, number: 1121
Length: 12, number: 2391
Length: 13, number: 5056
Length: 14, number: 10616
Length: 15, number: 22159
Length: 16, number: 46023
Length: 17, number: 95182
Length: 18, number: 196132
Length: 19, number: 402873
Length: 20, number: 825259
Length: 21, number: 1686408
Length: 22, number: 3438828
Length: 23, number: 6999071
Length: 24, number: 14221459
Length: 25, number: 28853662
Length: 26, number: 58462800
Length: 27, number: 118315137
Length: 28, number: 239186031
Length: 29, number: 483072832
Length: 30, number: 974791728

(组合数学习题)递推关系一道经典题分析与解答相关推荐

  1. LeetCode刷题——链表OJ(历时三天,万字博客,十一道经典题,带你手撕链表)

    知之愈明,则行之愈笃:行之愈笃,则知之益明. 学完链表,我们不得刷刷题增进对链表的认识?今天博主选取十一道经典链表题,从刷题者的角度剖析重点和易错点,讲解最简单的方法,文章内附题目和题目链接,重点内容 ...

  2. 线性代数(第六版)同济大学 习题一 (1-4题)个人解答

    线性代数(第六版)同济大学 习题一(1-4题) 1. 利用对角线法则计算下列三阶行列式: \begin{aligned}&1. \ 利用对角线法则计算下列三阶行列式:&\end{ali ...

  3. 线性代数(第六版)同济大学 习题一 (5-6题)个人解答

    线性代数(第六版)同济大学 习题一(5-6题) 5. 求解下列方程: \begin{aligned}&5. \ 求解下列方程:&\end{aligned} ​5. 求解下列方程:​​ ...

  4. 线性代数(第六版)同济大学 习题一 (7-9题)个人解答

    线性代数(第六版)同济大学 习题一(7-9题) 7.设n阶行列式D=det(aij),把D上下翻转.或逆时针旋转90∘.或依副对角线翻转.依次得D1=∣an1⋅⋅⋅ann⋮⋮a11⋅⋅⋅a1n∣,D2 ...

  5. 一道经典极限题的分析与求解

    一道经典极限题的分析与求解 题目 lim⁡x→∞ex(1+1x)x2\lim_{x\to \infty}\frac{\mathrm{e}^x}{(1+\frac1x)^{x^2}} x→∞lim​(1 ...

  6. 微软的一道经典逻辑推理题:小明和小强都是张老师的学生,张老师的生日是M月N日

    微软的一道经典逻辑推理题:小明和小强都是张老师的学生,张老师的生日是M月N日 分类: 天下杂侃 2008-08-07 23:37 17495人阅读 评论(21) 收藏 举报 题目是这样的: 小明和小强 ...

  7. 微软的一道经典逻辑推理题 小明和小强都是张老师的学生,张老师的生日是M月N日

    微软的一道经典逻辑推理题:小明和小强都是张老师的学生,张老师的生日是M月N日 分类: 天下杂侃 2008-08-07 23:37 17495人阅读 评论(21)收藏 举报 题目是这样的: 小明和小强都 ...

  8. 谁喝水谁养斑马答案C语言,余式厚:最难的一道推理题叫“谁养斑马”--文化--人民网...

    余式厚的课上得生动是有名的,让枯燥变得有趣是他的拿手好戏 在他的逻辑课上可以唱歌 几年前,余式厚偶遇一位学生,学生考他:"您还能叫出我的名字吗?"余式厚顺利接招,准确无误. 那时, ...

  9. 分式求二阶导数_近10年高考数学“导数大题”分析,附2021备考建议

    今天小马给大家整理了近10年高考数学"导数大题"分析,以及2021高考备考建议 相关推荐(点击跳转)???▶语文干货 | 高中必修1-5古代文化常识大汇总!▶高中数学 | 知识点结 ...

最新文章

  1. python学习手册笔记——20.迭代和解析
  2. leetcode221 Maximal Square
  3. 冬日稻城亚丁,美得一塌糊涂!
  4. 微信公众平台开发(76) 获取用户基本信息
  5. fgetcsv()函数
  6. java小程序 2048_微信小程序之游戏2048
  7. 阿里云正式推出内容平台“云栖号”:全面助力企业和个人上云决策
  8. KAWAI 钢琴编号、年代、型号表
  9. UE4如何贴混合贴图_UE4_赛博朋克雨夜环境创作分享
  10. python pytest raises()
  11. 机械制图手册_机械制图基本知识大全!
  12. 7——1 shelve 模块
  13. c++程序查重系统设计思路
  14. JS 动态添加的元素 绑定事件
  15. Jmeter IP欺骗
  16. ansys添加力矩_ANSYS中加载力矩
  17. sox 音频采样率转换
  18. nltk安装出错,nltk_data语料库下载
  19. 安卓4.4pppoe拨号间隔及轮次修改
  20. 【面试宝典】软件测试工程师2021烫手精华版(第一章测试理论篇)

热门文章

  1. SpringMVC 登录验证实例
  2. yarn-cli 缓存(转)
  3. [PYTHON] for循环中关于列表list中remove method 不得不说的秘密
  4. python的高阶函数
  5. 1. UI Tests简介
  6. java 短信验证码===随机数
  7. 【iOS系列】-xib封装使用
  8. Tableview最后一行无法显示或者显示不全的问题IOS
  9. CCF201403-2 窗口
  10. 計算機二級-java09