选球博奕与动态规划(四)
来源:互联网 发布:剑三苍云捏脸数据 编辑:程序博客网 时间:2024/05/21 17:14
这里不严格展开,只简单分析一下算法SOLVE的时间复杂度。由于此算法是基于递归公式A的,假设对任一局面N有Cond(N) = Vol(N)-1 则可将公式展开为:
......
因此, ,这一效率不理想。
实际上,从题目的要求可知,假设球的总数为M,那么首轮决策取球数不应该超过low(M/2),low()为向下取整函数;如果M为偶数的话首轮取球数最多为:M/2-1。否则的话,按游戏规则,最后一个球一定会被对方取走。因此判断一个局面N是否有解,只要考虑子局面Ci(N)解的情况,其中1≤ i ≤low(Vol(N)/2),或考虑局面所有球是否可以被当前决策方全取走,即可。为此得到以下新算法:
SOLVE_OPT(m, cnd) if m%2 == 1 then return 1 if aySitu[m].vol == cnd then return 1 half = low(m/2) if aySitu[m] initiated then if cnd <= half then return (int)anySitu[m].pSCond[cnd].v else return 0 aySitu[m].vol = m for c <- 1 to half //condition do h <- 0 rear(aySitu[m].pSCond) <- create SCond for d <- 1 to c do h <- h + SOLVE(m-d,d) if h==c then aySitu[m].pSCond[c].v = flase else aySitu[m].pSCond[c].v = true; aySitu[m].pSCond[c].cond = c return (int)aySitu[m].pSCond[m].v
算法SOLVE_OPT在原算法SOLVE的基础上作了以下改进:将SOVLE的中的m除2并向下取整,所得值赋给变量half;原第5行的控制逻辑,被改写,当传入的条件值cnd小于等于half时,仍由原来逻辑控制,当cnd大于half时,意味着取球数将会超过当前局面球数的一半,故必无解;原第11行中的m-1用half变量取代,从而使得每个局面的PScond链表的结点数也大大减少;SOLVE_OP新增的第1、2行主要是针对局面值是奇数的情况,在此情况下,当前选择方取球数只要小于局面值的1/2,就保证能取到最后一个球,故必有解。
假设不考虑局面条件的限制,SOLVE_OPT按递归公式A可以展开为:
......
假设,则有。
那么
也就是说当 时,成立。
算法SOLVE_OPT,可以接受。
- 选球博奕与动态规划(四)
- (四)动态规划
- 算法分析与设计(四)动态规划(二)
- 动态规划入门(四)DP 基本思想与实现
- 浅谈动态规划(四)
- 动态规划入门(四)
- 选球博奕与动态规划(一)
- 选球博奕与动态规划(二)
- 选球博奕与动态规划(三)
- 简单动态规划集(四)
- 笨蛋难题四(动态规划)
- 基础算法(四)---动态规划算法
- 第十四周 动态规划(四)
- 动态规划示例四
- 动态规划之四
- VS 排序思考与实现——动态规划(四)
- 四、算法_动态规划
- 【算法之动态规划(四)】动态规划笔试例题详解
- Photoshop 也能随时编辑路径圆角
- makefile详解(六)
- NVIDIA新旗舰GeForce GTX 780深度评测
- new 和 malloc 申请内存失败的区别处理
- vs2010的SVN环境搭建
- 选球博奕与动态规划(四)
- AS3 游戏中,一般人物、BOSS血条的减血效果
- Boost.shared_ptr必须注意的一些地方
- js 生成zip
- nginx使用总结
- Google中国2014校园招聘笔试Round A China New Grad Test Problem A. Read Phone Number
- SAMBA服务介绍(从上到下,非常全面,推荐)
- Photoshop 脚本 - 批量更改图片尺寸
- svnrdump dump 实现 SVN 库的远程导出