两道递推公式题的解题报告
Posted y15beta
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了两道递推公式题的解题报告相关的知识,希望对你有一定的参考价值。
T1(阿牛的EOF牛肉串)
- 题意:一串由EOF三个字母组成的长度为\(n\)的字母串,不能出现连续的OO,求字符串种类数\(f[n]\)
- 答案:\(f[n]=2f[n-1]+2f[n-2]\) ——①
注解:
如果a[n]取E,该情况下种类为f[n-1]; 如果a[n]取F,该情况下种类为f[n-1]; 如果a[n]取O,则只能取a[n-1]为E或F,分别有f[n-2]种。 综上,一共有f[n-1]+f[n-1]+f[n-2]+f[n-2]种。
T2 (原题找不到了,恳请见过的巨佬提供线索)
- 题意:一串由WAC三个字母组成的长度为\(n\)的字母串,不能出现连续的WA,求字符串种类数\(f[n]\)
- 答案:\(f[n]=3f[n-1]-f[n-2]\) ——②
注解:
先假设没有非法字符串,那么很明显,总数是3f[n-1]; 再去掉a[n-1]和a[n]组成非法串的情况,此时等价于固定a[n-1]与a[n],求前面n-2个的排序,为f[n-2]; 综上,一共有3f[n-1]-f[n-2]种。
数学课讲题的话到这里为止吧
比较
这两题看似相似,其题解分别看来也都很有道理,为什么其结果却大相径庭呢?
为什么T1不适合用②式:
因为去掉的含非法字符串的情况不是f[n-2]。
因为在求f[n]时我们已经事先使前n-1项合法,所以在f[n-1](我们用来乘以三作为总数的)中a[n-1]为O的可能性比T2中a[n-1]为W的可能性小。
这是因为,a[n-1]中的O可以作为非法串的尾,与a[n-2]组成OO。因此,在求f[n-1]时已经有一部分a[n-1] 为O的情况被筛掉了。
但对于T2,在求f[n-1]时不可能把a[n-1]为W的情况筛掉,因为W只能做头,不能做尾。
为什么T2不适合用①式:
我的理解当中比较重要的点
求f[n]时对a[n]的假设是在保证a[1]~a[n-1]合法的基础上的,并在此基础上对a[n-1]进行分类讨论。在求f[n]时实际上是对a[n]的放置,我们要避免的是a[n-1]与a[n]形成非法字符串。
T1中的O既可以当非法子串的头,也可以当尾,这应该是这两种情况不同的根本原因。
由上述分析可见n>=3时T1的f[n]总比T2大,因为我们先假设没有非法串求其总数,之后要去掉含有非法串的情况,对于T1来说同一个O既可以当头又可以当尾,因此它的去除具有“简并性”(逃。
注
时间关系,懒得举特例来具体对照了,以后补。
另外,以上的比较与分析,只是本蒟蒻因为某些奇奇怪怪的原因
(讲数学题去找递推题后,发现的疑惑以及自己的解惑思路。像我这样菜的人对递推还没有更深刻的理解,因此本文中还有很多不恰当的误解和错误,在语言组织与文章结构方面也显得很不成熟,恳请屏幕前的巨佬不吝赐教,一起交流这些奇奇怪怪(毒瘤的想法。
以上是关于两道递推公式题的解题报告的主要内容,如果未能解决你的问题,请参考以下文章
递推:POJ中的三道递推例题POJ 1664POJ 2247和POJ 1338