(组合数学习题)递推关系一道经典题分析与解答
文章目录
- 题目
- 分析与解答
- 求解
- 程序实现(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个,则可以分为以下两种情况:
考虑长度为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”这个模式,这就需要进行第二步的讨论;
考虑前面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
(组合数学习题)递推关系一道经典题分析与解答相关推荐
- LeetCode刷题——链表OJ(历时三天,万字博客,十一道经典题,带你手撕链表)
知之愈明,则行之愈笃:行之愈笃,则知之益明. 学完链表,我们不得刷刷题增进对链表的认识?今天博主选取十一道经典链表题,从刷题者的角度剖析重点和易错点,讲解最简单的方法,文章内附题目和题目链接,重点内容 ...
- 线性代数(第六版)同济大学 习题一 (1-4题)个人解答
线性代数(第六版)同济大学 习题一(1-4题) 1. 利用对角线法则计算下列三阶行列式: \begin{aligned}&1. \ 利用对角线法则计算下列三阶行列式:&\end{ali ...
- 线性代数(第六版)同济大学 习题一 (5-6题)个人解答
线性代数(第六版)同济大学 习题一(5-6题) 5. 求解下列方程: \begin{aligned}&5. \ 求解下列方程:&\end{aligned} 5. 求解下列方程: ...
- 线性代数(第六版)同济大学 习题一 (7-9题)个人解答
线性代数(第六版)同济大学 习题一(7-9题) 7.设n阶行列式D=det(aij),把D上下翻转.或逆时针旋转90∘.或依副对角线翻转.依次得D1=∣an1⋅⋅⋅ann⋮⋮a11⋅⋅⋅a1n∣,D2 ...
- 一道经典极限题的分析与求解
一道经典极限题的分析与求解 题目 limx→∞ex(1+1x)x2\lim_{x\to \infty}\frac{\mathrm{e}^x}{(1+\frac1x)^{x^2}} x→∞lim(1 ...
- 微软的一道经典逻辑推理题:小明和小强都是张老师的学生,张老师的生日是M月N日
微软的一道经典逻辑推理题:小明和小强都是张老师的学生,张老师的生日是M月N日 分类: 天下杂侃 2008-08-07 23:37 17495人阅读 评论(21) 收藏 举报 题目是这样的: 小明和小强 ...
- 微软的一道经典逻辑推理题 小明和小强都是张老师的学生,张老师的生日是M月N日
微软的一道经典逻辑推理题:小明和小强都是张老师的学生,张老师的生日是M月N日 分类: 天下杂侃 2008-08-07 23:37 17495人阅读 评论(21)收藏 举报 题目是这样的: 小明和小强都 ...
- 谁喝水谁养斑马答案C语言,余式厚:最难的一道推理题叫“谁养斑马”--文化--人民网...
余式厚的课上得生动是有名的,让枯燥变得有趣是他的拿手好戏 在他的逻辑课上可以唱歌 几年前,余式厚偶遇一位学生,学生考他:"您还能叫出我的名字吗?"余式厚顺利接招,准确无误. 那时, ...
- 分式求二阶导数_近10年高考数学“导数大题”分析,附2021备考建议
今天小马给大家整理了近10年高考数学"导数大题"分析,以及2021高考备考建议 相关推荐(点击跳转)???▶语文干货 | 高中必修1-5古代文化常识大汇总!▶高中数学 | 知识点结 ...
最新文章
- python学习手册笔记——20.迭代和解析
- leetcode221 Maximal Square
- 冬日稻城亚丁,美得一塌糊涂!
- 微信公众平台开发(76) 获取用户基本信息
- fgetcsv()函数
- java小程序 2048_微信小程序之游戏2048
- 阿里云正式推出内容平台“云栖号”:全面助力企业和个人上云决策
- KAWAI 钢琴编号、年代、型号表
- UE4如何贴混合贴图_UE4_赛博朋克雨夜环境创作分享
- python pytest raises()
- 机械制图手册_机械制图基本知识大全!
- 7——1 shelve 模块
- c++程序查重系统设计思路
- JS 动态添加的元素 绑定事件
- Jmeter IP欺骗
- ansys添加力矩_ANSYS中加载力矩
- sox 音频采样率转换
- nltk安装出错,nltk_data语料库下载
- 安卓4.4pppoe拨号间隔及轮次修改
- 【面试宝典】软件测试工程师2021烫手精华版(第一章测试理论篇)