算法设计的基本思路.ppt
《算法设计的基本思路.ppt》由会员分享,可在线阅读,更多相关《算法设计的基本思路.ppt(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法设计的基本思路 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望一些基本思路复用已有的计算结果通过预处理或改变计算方法,计算出可共用的中间结果避免或减少无效的计算保存/查询中间计算结果的方法待求解的问题可以逐层分解成多个小问题;Q分解成为Q1,Q2,QnQi分解成为Qi1,Qi2,Qim如果Qij之间有很多重合的地方,那么我们可以在第一次求解Qij的时候记录结果,并且在之后通过查询来避免重复求解Qij。在应用中,有某个问题需要多次求解。且每次求解有很多可以重复利
2、用的情况。这个可以看作是上面一个问题的衍生情况。保存/查询的例子(1)棋类博弈问题每个玩家的得分是他的最大块棋子的个数。得分高的人赢得比赛。问题:当棋盘上只有10个空格的时候,求是否某人一定赢。描述使用一个Config数据结构来描述棋局记录了各个棋子的位置;记录了下一步谁下最基本的博弈递归函数booleanwin(Configurecfg)if(cfg是最终结局)计算各个player的得分,并返回胜负结果for(每个可能的后继结局cfg)if(!win(cfg)returntrue;/存在使对方必输的走法returnfalse中间结果的保存Configure数据类型最多有1024个取值。win
3、函数的计算过程:有10!个执行轨迹,因此必然有很多次重复的计算过程。解决方法:使用数据结果保存各个Configure的结果;win函数在每次调用之前首先查询,如果已经计算过则不需要查询;在调用返回之前,将此结果存放到map中保证了每个Configure只需要计算一次如何保存结果?伪代码booleanwin(intplayerNo,Configurecfg)if(map(PlayerNo,cfg)有定义)returnmap(PlayerNo,cfg)if(cfg是最终结局)计算各个player的得分,并返回胜负结果for(每个可能的后继结局cfg)if(!win(1-playerNo,Confi
4、gurecfg)/存在使对方必输的走法将map(PlayerNo,cfg)设置为true;returntrue;将map(PlayerNo,cfg)设置为falsereturnfalse;进一步考虑可以改变计算得分的方法来提高效率。只有最终格局才可以算出最后的得分,但是一个格局可以生成多个后继格局;可以改变计算得分的方法对于每个格局,计算中间结果:分成多少相连的块,每块的棋子个数是多少;后继格局的中间结果可以依据前驱格局的结果快速计算得到;。另一个情况对于某个数据类型D,我们需要计算其函数值f,且f(D)定义为F(g(D1),g(D2),g(Dn),其中Di是D的数据分量,或者是D的一部分。那
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 设计 基本思路
限制150内