资源预览内容
第1页 / 共47页
第2页 / 共47页
第3页 / 共47页
第4页 / 共47页
第5页 / 共47页
第6页 / 共47页
第7页 / 共47页
第8页 / 共47页
第9页 / 共47页
第10页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
用改进算法的思想解决规模维数增大的问题,广东韶关一中 张伟达,一、概述,本文主要讨论 如何解决规模维数增大的问题,二、引子:从一道IQ题说起,有两根完全相同但分布不均匀的香,每根香烧完的时间是一个小时,你能用什么方法来确定一段45分钟的时间,二、引子:从一道IQ题说起,有两根完全相同但分布不均匀的香,每根香烧完的时间是一个小时,你能用什么方法来确定一段45分钟的时间,二、引子:从一道IQ题说起,有两根完全相同但分布不均匀的香,每根香烧完的时间是一个小时,你能用什么方法来确定一段45分钟的时间,二、引子:从一道IQ题说起,有两根完全相同但分布不均匀的香,每根香烧完的时间是一个小时,你能用什么方法来确定一段45分钟的时间,二、引子:从一道IQ题说起,有两根完全相同但分布不均匀的香,每根香烧完的时间是一个小时,你能用什么方法来确定一段45分钟的时间,模型A.不减小每根香的计时,两根香加在一起计时是45分钟;,二、引子:从一道IQ题说起,显然不成立!,模型A.不减小每根香的计时,两根香加在一起计时是45分钟;,二、引子:从一道IQ题说起,模型B.只用一根香,使其计时减小,直接计时45分钟;,模型C.把两根香的计时都减小,使两根香加起来是45分钟。,既然都必须把计时减小,不难看出有两头烧的方法:,模型A.不减小每根香的计时,两根香加在一起计时是45分钟;,二、引子:从一道IQ题说起,模型B.只用一根香,使其计时减小,直接计时45分钟;,模型C.把两根香的计时都减小,使两根香加起来是45分钟。,既然都必须把计时减小,不难看出有两头烧的方法:,模型A.不减小每根香的计时,两根香加在一起计时是45分钟;,二、引子:从一道IQ题说起,模型B.只用一根香,使其计时减小,直接计时45分钟;,模型C.把两根香的计时都减小,使两根香加起来是45分钟。,既然都必须把计时减小,不难看出有两头烧的方法:,如果我们两头一起烧,用一根香就能够计时30分钟。,模型A.不减小每根香的计时,两根香加在一起计时是45分钟;,二、引子:从一道IQ题说起,模型B.只用一根香,使其计时减小,直接计时45分钟;,模型C.把两根香的计时都减小,使两根香加起来是45分钟。,再看模型B,显然30+30是不可能等于45分钟的,排除!,二、引子:从一道IQ题说起,C.模型,(*&)#(,改进两头烧的方法:,二、引子:从一道IQ题说起,1。分别点燃第一根的两头和第二根的一头;,二、引子:从一道IQ题说起,1。分别点燃第一根的两头和第二根的一头;,二、引子:从一道IQ题说起,1。分别点燃第一根的两头和第二根的一头;,二、引子:从一道IQ题说起,2。第一根烧完的时候,已经过了30分钟;第二根还剩30分钟,点燃第二根的另一头;,1。分别点燃第一根的两头和第二根的一头;,二、引子:从一道IQ题说起,2。第一根烧完的时候,已经过了30分钟;第二根还剩30分钟,点燃第二根的另一头;,1。分别点燃第一根的两头和第二根的一头;,二、引子:从一道IQ题说起,3。当第二根也烧完了,即时间又过了15分钟。那么我们计出的总的时间就为45分钟了。,2。第一根烧完的时候,已经过了30分钟;第二根还剩30分钟,点燃第二根的另一头;,1。分别点燃第一根的两头和第二根的一头;,二、引子:从一道IQ题说起,C.模型,二、引子:从一道IQ题说起,小结一:做这类问题的主要流程:,1.找出原始解法和可能改进的方向(即分析成A、B、C模型);,2.分析算法的原理(由烧一根香计时半小时,引申为烧剩t的时候点两头就能计时t/2);,3.改进算法(改进的过程中,往往不是依靠算法改进算法本身,反而是利用算法的内涵、实质,结合问题,构造算法);,4. 解决问题(我们得出了正确的解法)。,三、改进算法的途径,1.直接增加算法的规模,解决问题,2.用枚举处理增加的规模,从而解决问题,3.用贪心解决增加的规模,从而解决问题,4.多种途径的综合运用,为了能够简单明了地解释改进算法的途径,我们直接进入第4种情况,用一道例题详细讲解可以如何改进算法解决问题。,【例题】 Team Selection (Balkan OI 2004 Day1),【题目大意】IOI要来了,BP队要选择最好的选手去参加。幸运地,教练可以从N个非常棒的选手中选择队员,这些选手被标上1到N(3 N 500000)。为了选出的选手是最好的,教练组织了三次竞赛并给出每次竞赛排名。每个选手都参加了每次竞赛并且每次竞赛都没有并列的。当A在所有竞赛中名次都比B前,我们就说A是比B better。如果没有人比A better,我们就说A是excellent。 求:excellent选手的个数。,如数据:,例如5,没有选手次次竞赛都比5强, 因为5在第一次竞赛中只输给了2,但是2又在第三次竞赛中输给了5 ,所以5是excellent,【例题】 Team Selection (Balkan OI 2004 Day1),原始算法枚举每一个选手X,判断X是否excellent。这可以通过另一重循环,枚举另一选手Y,判断Y是否比X better。判断是容易的,我们只需要简单地判断X和Y的三次排名。,for(X从1到N) for(Y从1到N) 判断Y是否比X better,Time:O(N2),【例题】 Team Selection (Balkan OI 2004 Day1),【原始思路】,改进一如果让X依照第一次竞赛的名次循环,枚举Y时只需要枚举在第一次竞赛中排在X前面选手即可 。,for(X从第一次竞赛的第1名到第一次竞赛的第N名) for(Y从第一次竞赛的第1名到第一次竞赛的第(X-1)名) 判断Y是否比X better,Time:O(N2),【例题】 Team Selection (Balkan OI 2004 Day1),【原始思路】,改进二如果Y不是excellent(因为有Z比Y better),当我们检查X是否excellent时,我们只需要检查了Z是否比X better,可以不检查Y。,for(X从第一次竞赛的第1名到第一次竞赛的第N名) for(Y枚举当前已知的excellent) 判断Y是否比X better,Time:O(NK) (设K是excellent选手的个数),【例题】 Team Selection (Balkan OI 2004 Day1),【原始思路】,原始思路小结这里的原始算法是直接根据原始模型模拟出来的,改进一和改进二都单纯地根据原始算法的设计缺陷来“改进”(这个改进没有利用问题的本质内容,不是本文所要阐述的“改进”),所以最后的时间复杂度没有质的进展。,【例题】 Team Selection (Balkan OI 2004 Day1),【原始思路】,【降维思路】,子问题:N个选手进行两次竞赛,better和excellent的定义和原题一样,问有多少excellent选手?,为了方便说明,我们设第一次竞赛排名依次为Ai(表示第一次竞赛的第i名是Ai), Ai号选手在第二次竞赛中的排名的为BAi(注意BAi与Ai的含义不同)。,【例题】 Team Selection (Balkan OI 2004 Day1),【降维思路】,这样的子问题做法仍然可以参照改进三:,for(X从第一次竞赛的第1名到第一次竞赛的第N名) for(Y枚举当前已知的excellent) 判断Y是否比X better,【例题】 Team Selection (Balkan OI 2004 Day1),【降维思路】,这样的子问题做法仍然可以参照改进三:,for(X从第一次竞赛的第1名到第一次竞赛的第N名) for(Y枚举当前已知的excellent) 判断Y是否比X better,A1 A2 A3 A4 A5 A6 A7,第1次竞赛:,Excellent:,A1,【例题】 Team Selection (Balkan OI 2004 Day1),【降维思路】,这样的子问题做法仍然可以参照改进三:,for(X从第一次竞赛的第1名到第一次竞赛的第N名) for(Y枚举当前已知的excellent) 判断Y是否比X better,A1 A2 A3 A4 A5 A6 A7,第1次竞赛:,Excellent:,A1,【例题】 Team Selection (Balkan OI 2004 Day1),【降维思路】,这样的子问题做法仍然可以参照改进三:,for(X从第一次竞赛的第1名到第一次竞赛的第N名) for(Y枚举当前已知的excellent) 判断Y是否比X better,A1 A2 A3 A4 A5 A6 A7,第1次竞赛:,Excellent:,A1 A2,【例题】 Team Selection (Balkan OI 2004 Day1),【降维思路】,这样的子问题做法仍然可以参照改进三:,for(X从第一次竞赛的第1名到第一次竞赛的第N名) for(Y枚举当前已知的excellent) 判断Y是否比X better,A1 A2 A3 A4 A5 A6 A7,第1次竞赛:,Excellent:,A1 A2,【例题】 Team Selection (Balkan OI 2004 Day1),【降维思路】,这样的子问题做法仍然可以参照改进三:,for(X从第一次竞赛的第1名到第一次竞赛的第N名) for(Y枚举当前已知的excellent) 判断Y是否比X better,A1 A2 A3 A4 A5 A6 A7,第1次竞赛:,Excellent:,A1 A2 A3,【例题】 Team Selection (Balkan OI 2004 Day1),【降维思路】,这样的子问题做法仍然可以参照改进三:,for(X从第一次竞赛的第1名到第一次竞赛的第N名) for(Y枚举当前已知的excellent) 判断Y是否比X better,A1 A2 A3 A4 A5 A6 A7,第1次竞赛:,Excellent:,A1 A2 A3,【例题】 Team Selection (Balkan OI 2004 Day1),【降维思路】,这样的子问题做法仍然可以参照改进三:,for(X从第一次竞赛的第1名到第一次竞赛的第N名) for(Y枚举当前已知的excellent) 判断Y是否比X better,A1 A2 A3 A4 A5 A6 A7Ai,第1次竞赛:,Excellent:,A1 A2 A3 Ai-1,Ai只要比A1A2Ai-1任何一个大就不是Excellent,【例题】 Team Selection (Balkan OI 2004 Day1),Ai只要比A1A2Ai-1任何一个大就不是Excellent,比较min(Aj)与Ai,改进三 对于两次竞赛的情况,当X=Ai时,设besti=min(BAj)(ji),则BAi只需要与besti比较即可。,【降维思路】,【例题】 Team Selection (Balkan OI 2004 Day1),【降维思路】,降维思路小结 在这次分析中,我们从两次竞赛简化后的问题出发,通过简单的观察和思考,得出了改进的算法,但是优化后的算法要应用到三维的情况还有很长的路要走。,【例题】 Team Selection (Balkan OI 2004 Day1),
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号