- 注册时间
- 2007-12-27
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 43546
- 在线时间
- 小时
|
由于规范化后路径每个点总是向左下或向右下移动,而整个图进行左右翻转也时等价的,总可以假设顶上第一个蓝点到红点是向左下移动的,
比如下面的图(a9)不符合上面蓝点到红点是向右下移动的,所以需要进行左右翻转。
.
然后我们一次查看每个红点到下一个红点的移动方向,如果向左下,编码为0,如果向右下,编码为1.
而由于最下面红点下方总是两个蓝点,可以不编码。由此,对于包含n个红点的图,编码后是n-1比特的整数。
而如下面(a10)这样的图,由于所有红色点在一条直线上,可以顶上偏右多一个蓝色点,我们在编码中可以忽略这个蓝色点,于是下面图会编码为n-1个比特0.
也就是对于全0的编码,我们会认为它顶上偏右位置多一个蓝色点。
而相应的如下图(a7)这样的图,所有红色点也在一条直线上,但是顶上只有一个蓝点,会被编码成全1.
。
特别的图a3只有一个红点,编码为0个比特(这时无所谓0,1了)。而图a2和a1只能特殊处理,不参与编码。
于是在这种编码方案下面,如果一个图的编码是n比特x,那么分裂m次后可以达到一个目标状态的方案数为f(n,x,m),那么可以得到递推式
当\(n\ge 1\)时
f(n,x,m)=f(n, x, m-n-2)+f(n+1,x, m-n-3)+((x==0)+1)f(n+1,x|(1<<n),m-n-3)
+ f(n-1, r, m-n-1)+f(n,r,m-n-2)+((x==0)+1)f(n,r|(1<<(N-1)), m-n-2);
其中在x是偶数时,r=x/2, x是奇数时,r=~(x/2) (这里~表示对这个n-1比特数取反)
而当\(n==0\)时,x无编码,对应
f(0,.,m)=a2(m-1)+4f(0,.,m-2)+2f(1,1,m-3)+f(1,0,m-3)
而
a2(0)=1
a2(m)=3a2(m-1)+3f(0,.,m-2) (当\(m\ge 1\))
当然,对于任意\(m\lt \frac{(n+2)(n+1)}2\) , f(n,.,m)=0.
而分析计算结果可以发现,对于给定的n,m, f(n,x,m)的取值只和x的第一个同最高位不同的比特位的位置相关。这个从递推式里面也容易看出,可以考虑对m+n进行从小到大的归纳假设进行分析。
另外发现x除了全0和全1,x取互补值时函数值相同, 但是这个性质比较难分析,不过我们计算时,还是可以将这两者各自单独计算,这部分复杂度不大。
由此,我们只需要计算f(n,11..110...,m)和f(n,00...01...,m)即可。
我们可以记u(n,k,m)为前面正好有k个1的情况,v(n,k,m)为前面有正好k个0的情况,(\(1\le k \le n\))
于是
u(n,k,m)=u(n,k,m-n-2)+v(n+1,1,m-n-3)+u(n+1,k+1,m-n-3)
+u(n-1,h,m-n-1)+v(n,1,m-n-2)+u(n,h+1,m-n-2)
其中h在k<n时等于k,在k==n时h=k-1.
同样
v(n,k,m)=v(n,k,m-n-2)+v(n+1,k+1,m-n-3)+((k==n)+1)u(n+1,1,m-n-3)
+v(n-1,h,m-n-1)+v(n,h+1,m-n-2)+((k==n)+1)u(n,1,m-n-2)
其中h在k<n时等于k,在k==n时h=k-1.
于是可以看出,除了k==n的情况,其他情况可以通过归纳形式证明u(n,k,m)=v(n,k,m), 我们可以统一记为w(n,k,m) (\(1\le k\le n-1, m\ge \frac{(n+1)(n+2)}2\)),
而由于u(n,n,m)和v(n,n,m)可能不同,可以把它们简记为u(n,m)和v(n,m).
而其中初始条件为u(0,.,m)=v(0,.,m)=f(0,.,m)=a2(m-1)+4u(0,.,m-2)+2u(1,1,m-3)+v(1,1,m-3)=a2(m-1)+4u(0,.,m-2)+2u(1,m-3)+v(1,m-3).
|
|