经典基本算法模块

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

复赛算法模块

信息学奥赛组

对于NOIP,基础是相当重要的,在3个小时之内做完4道题,那么就要求我们有相当快的速度。特别是对于一些简单的、常用的算法模块,一定要要熟练掌握并灵活运用。由于NOIP是一个比较基础的比赛,因此基本算法的掌握尤为重要,所以要求能够把这些基本的模块快速、准确的移植到不同的程序中,才能在稳中取胜

基本算法模块中最重要的是基本程序框架,也就是说,要养成适合于自己的程序风格,这样对于程序编写的速度与程序的准确度都有较大的提高。

小议竞赛的准备和考试技巧

1、良好的心态。无论竞赛多么重要,都不要在考试的时候考虑考试之前或以后的事,这很重要……

2、充足的睡眠和营养。竞赛之前睡好觉,吃好饭,多吃甜食(据我们老师说在吃甜食后15分钟和2小时会各出现一次血糖高峰,会有比较好的竞技状态)。还有,宁可撒尿也不要口渴……口渴会严重影响思路……而尿素有兴奋作用,有利无害……

3、正确的时间安排。一般来说应该先想完所有的题再开始做,但有的题想不出来的时候一定要给想出来的题留出时间。

4、算法的学习。一般的DFS/BFS、贪心、各种DP、二分法、排序、lr论文中的各种奇特算法、最短路、最长路、图的DFS/BFS、最大匹配,最大最小匹配、最佳匹配、差分限制系统、最长不xx子序列、高斯消元、数论算法……

5、数据结构的学习。Hash、并查集、邻接表、边表、堆、树状数组和线段树及它们的多维形式、链表、单词查找树……

6、关于混分:超时的搜索/DP往往能比错误的贪心得到更多的分。

7、数学很重要。比如母函数……

8、专用的方法胜于通用的方法。

9、好的题目往往不能直接用经典算法解决。

10、真正难题的标程往往很短。

11、如果n很大,用汇编写的O(n^2)的程序绝对不如用QB写的O(n)的程序快。

12、如果n很小,利用压缩存储提高速度的O(n^2)的算法有可能比一般的O(n)算法快。

13、如果一个数学问题很复杂,那么看结果找规律有可能比数学推导快。

14、不要总把logn忽略掉。

15、即使是多项式算法,有时也可以加入很有效的剪枝。

16、做一道好题胜过做n道烂题,但如果不做烂题,可能会影响做好题的速度。

模块目录页码一、排序 (4)

1.选择排序

2.插入排序

3.冒泡排序

4.快速排序

5.堆排序

6.归并排序

7.线性时间排序

二、高精度 (6)

1.高精度比较

2.高精度加法

3.高精度减法

4.单精度乘法

5.高精度乘法

6.单精度除法

7.高精度除法

8.进制转换

三、数论 (10)

1.欧几里德算法

2.扩展欧几里德

3.求最小公倍数

4.求解线形同余方程

5.素数的判断

6.素数的生成

四、排列组合 (12)

1.排列生成算法

2.组合生成算法

3.排列按序生成法

4.排列字典序生成法

五、图论 (15)

1.图的读入

2.深度优先搜索

3.广度优先搜索

4.强连同分量

5.拓扑排序

6.最小生成树

7.最短路径

六、背包问题 (21)

1.装满背包

2.一维价值最大背包

3.二位价值最大背包

一、排序算法

var

a:array[1..maxn]of longint;——排序对象

1.选择排序——Select_sort

procedure select_sort;

begin

for i:=1 to n-1 do

for j:=i+1 to n do

if a[i]>a[j] then

begin temp:=a[i];a[i]:=a[j];a[j]:=temp;end;

end;

2.插入排序——Insert_sort

procedure insert_sort;

begin

for i:=2 to n do

begin

key:=a[i];j:=i-1;

while (key0) do begin a[j+1]:=a[j];dec(j);end;

a[j+1]:=key;

end;

end;

3.冒泡排序——Bubble_sort

procedure bubble_sort;

begin

for i:=1 to n-1 do

for j:=n downto i+1 do

if a[j]

begin temp:=a[j];a[j]:=a[j-1];a[j-1]:=temp;end;

end;

4.快速排序——Quick_sort

procedure qsort(s,t:longint);

var

i,j,x:longint;

begin

i:=s;j:=t;x:=a[(i+j)div 2];

repeat

while a[i]

while a[j]>x do dec(j);{找右边比他小的}

if i<=j then{交换}

begin

temp:=a[i];a[i]:=a[j];a[j]:=temp;

inc(i);dec(j);

end;

相关文档
最新文档