1 / 16
文档名称:

算法合集之《论对题目中算法的选择》.pptx

格式:pptx   大小:626KB   页数:16页
下载后只包含 1 个 PPTX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

算法合集之《论对题目中算法的选择》.pptx

上传人:wxq362 2023/1/2 文件大小:626 KB

下载得到文件列表

算法合集之《论对题目中算法的选择》.pptx

文档介绍

文档介绍:该【算法合集之《论对题目中算法的选择》 】是由【wxq362】上传分享,文档一共【16】页,该文档可以免费在线阅读,需要了解更多关于【算法合集之《论对题目中算法的选择》 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。论对算法的选择
上海市复旦附中 张云亮
第一页,共十六页。
一、引言
计算机竞赛是一项对选手计算机知识、编程能力的综合测试,在平时的训练之中,我们一般都会精益求精,设法想出最好的算法,但是在竞赛的时候,时间和心理状态都是不一样的,如何在竞赛中编出能得分尽量多的程序,对各种算法的灵活运用是很重要的。
第二页,共十六页。
二、算法的复杂度
我在这里所说的复杂度,包括编程复杂度,时间复杂度,空间复杂度,因为在竞赛几个小时的时间里,编程复杂度就不容忽视,知道算法但是程序没完成,这是最不理想的情况,对源程序的最基本的质量要求是正确性和可靠性,只要保证在这两点的情况下,各种算法都是好算法。所以在这三个复杂度都考虑的情况下,找到最适宜的算法是必要的。
第三页,共十六页。
三、对于一些题目的思路
在我们做题的时候,我们先想出的算法不一定是最好的算法,但不是说明它是不好的算法,所以,在我们想出一种算法的时候,要考虑一下它的可行性,如果可行的话,不如自己先把该算法编一编,可以锻炼自己编那些非标准算法的能力,这样对自己面对新颖题型的时候是会有好处的。
第四页,共十六页。
例1
[问题描述]
输入:
一个正整数n,以及整数数列A1,A2,A3……,An。
一个正整数m,以及整数数列B1,B2,B3……,Bm。
其中
(1<=n<=106,1<=Ai<=106,1<=m<=1000,1<=Bi<=106)
输出:
一共m行,每行一个整数,第i行所输出的数表示数列{A}中小于等于Bi的数的数目。
第五页,共十六页。
例1
[算法分析]
首先,我们便注意到了n与m的范围的差距。
本算法运用了两个数组
L[1..1000000]
(记录数列{A}中取值为k的数有L[k]个)
V[1..1000]
(记录数列{A}中取值在[(k-1)*1000+1,k*1000]的数有V[k]个)
第六页,共十六页。
例1
[算法分析]
程序流程:
预处理:对数组于L,V进行清零。
读入n,依次读入Ai。对于每个Ai,
得出k(k为整数),使Ai在区间[(k-1)*1000+1,k*1000]内
L[Ai]++,V[k]++
读入m,依次读入Bi。对每个Bi,
得出k(k为整数),使Bi在区间[(k-1)*1000+1,k*1000]内
设{A}中小于Bi的数有S个,易知
S=
输出S
第七页,共十六页。
例1
[复杂度分析]
本算法
计算每个S的值最多需要运算操作1000+1000=2000次。
每次将一个Ai记录的操作需要2次
线段树
计算每个S的值最多需要运算操作(n+m)*log2G
每次将一个Ai记录的操作需要(n+m)*log2G
两种算法的复杂度比较
其中线段数对于计算S的值与记录一个Ai都只要在(n+m)*log2G的运算次数下完成
线段树 本算法 (最坏情况)
(n+m)*log2Gn*2+m*2000 (其中G=106)
第八页,共十六页。
例2、营业额统计
[问题描述]
公司的账本上记录了公司成立以来每天的营业额。分析营业情况是项相当复杂的工作,营业额会出现一定的波动,当然一定的波动是能够接受的,但营业额突变得很高或是很低,这就证明公司此时的经营状况出现了问题。经济管理学上定义了一种最小波动值来衡量这种情况:
该天的最小波动值
当最小波动值越大时,就说明营业情况越不稳定。
而分析整个公司的从成立到现在营业情况是否稳定,只需要把每一天的最小波动值加起来就可以了。本程序任务就是编写一个程序来计算这一个值。第一天的最小波动值为第一天的营业额。
第九页,共十六页。
例2、营业额统计
[问题描述]
输入和输出:
输入:
输入文件第一行为正整数,表示该公司从成立一直到现在的天数,接下来的n行每行有一个正整数,表示第i天公司的营业额。
输出:
输出文件仅有一个正整数,即,它小于231。
输入输出样例:
第十页,共十六页。