从《Cash》谈一类分治算法的应用.docx
《从《Cash》谈一类分治算法的应用.docx》由会员分享,可在线阅读,更多相关《从《Cash》谈一类分治算法的应用.docx(5页珍藏版)》请在第一文库网上搜索。
1、从Cash谈一类分治算法的应用分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同.求出子问题的解,就可得到原问题的解.分治算法非常基础,但是分治的思想却非常重要,本文将从今年NOI的一道动态规划问题Cash开始谈如何利用分治思想来解决一类与维护决策有关的问题:例一.货币兑换(Cash)i问题描述小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和8纪念券(以下简称B券)每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个实数.每天随着市场的起伏波动,两种金券都有自己当时的价值,即每一单位金券当天可以
2、兑换的人民币数目.我们记录第K天中A券和B券的价值分别为Ak和Bk (元/单位金券)为了方便顾客,金券交易所提供了一种非常方便的交易方式:比例交易法.比例交易法分为两个方面:A)卖出金券:顾客提供一个0, 100内的实数OP作为卖出比例,其意义为:将OP%的A券和OP%的B券以当时的价值兑换为人民币;B)买入金券:顾客支付IP元人民币,交易所将会兑换给用户总价值为IP的金券并且满足提供给顾客的A券和B券的比例在第K天恰好为Reiter例如,假定接下来3天内的4、反、的变化分别为:时间AkBkRv4tek第一天111第二天122第三天223假定在第一天时,用户手中有100元人民币但是没有任何金券
3、.用户可以执行以下的操作:1 NOI 2007,货币兑换时间用户操作人民币(元)A券的数量B券的数量开户无10000第一天买入100元05050第二天卖出50%752525第二天买入60元155540第三天卖出100%20500注意到,同一天内可以进行多次操作.小Y是一个很有经济头脑的员工,通过较长时间的运作和行情测算,他已经 知道了未来N天内的A券和B券的价值以及RGe.他还希望能够计算出来,如果开始时拥有S元钱,那么N天后最多能够获得多少元钱.算法分析不难确立动态规划的方程:设/团表示第i天将所有的钱全部兑换成A, B券,最多可以得到多少A券.很容易可以得到一个。(层)的算法:* Rate
4、l / (Al * Rate + Bl)SFor z AnsThen Ans 0.不妨设/网,gj=f1j/Ratej,那么(g7-g因)/(/ -,fk)-ai/hi.这样我们就可以用平衡树以为关键字来维护一个凸线,平衡树维护一个点集(/1心/),/是单调递增的,相邻两个点的斜率是单调递减的每次在平衡树中二分查找与-矶i /卅最接近的两点之间的斜率.这样动态规划的时间复杂度就降低为。(川Og2),但是维护凸线的平衡树实在不容易在考场中写对,编程复杂度高,不易调试(我的Splay代码有6k多).这个问题看上去只能用高级数据结构来维护决策的单调性,事实上我们可以利用分治的思想来提出一个编程复杂度
5、比较低的方法:对于每一个3它的决策/的范围为17-1.我们定义一个Solve过程:S。/阳/表示对于的品正广,ffl /JM的决策/来更新i的值.这样我们的目标就是So/阳1,):可以先So/阳后计算出/川那么1/2的每一个数一定是/2+1的每个i的决策,用1M2的决策来更新M2+1的力i值后Solve(n/2+. n),这恰好体现的是一种分治的思想:用1/2的决策来更新/2+1的咒i值:类似用平衡树的方法,我们可以对1R2的所有决策建立一个凸线,对R2+1的所有,按照/殖从大到小排序,凸线的斜率是单调的,-。山田4也是单调的,这样我们就可以通过一遍扫描来计算出对于每一个i在1山2里面最优的决
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Cash 一类 分治 算法 应用