ACM算法

ACM算法

一、数论算法
1
.求两数的最大公约数
2
.求两数的最小公倍数
3
.素数的求法
A.
小范围内判断一个数是否为质数:
B.
判断longint范围内的数是否为素数(包含求50000以内的素数表):

二、图论算法
1
.最小生成树
A.Prim
算法:
B.Kruskal
算法:(贪心)
按权值递增顺序删去图中的边,若不形成回路则将此边加入最小生成树。
2.
最短路径
A.
标号法求解单源点最短路径:
B.Floyed
算法求解所有顶点对之间的最短路径:
C. Dijkstra
算法:
3.
计算图的传递闭包
4
.无向图的连通分量
A.
深度优先
B
宽度优先(种子染色法)
5
.关键路径
几个定义: 顶点1为源点,n为汇点。
a.
顶点事件最早发生时间Ve[j], Ve [j] = max{ Ve [j] + w[I,j] },其中Ve (1) = 0;
b.
顶点事件最晚发生时间 Vl[j], Vl [j] = min{ Vl[j] – w[I,j] },其中 Vl(n) = Ve(n);
c.
边活动最早开始时间 Ee[I], 若边I<j,k>表示,则Ee[I] = Ve[j];
d.
边活动最晚开始时间 El[I], 若边I<j,k>表示,则El[I] = Vl[k] – w[j,k];
Ee[j] = El[j] ,则活动j为关键活动,由关键活动组成的路径为关键路径。
求解方法:
a.
从源点起topsort,判断是否有回路并计算Ve;
b.
从汇点起topsort,Vl;
c.
Ee El;
6
.拓扑排序
找入度为0的点,删去与其相连的所有边,不断重复这一过程。
寻找一数列,其中任意连续p项之和为正,任意q 项之和为负,若不存在则输出NO.
7.
回路问题
Euler
回路(DFS)
定义:经过图的每条边仅一次的回路。(充要条件:图连同且无奇点)
Hamilton
回路
定义:经过图的每个顶点仅一次的回路。
一笔画
充要条件:图连通且奇点个数为0个或2个。
9
.判断图中是否有负权回路 Bellman-ford 算法
x[I],y[I],t[I]
分别表示第I条边的起点,终点和权。共n个结点和m条边。
10
.第n最短路径问题
*
第二最短路径:每举最短路径上的每条边,每次删除一条,然后求新图的最短路径,取这些路径中最短的一条即为第二最短路径。
*
同理,第n最短路径可在求解第n-1最短路径的基础上求解。

三、背包问题
*
部分背包问题可有贪心法求解:计算Pi/Wi
数据结构:
w[i]:
i个背包的重量;
p[i]:
i个背包的价值;
1
0-1背包: 每个背包只能使用一次或有限次(可转化为一次)
A.
求最多可放入的重量。
B.
求可以放入的最大价值。
F[I,j]
为容量为I时取前j个背包所能获得的最大价值。
F [i,j] = max { f [ i – w [ j ], j-1] + p [ j ], f[ i,j-1] }
C.
求恰好装满的情况数。
2
.可重复背包
A
求最多可放入的重量。
F[I,j]
为前i个物品中选择若干个放入使其体积正好为j的标志,为布尔型。
状态转移方程为
f[I,j] = f [ I-1, j – w[I]*k ] (k=1.. j div w[I])
B.
求可以放入的最大价值。
f[i,j] = max { f [i- k*w[j], j-1] + k*p[j] } (0<=k<= i div w[j])
其中f[i,j]表示容量为i时取前j种背包所能达到的最大值。
C.
求恰好装满的情况数。
Ahoi2001 Problem2
求自然数n本质不同的质数和的表达式的数目。
思路一,生成每个质数的系数的排列,在一一测试,这是通法。
思路二,递归搜索效率较高

思路三:可使用动态规划求解
四、排序算法
1.
快速排序:
B.
插入排序:
思路:当前a[1]..a[i-1]已排好序了,现要插入a[i]使a[1]..a[i]有序。
C.
选择排序:
D.
冒泡排序
E.
堆排序:
F.
归并排序
G.
基数排序
思想:对每个元素按从低位到高位对每一位进行一次排序
五、高精度计算
高精度数的定义:
1
.高精度加法
2
.高精度减法
3
.高精度乘以低精度
4
.高精度乘以高精度
5
.高精度除以低精度
6
.高精度除以高精度

六、 树的遍历
1
.已知前序中序求后序
2
.已知中序后序求前序
3
.已知前序后序求中序的一种

进制转换
1
任意正整数进制间的互化
n取余
2
实数任意正整数进制间的互化
n取整
3
负数进制:
设计一个程序,读入一个十进制数的基数和一个负进制数的基数,并将此十进制数转换为此负 进制下的数:-R{-2-3-4,....-20}
全排列与组合的生成
1
排列的生成:(1..n
2
组合的生成(1..n中选取k个数的所有方案)

.查找算法
1
折半查找
2
树形查找
二叉排序树:每个结点的值都大于其左子树任一结点的值而小于其右子树任一结点的值。
查找

十、贪心
*
会议问题
1 n个活动每个活动有一个开始时间和一个结束时间,任一时刻仅一项活动进行,求满足活动数最多的情况。
解:按每项活动的结束时间进行排序,排在前面的优先满足。
2)会议室空闲时间最少。
3)每个客户有一个愿付的租金,求最大利润。
4)共R间会议室,第i个客户需使用i间会议室,费用相同,求最大利润。
十一、回溯法框架
1. n
皇后问题
2.Hanoi Tower h(n)=2*h(n-1)+1 h(1)=1

十二、DFS框架

十三、BFS框架

十五、数据结构相关算法
1
.链表的定位函数

2.单链表的插入操作
3
.单链表的删除操作
4
.双链表的插入操作(插入新结点q
5
.双链表的删除操作


原文链接:http://old.blog.edu.cn/user3/Hailer/archives/2006/1545396.shtml

你可能感兴趣的:(ACM算法)