欢迎来到天天文库
浏览记录
ID:58894170
大小:303.00 KB
页数:55页
时间:2020-09-30
《ACM算法搜索入门ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、ACM程序设计计算机学院刘春英8/27/20211今天,你了吗?AC8/27/20212每周一星(7):NPEG-MP4&&OPPOMP48/27/20213第八讲一招制敌之搜索题8/27/20214根据“信息学初学者之家”网站的统计,Ural(俄罗斯的Ural州立大学的简称,那里设立了一个UralOnlineProblemSet,并且支持OnlineJudge。)的题目类型大概呈如下的分布:搜索动态规划贪心构造图论约10%约15%约5%约5%约10%计算几何纯数学问题数据结构其它约5%约20%约5%约25%统计信息:8/2
2、7/20215搜索题特点分析:题意容易理解算法相对固定编程有路可循竞赛必备知识8/27/20216——摘自《ACM竞赛之新人向导》“算法中最基本和常用的是搜索,主要是回溯和分支限界法的使用。这里要说的是,有些初学者在学习这些搜索基本算法是不太注意剪枝,这是十分不可取的,因为所有搜索的题目给你的测试用例都不会有很大的规模,你往往察觉不出程序运行的时间问题,但是真正的测试数据一定能过滤出那些没有剪枝的算法。实际上参赛选手基本上都会使用常用的搜索算法,题目的区分度往往就是建立在诸如剪枝之类的优化上了。”引言8/27/20217什么是
3、搜索算法呢?搜索算法是利用计算机的高性能来有目的地穷举一个问题的部分或所有的可能情况,从而求出问题的解的一种方法。搜索过程实际上是根据初始条件和扩展规则构造一棵解答树并寻找符合目标状态的节点的过程。8/27/20218预热一下:二分查找2345681220324565748695100headmidtail8/27/20219查找示意图:A[1]~A[15]A[1]~A[7]A[9]~A[15]A[1]~A[3]A[5]~A[7]A[1]~A[1]A[3]~A[3]……8/27/202110思考:1、在一百万个元素里查找某个元
4、素大约需要比较多少次?2、时间复杂度:O(logN)8/27/202111举例分析从简单的字符串搜索讲起8/27/202112HDOJ_1238Substrings题目链接SampleInput23ABCDBCDFFBRCD2roseorchidSampleOutput228/27/202113题目分析:这是一道入门级别的搜索题,基本思想比较简单,但是如果用最朴素的算法,可能会超时如何降低算法的复杂度呢?下面的算法如何:先将字符串按长度从短到长排序,枚举最短的字符串的子串,判断是否都是别的字符串的子串,求出最大
5、长度即可。8/27/202114说明:本题除了可以练习基本搜索算法,也是练习字符串处理的好题目,题中用到的相关知识点有:求反串求子串字符串查找求字符串长度强烈推荐!!8/27/202115再来一道数值型搜索题8/27/202116HDOJ_1239CallingExtraterrestrialIntelligenceAgain题目链接SampleInput5129999999999916805161970112002411000SampleOutput223133132373434337538/27/2021
6、17获取有用信息a.给定整数m,a,b(47、,将p*q与当前最大值比较,判断,保存8/27/202119面临的问题:超时!从1—100000的质数运算约为1e+8,而这只是准备工作。因此,如不加以分析简化此题无法在规定时间内出解8/27/202120深入分析考虑大于10000的某个质数,不妨设为Q,另一个质数为P,则:然而,这是最小的范围吗?p,q的范围其实可在2—50000(why?)如果P<10,P/Q<0.001如果P>10,P*Q>100000而考虑到a,b的取值范围(1<=a<=b<=1000)可知min(a/b)=0.001同时,要求:p*q<=m<=1008、000所以无论如何质数都不能超过10000。(事实上,不会超过9091)8/27/202121搜索时的技巧:搜索顺序很重要。建议从大往小搜(num:质数的个数)for(i=num-1;i>=0;i--)for(j=i;j<=num-1;j++)……注意剪枝:If(a[j]>m
7、,将p*q与当前最大值比较,判断,保存8/27/202119面临的问题:超时!从1—100000的质数运算约为1e+8,而这只是准备工作。因此,如不加以分析简化此题无法在规定时间内出解8/27/202120深入分析考虑大于10000的某个质数,不妨设为Q,另一个质数为P,则:然而,这是最小的范围吗?p,q的范围其实可在2—50000(why?)如果P<10,P/Q<0.001如果P>10,P*Q>100000而考虑到a,b的取值范围(1<=a<=b<=1000)可知min(a/b)=0.001同时,要求:p*q<=m<=100
8、000所以无论如何质数都不能超过10000。(事实上,不会超过9091)8/27/202121搜索时的技巧:搜索顺序很重要。建议从大往小搜(num:质数的个数)for(i=num-1;i>=0;i--)for(j=i;j<=num-1;j++)……注意剪枝:If(a[j]>m
此文档下载收益归作者所有