没有合适的资源?快使用搜索试试~ 我知道了~
信息学奥赛算法基础篇 (2).docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 114 浏览量
2023-03-07
20:28:35
上传
评论
收藏 323KB DOCX 举报
温馨提示
试读
33页
/
资源推荐
资源详情
资源评论
1
作者:avex79 出自:信息学奥赛辅导教育博客
学习过程序设计的人对算法这个词并不陌生,从广义上讲,算法是指为解决一个问题而
采用的方法和步骤;从程序计设的角度上讲,算法是指利用程序设计语言的各种语句,为解
决特定的问题而构成的各种逻辑组合。
我们在编写程序的过程就是在实施某种算法,因此程序设计的实质就是用计算机语言构
造解决问题的算法。算法是程序设计的灵魂,一个好的程序必须有一个好的算法,一个没有
有效算法的程序就像一个没有灵魂的躯体。
算法具有五个特征:
一个算法应包括有限的运算步骤,执行了有穷的操作后将终止运算,
不能是个死循环;
算法的每一步骤必须有确切的定义,读者理解时不会产生二义性。并
且,在任何条件下,算法只有唯一的一条执行路径,对于相同的输入只能得出相同的输出。
如在算法中不允许有“计算 8/0”或“将 7 或 8 与 x 相加”之类的运算,因为前者的计算结果是
什么不清楚,而后者对于两种可能的运算应做哪一种也不知道。
3、输入:
一个算法有 0 个或多个输入,以描述运算对象的初始情况,所谓 0 个输入
是指算法本身定义了初始条件。如在 5 个数中找出最小的数,则有 5 个输入。
4、输出:
一个算法有一个或多个输出,以反映对输入数据加工后的结果,这是算法
设计的目的。它们是同输入有着某种特定关系的量。如上述在 5 个数中找出最小的数,它的
出输出为最小的数。如果一个程序没有输出,这个程序就毫无意义了;
算法中每一步运算应该是可行的。算法原则上能够精确地运行,而且
人能用笔和纸做有限次运算后即可完成。
一是看算法运行所占用的
时间
;我们用
时间复杂度
来衡量,例如:在以下 3 个程序中,
x:=x+1
含基本操作“x 增 1”的语句 x:=x+1 的出现的次数分别为 1,n 和 n
2
则这三个程序段的时
间复杂度分别为 O(1),O(n),O(n
2
),分别称为常量阶、线性阶和平方阶。在算法时间
复杂度的表示中,还有可能出现的有:对数阶 O(log n),指数阶 O(2
n
)等。在 n 很大时,不
同数量级的时间复杂度有:O(1)< O(log n)<O(n)< O(nlog n)<O(n
2
) <O(n
3
) <O(2
n
),很显然,
2
作者:avex79 出自:信息学奥赛辅导教育博客
指数阶的算法不是一个好的算法。
。由于当今计算机硬件技术
发展很快,程序所能支配的自由空间一般比较充分,所以空间复杂度就不如时间复杂度那么
重要了,有许多问题人们主要是研究其算法的时间复杂度,而很少讨论它的空间耗费。
时间复杂性和空间复杂性在一定条件下是可以
相互转化
的。在中学生信息学奥赛中,
对程序的运行时间作出了严格的限制,如果运行时间超出了限定就会判错,因此在设计算法
时首先要考虑的是时间因素,必要时可以以
牺牲空间来换取时间
,动态规划法就是一种
以牺牲空间换取时间的有效算法。对于空间因素,视题目的要求而定,一般可以不作太多的
考虑。
我们通过一个简单的数值计算问题,来比较两个不同算法的效率(在这里只比较时间复
杂度)。
例:求 N!所产生的数后面有多少个 0(中间的 0 不计)。
算法一:从1 乘到 n,每乘一个数判断一次,若后面有0 则去掉后面的 0,并记下0 的个数。
为了不超出数的表示范围,去掉与生成 0 无关的数,只保留有效位数,当乘完 n 次后就得到
0 的个数。(pascal 程序如下)
begin
t:=0; sum:=1;
readln(n);
begin
sum:=sum*i;
begin
end;
end;
writeln(t:6);
算法二:此题中生成O 的个数只与含 5 的个数有关,n!的分解数中含5 的个数就等于
var t,n:integer;
begin
3
作者:avex79 出自:信息学奥赛辅导教育博客
readln(n);
t:=0;
repeat
writeln(t:6);
分析对比两种算法就不难看出,它们的时间复杂度分别为 O(N)、O(logN),算法二
的执行时间远远小于算法一的执行时间。
在信息学奥赛中,其主要任务就是设计一个有效的算法,去求解所给出的问题。如果仅
仅学会一种程序设计语言,而没学过算法的选手在比赛中是不会取得好的成绩的,选手水平
的高低在于能否设计出好的算法。
下面,我们根据全国分区联赛大纲的要求,一起来探讨信息学奥赛中的基本算法。
4
作者:avex79 出自:信息学奥赛辅导教育博客
对于 NOIP,基础是相当重要的,在 3 个小时之内做完 4 道题,那么就要求我们有相当
快的速度。特别是对于一些简单的、常用的算法模块,一定要要熟练掌握并灵活运用。由于
NOIP 是一个比较基础的比赛,因此基本算法的掌握尤为重要,所以要求能够把这些基本的
模块快速、准确的移植到不同的程序中,才能在稳中取胜。
基本算法模块中最重要的是基本程序框架,也就是说,要养成适合于自己的程序风格,
这样对于程序编写的速度与程序的准确度都有较大的提高。
模块目录
1. 选择排序
2. 插入排序
3. 冒泡排序
4. 快速排序
6. 归并排序
7. 线性时间排序
二、 高精度
1. 高精度比较
2. 高精度加法
3. 高精度减法
4. 单精度乘法
5. 高精度乘法
6. 单精度除法
7. 高精度除法
8. 进制转换
1. 欧几里德算法
2. 扩展欧几里德
3. 求最小公倍数
4. 求解线形同余方程
5. 素数的判断
6. 素数的生成
四、 排列组合
1. 排列生成算法
5
作者:avex79 出自:信息学奥赛辅导教育博客
2. 组合生成算法
1. 图的读入
6. 最小生成树
7. 最短路径
1. 装满背包
剩余32页未读,继续阅读
资源评论
不吃鸳鸯锅
- 粉丝: 8292
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功