ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:25.05KB ,
资源ID:10034190      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10034190.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(算法大全.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

算法大全.docx

1、算法大全算法大全一、数论算法1求两数的最大公约数functiongcd(a,b:integer):integer;beginifb=0thengcd:=aelsegcd:=gcd(b,amodb);end;2求两数的最小公倍数functionlcm(a,b:integer):integer;beginifa0doinc(lcm,a);end;3素数的求法A.小范围内判断一个数是否为质数:functionprime(n:integer):Boolean;varI:integer;beginforI:=2totrunc(sqrt(n)doifnmodI=0thenbeginprime:=false

2、;exit;end;prime:=true;end;B.判断longint范围内的数是否为素数(包含求50000以内的素数表):proceduregetprime;vari,j:longint;p:array1.50000ofboolean;beginfillchar(p,sizeof(p),true);p1:=false;i:=2;whilei50000dobeginifpithenbeginj:=i*2;whilej=xthenbreakelseifxmodpri=0thenexit;prime:=true;end;prime二、图论算法1最小生成树A.Prim算法:procedurepr

3、im(v0:integer);varlowcost,closest:array1.maxnofinteger;i,j,k,min:integer;beginfori:=1tondobeginlowcosti:=costv0,i;closesti:=v0;end;fori:=1ton-1dobegin寻找离生成树最近的未加入顶点kmin:=maxlongint;forj:=1tondoif(lowcostjmin)and(lowcostj0)thenbeginmin:=lowcostj;k:=j;end;lowcostk:=0;将顶点k加入生成树生成树中增加一条新的边k到closestk修正各点

4、的lowcost和closest值forj:=1tondoifcostk,jlwocostjthenbeginlowcostj:=costk,j;closestj:=k;end;end;end;primB.Kruskal算法:(贪心)按权值递增顺序删去图中的边,若不形成回路则将此边加入最小生成树。functionfind(v:integer):integer;返回顶点v所在的集合vari:integer;begini:=1;while(i=n)and(notvinvseti)doinc(i);ifi0dobegini:=find(eq.v1);j:=find(eq.v2);ifijthenbe

5、gininc(tot,eq.len);vseti:=vseti+vsetj;vsetj:=;dec(p);end;inc(q);end;writeln(tot);end;2.最短路径A.标号法求解单源点最短路径:vara:array1.maxn,1.maxnofinteger;b:array1.maxnofinteger;bi指顶点i到源点的最短路径mark:array1.maxnofboolean;procedurebhf;varbest,best_j:integer;beginfillchar(mark,sizeof(mark),false);mark1:=true;b1:=0;1为源点r

6、epeatbest:=0;fori:=1tondoIfmarkithen对每一个已计算出最短路径的点forj:=1tondoif(notmarkj)and(ai,j0)thenif(best=0)or(bi+ai,j0thenbeginbbest_j:=best;markbest_j:=true;end;untilbest=0;end;bhfB.Floyed算法求解所有顶点对之间的最短路径:procedurefloyed;beginforI:=1tondoforj:=1tondoifaI,j0thenpI,j:=IelsepI,j:=0;pI,j表示I到j的最短路径上j的前驱结点fork:=1

7、tondo枚举中间结点fori:=1tondoforj:=1tondoifai,k+aj,kai,jthenbeginai,j:=ai,k+ak,j;pI,j:=pk,j;end;end;C.Dijkstra算法:vara:array1.maxn,1.maxnofinteger;b,pre:array1.maxnofinteger;prei指最短路径上I的前驱结点mark:array1.maxnofboolean;proceduredijkstra(v0:integer);beginfillchar(mark,sizeof(mark),false);fori:=1tondobegindi:=a

8、v0,i;ifdi0thenprei:=v0elseprei:=0;end;markv0:=true;repeat每循环一次加入一个离1集合最近的结点并调整其他结点的参数min:=maxint;u:=0;u记录离1集合最近的结点fori:=1tondoif(notmarki)and(dimin)thenbeginu:=i;min:=di;end;ifu0thenbeginmarku:=true;fori:=1tondoif(notmarki)and(au,i+dudi)thenbegindi:=au,i+du;prei:=u;end;end;untilu=0;end;3.计算图的传递闭包Pro

9、cedureLonglink;VarT:array1.maxn,1.maxnofboolean;BeginFillchar(t,sizeof(t),false);Fork:=1tondoForI:=1tondoForj:=1tondoTI,j:=tI,jor(tI,kandtk,j);End;4无向图的连通分量A.深度优先proceduredfs(now,color:integer);beginfori:=1tondoifanow,iandci=0thenbegin对结点I染色ci:=color;dfs(I,color);end;end;B宽度优先(种子染色法)5关键路径几个定义:顶点1为源点

10、,n为汇点。a.顶点事件最早发生时间Vej,Vej=maxVej+wI,j,其中Ve(1)=0;b.顶点事件最晚发生时间Vlj,Vlj=minVljwI,j,其中Vl(n)=Ve(n);c.边活动最早开始时间EeI,若边I由表示,则EeI=Vej;d.边活动最晚开始时间ElI,若边I由表示,则ElI=Vlkwj,k;若Eej=Elj,则活动j为关键活动,由关键活动组成的路径为关键路径。求解方法:a.从源点起topsort,判断是否有回路并计算Ve;b.从汇点起topsort,求Vl;c.算Ee和El;6拓扑排序找入度为0的点,删去与其相连的所有边,不断重复这一过程。例寻找一数列,其中任意连续p

11、项之和为正,任意q项之和为负,若不存在则输出NO.7.回路问题Euler回路(DFS)定义:经过图的每条边仅一次的回路。(充要条件:图连同且无奇点)Hamilton回路定义:经过图的每个顶点仅一次的回路。一笔画充要条件:图连通且奇点个数为0个或2个。9判断图中是否有负权回路Bellman-ford算法xI,yI,tI分别表示第I条边的起点,终点和权。共n个结点和m条边。procedurebellman-fordbeginforI:=0ton-1dodI:=+infinitive;d0:=0;forI:=1ton-1doforj:=1tomdo枚举每一条边ifdxj+tjdyjthendyj:=

12、dxj+tj;forI:=1tomdoifdxj+tjdyjthenreturnfalseelsereturntrue;end;10第n最短路径问题*第二最短路径:每举最短路径上的每条边,每次删除一条,然后求新图的最短路径,取这些路径中最短的一条即为第二最短路径。*同理,第n最短路径可在求解第n-1最短路径的基础上求解。color=#0000FF三、背包问题/color*部分背包问题可有贪心法求解:计算Pi/Wi数据结构:wi:第i个背包的重量;pi:第i个背包的价值;10-1背包:每个背包只能使用一次或有限次(可转化为一次):A.求最多可放入的重量。NOIP2001装箱问题有一个箱子容量为v

13、(正整数,ov20000),同时有n个物品(on30),每个物品有一个体积(正整数)。要求从n个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。l搜索方法proceduresearch(k,v:integer);搜索第k个物品,剩余空间为vvari,j:integer;beginifv=bestthenexit;sn为前n个物品的重量和ifkwkthensearch(k+1,v-wk);search(k+1,v);end;end;lDPFI,j为前i个物品中选择若干个放入使其体积正好为j的标志,为布尔型。实现:将最优化问题转化为判定性问题fI,j=fi-1,j-wi(wI=j0thenif

14、j+now=ntheninc(cj+now,aj);a:=c;end;2可重复背包A求最多可放入的重量。FI,j为前i个物品中选择若干个放入使其体积正好为j的标志,为布尔型。状态转移方程为fI,j=fI-1,jwI*k(k=1.jdivwI)B.求可以放入的最大价值。USACO1.2ScoreInflation进行一次竞赛,总时间T固定,有若干种可选择的题目,每种题目可选入的数量不限,每种题目有一个ti(解答此题所需的时间)和一个si(解答此题所得的分数),现要选择若干题目,使解这些题的总时间在T以内的前提下,所得的总分最大,求最大的得分。*易想到:fi,j=maxfi-k*wj,j-1+k*

15、pj(0=k=0ThenBegint:=problemj.point+fi-problemj.time;IftfiThenfi:=t;End;Writeln(fM);End.C.求恰好装满的情况数。Ahoi2001Problem2求自然数n本质不同的质数和的表达式的数目。思路一,生成每个质数的系数的排列,在一一测试,这是通法。proceduretry(dep:integer);vari,j:integer;begincal;此过程计算当前系数的计算结果,now为结果ifnownthenexit;剪枝ifdep=l+1thenbegin生成所有系数cal;ifnow=ntheninc(tot);

16、exit;end;fori:=0tondivprdepdobeginxsdep:=i;try(dep+1);xsdep:=0;end;end;思路二,递归搜索效率较高proceduretry(dep,rest:integer);vari,j,x:integer;beginif(rest0thenfork:=1tondivnowdoifj+now*k=ntheninc(cj+now*k,aj);a:=c;end;mainbeginread(now);读入第一个物品的重量i:=0;ai为背包容量为i时的放法总数whilei=ndobeginai:=1;inc(i,now);end;定义第一个物品重

17、的整数倍的重量a值为1,作为初值fori:=2tovdobeginread(now);update;动态更新end;writeln(an);四、排序算法1.快速排序:procedureqsort(l,r:integer);vari,j,mid:integer;begini:=l;j:=r;mid:=a(l+r)div2;将当前序列在中间位置的数定义为中间数repeatwhileaimiddodec(j);在右半部分寻找比中间数小的数ifij;ifljthenqsort(l,j);若未到两个数的边界,则递归搜索左右区间ifirthenqsort(i,r);end;sortB.插入排序:思路:当前a1.ai-1已排好序了,现要插入ai使a1.ai有序。procedureinsert_sort;vari,j:integer;beginfori:=2tondobegina0:=ai;j:=i-1;whilea0ajthenswap(ai,aj);end;D.冒泡排序procedurebubble_sort;va

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1