一个计数问题

IT_worker 2014-02-25 03:38:45
一个0,1的序列如果存在连续3个比特相同,则不称为好序列,否则称为好序列,例如01001是好序列,而01110不是好序列,求长度为n的好序列个数.
...全文
306 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
IT_worker 2014-02-28
  • 打赏
  • 举报
回复
当前两位不同时从第二位开始也是好序列共有G(n-1)种情况,当前两位相同时从第三位开始也是好序列共有G(n-2)种情况,综上所叙有: G(n)=G(n-1)+G(n-2) G(1)=2,G(2)=4显然
cdsnfresh 2014-02-26
  • 打赏
  • 举报
回复
引用 7 楼 yyfhz 的回复:
再往下算,有 G(n) =2G(n-1)-G(n-3) G(n-1)=2G(n-2)+G(n-4) G(n-2)=2G(n-3)-G(n-5) ... G(6) =2G(5) -G(3) G(5) =2G(4) -G(2) G(4) =2G(3) -G(1) 等式两边相加并化简,得到 G(n)=G(n-1)+G(n-2)+G(3)-G(2)-G(1) 由于G(3)=6,G(2)=4, G(1)=2,因此有 G(1)=2, G(2)=4, G(n)=G(n-1)+G(n-2) 这一更加简单个公式
数学能力真行呀
yyfhz 2014-02-25
  • 打赏
  • 举报
回复
再往下算,有 G(n) =2G(n-1)-G(n-3) G(n-1)=2G(n-2)+G(n-4) G(n-2)=2G(n-3)-G(n-5) ... G(6) =2G(5) -G(3) G(5) =2G(4) -G(2) G(4) =2G(3) -G(1) 等式两边相加并化简,得到 G(n)=G(n-1)+G(n-2)+G(3)-G(2)-G(1) 由于G(3)=6,G(2)=4, G(1)=2,因此有 G(1)=2, G(2)=4, G(n)=G(n-1)+G(n-2) 这一更加简单个公式
cdsnfresh 2014-02-25
  • 打赏
  • 举报
回复
引用 4 楼 misakamm 的回复:
[quote=引用 3 楼 derekrose 的回复:] f(n+1)=2f(n)+2^n/4 不知道对不对 你有用例吗
n f(n)
1 2
2 4
3 6
4 10
5 16
6 26
7 42
8 68
9 110
10 178
11 288
12 466
13 754
14 1220
15 1974
16 3194
17 5168
18 8362
19 13530
20 21892
21 35422
22 57314
23 92736
24 150050
25 242786
26 392836
27 635622
28 1028458
29 1664080
30 2692538
拿去检验吧[/quote]这结果明显是f(n+1)=f(n)+f(n-1)呀
yyfhz 2014-02-25
  • 打赏
  • 举报
回复
对于长度为n的01串来说,假设G(n)是其中的"好序列"数列的数量,E(n)是其中的“坏序列”的数量。 现在讨论G(n)和E(n)的关系。 首先,显然有G(n)+E(n)=2^n (好序列+坏序列=全排列) 然后,我们计算其中的“坏序列”的数量。 为了确保没有重复序列,我们约定X(i,n)是对于长度为n的数列,从第i个元素开始出现连续3个相同元素(而在i之前没有出现过连续3个相同元素)的序列的数量。 则E(n)=X(1,n)+X(2,n)+...+X(n-2,n) 继续讨论X(i,n)。 当i=1时,其实表示从元素1~元素3都是0或都是1(后面的元素随便取数),其数量为2*2^(n-3)。 当i>i时,其实表示从元素1~元素i-1是一个“好序列”,然后元素i,i+1,i+2是连续3个与元素i-1相反的数字,然后从i+3一直到n随便取数。其数量为G(i-1)*2^(n-i-3+1)=G(i-1)*2^(n-2-i) 把它们加起来,有 E(n) =2*2^(n-3) +G(1)*2^(n-4) +G(2)*2^(n-5) +... +G(n-3)*2^(0) 即 <1> 2^n -G(n) =2*2^(n-3) +G(1)*2^(n-4) +G(2)*2^(n-5) +... +G(n-3)*2^(0) 同样的,当我们考虑长度为n+1的序列时,有<2> 2^(n+1) -G(n+1) =2*2^(n-2) +G(1)*2^(n-3) +G(2)*2^(n-4) +... +G(n-3)*2^(1) +G(n-2)*2^(0) <2>-<1>,有 2^(n+1) -G(n+1) - 2^n +G(n) =2*2^(n-3) +G(1)*2^(n-4) +G(2)*2^(n-5) +... +G(n-3)*2^(0) +G(n-2)*2^(0) =2^n -G(n)+G(n-2)*2^(0) 即 2^n -G(n+1) +G(n)= 2^n -G(n)+G(n-2) 化简得 G(n+1)=2*G(n)-G(n-2) 用x来代表n+1,则有 ==================================================== G(x)=2*G(x-1)-G(x-3) 这个就是长度为x的"好序列"数量的递推公式。 为了让这个公式能运行起来,我们需要给它一些初始值 G(1)=2 -- 长度为1的序列,怎么放都是“好序列” G(2)=4 -- 长度为2的序列,怎么放都是“好序列” G(3)=6 -- 长度为2的序列,只要不是111和000,其它都是都是“好序列” 然后G(4)=2G(3)=G(1)=10 G(5)=2G(4)-G(2)=16 G(6)=2G(5)-G(3)=26 以此类推
  • 打赏
  • 举报
回复
引用 3 楼 derekrose 的回复:
f(n+1)=2f(n)+2^n/4 不知道对不对 你有用例吗
n f(n)
1 2
2 4
3 6
4 10
5 16
6 26
7 42
8 68
9 110
10 178
11 288
12 466
13 754
14 1220
15 1974
16 3194
17 5168
18 8362
19 13530
20 21892
21 35422
22 57314
23 92736
24 150050
25 242786
26 392836
27 635622
28 1028458
29 1664080
30 2692538
拿去检验吧
derekrose 2014-02-25
  • 打赏
  • 举报
回复
f(n+1)=2f(n)+2^n/4 不知道对不对 你有用例吗
Agnostos 2014-02-25
  • 打赏
  • 举报
回复

def calc(n):
    if n < 3:
        return 2**n
    c1 = c2 = c3 = c4 = 1
    while n > 2:
        c1, c2, c3, c4 = c3, c1+c3, c2+c4, c2
        n -= 1
    return c1 + c2 + c3 + c4
    
  • 打赏
  • 举报
回复
dp(又要补字数)

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧