- 注册时间
- 2009-5-22
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 38515
- 在线时间
- 小时
|
楼主 |
发表于 2021-8-25 15:53:10
|
显示全部楼层
用时间复杂度为$O(n^3*2^n)$、
空间复杂度为$O(2^n)$的算法,
暴力求解每一种状态的最佳策略,
可以得到$n=0$到$n=20$的结果如下:
- n E(n)
- 0 0.000000
- 1 2.000000
- 2 5.000000
- 3 8.000000
- 4 12.500000
- 5 17.000000
- 6 21.500000
- 7 26.000000
- 8 32.750000
- 9 39.500000
- 10 46.250000
- 11 53.000000
- 12 59.750000
- 13 66.500000
- 14 73.250000
- 15 80.000000
- 16 90.125000
- 17 100.250000
- 18 110.375000
- 19 120.500000
- 20 130.625000
复制代码
然后将$n=0,1,3,7,15$的结果单独拿出来看,
对应的$E(n)$的值分别是:$0,2,8,26,80$
这个数列是 http://oeis.org/A024023
由此可以猜出,将$n$个多米诺骨牌排好,需要$O(n^1.585)$次操作,
里面的指数$1.585=ln(3)/ln(2)$。
具体的操作方法如下:
最中间的骨牌先不立,按照$\lfloor n/2\rfloor$的解法操作两次,把左右两边的$\lfloor n/2\rfloor$块骨牌立好:
【立起】……【立起】【倒下】【立起】……【立起】
然后再成功立起中间的骨牌即可,若不幸失败,则重新把倒下的那边的$\lfloor n/2\rfloor$块骨牌立好,即可再次尝试立起中间的骨牌。
所以立起$n$块骨牌所需的操作次数为
$E(n)=2*E(\lfloor n/2\rfloor)+1+1/2(E(\lfloor n/2\rfloor)+1+1/2(E(\lfloor n/2\rfloor)+1+1/2(E(\lfloor n/2\rfloor)+1+......)))$
$=3*E(\lfloor n/2\rfloor)+2$
$=3^{log_2(n)}-1$
$=n^{ln(3)/ln(2)}-1$
于是【成功概率,左倒概率,右倒概率】=【$1/2$,$1/4$,$1/4$】的情况就解决了。
接下来好像就可以把【成功概率,左倒概率,右倒概率】这三个参数值改一改,
看看会出现什么有趣的数列了。 |
|