您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > ACM培训班课件(2013年春季)
20131《算法设计及其高效实现》周健ahjzhouatgmail.com电话:1525510383520112前言ACM/ICPC介绍34567820119前言ACM/ICPC介绍激情梦想成功10关于ACM/ICPC竞赛ACM竞赛是计算机学科领域最高级别的赛事;主要考查选手用算法+数据结构解决问题的能力;题量多,时间长,高手云集;洲际网络选拔赛-洲际现场赛-全球总决赛;亚洲区15个赛场,其中中国大陆5个;省程序设计竞赛;11安徽大学ACM07年开始参赛;08年获亚洲区合肥赛区铜奖获奖队员:吴翔,王汉,宋康09年获亚洲区武汉赛区铜奖获奖队员:吴翔,朱国锋,李东10年获亚洲区杭州赛区银奖获奖队员:朱国锋,朱学智,牛铮12组织结构与队员负责人:郑诚(副院长)指导老师:马猛,周健组织网站:icpc.ahu.edu.cn集训队专用实验室:笃南A21530平方,9台机器上课、讨论实验室:笃南A211120平方,30台机器左右13队员05级宋康(保研东南大学)06级宋克鑫(保研中国科学技术大学)07级吴翔(保研中国科学技术大学)08级朱国锋朱学智朱俊丁亚光牛铮崔晨阳周宝通吴翔(物理系)韩梁何学斌09级卢肖胡文翔王博岩14入队条件人文素质条件品德端正团队精神不接受急功近利、胸无大志、心理脆弱、自暴自弃、缺乏自理和自控能力、以个人利益为中心者技术条件有比较扎实的代码能力了解常用的算法设计方法有比较广博的知识面技术衡量指标同学评价在OJ上的活跃度,做题量月赛排名15队员选拔与淘汰选拔Step1.校赛Step2.ACM培训班,期末考试Step3.暑期集训接受优秀者自荐!淘汰入队半年后毫无进展者队员评价差者不服从指导老师安排者16AHCPC队选拔过程校程序设计竞赛赛初选赛ACM培训、日常训练暑期集训AHCPC队选拔赛1911年ACM/ICPC赛事3-7月区域邀请赛安徽省省赛校级月赛9月-11月中国区域赛(网络,现场)复旦大学西南石油大学福州师范大学大连理工大学北京邮电大学20开课目的交流学习提高发现高手21教学方法理论讲解题目剖析课后练习poj,zoj,topcoder,usacoAOJ:上课安排教师老队员23参考教材潘金贵等译《算法导论》(第二版)王晓东著《算法分析与设计》刘汝佳等著《算法艺术与信息学竞赛》NOI,IOI论文集24队员考核1.习题完成数2.月赛排名3.其他主动做题量4.期末考试201125第一部分算法分析基础26算法+数据结构=程序算法是指解决问题的一种方法或一个过程的良定义。算法是若干指令的有穷序列,满足性质:输入:有外部提供的量作为算法的输入。输出:算法产生至少一个量作为输出。确定性:组成算法的每条指令是清晰,无歧义的。有限性:算法中每条指令的执行次数是有限的,执行每条指令的时间也是有限的。27算法复杂性分析算法复杂性是算法运行所需要的计算机资源的量,需要时间资源的量称为时间复杂性,需要的空间资源的量称为空间复杂性。这个量应该只依赖于算法要解的问题的规模、算法的输入和算法本身的函数。如果分别用N、I和A表示算法要解问题的规模、算法的输入和算法本身,而且用C表示复杂性,那么,应该有C=F(N,I,A)。一般把时间复杂性和空间复杂性分开,并分别用T和S来表示,则有:T=T(N,I)和S=S(N,I)。(通常,让A隐含在复杂性函数名当中)281.4算法复杂性分析最坏情况下的时间复杂性:),(maxmaxINT(N)TNDI),(max1INetkiiiDIN),(*1INetkiii),(*INT最好情况下的时间复杂性:),(minminINT(N)TNDI),(min1INetkiiiDIN)~,(1INetkiii)~,(INT平均情况下的时间复杂性:NDIINTIP(N)T),()(avgNDIkiiiINetIP),()(1其中DN是规模为N的合法输入的集合;I*是DN中使T(N,I*)达到Tmax(N)的合法输入;是DN中使T(N,)达到Tmin(N)的合法输入;而P(I)是在算法的应用中出现输入I的概率。I~I~291.4算法复杂性分析算法复杂性在渐近意义下的阶:渐近意义下的记号:O、Ω、o、、设f(N)和g(N)是定义在正数集上的正函数。在下面的讨论中,对所有n,f(n)0,g(n)0。(1)紧渐近上界OO(g(n))={f(n)|存在正常数c和n0使得对所有nn0有:0f(n)cg(n)}(2)紧渐近下界(g(n))={f(n)|存在正常数c和n0使得对所有nn0有:0cg(n)f(n)}30(3)非紧渐进上界oo(g(n))={f(n)|对于任何正常数c0,存在正数n0使得对所有nn0有:0f(n)cg(n)}等价于f(n)/g(n)0,asn。(4)非紧渐进下界(g(n))={f(n)|对于任何正常数c0,存在正数n00使得对所有nn0有:0cg(n)f(n)}等价于f(n)/g(n),asn。f(n)(g(n))g(n)o(f(n))31(5)紧渐近确界()(g(n))={f(n)|存在正常数c1,c2和n0使得对所有nn0有:c1g(n)f(n)c2g(n)}定理1:(g(n))=O(g(n))(g(n))舍弃低阶项和最高阶项系数3233渐进复杂性的直观理解当输入规模趋向无穷大时,算法的运行时间只决定于算法运行时间表达式中的高阶项,低阶项相对来说就不重要了。34常见的描述算法复杂度的函数多项式函数p(n)=a0+a1n+a2n2+…+adnd;ad0;p(n)=(nd);kdp(n)=O(nk);kdp(n)=(nk);kdp(n)=o(nk);kdp(n)=(nk).35f(n)=O(nk)f(n)多项式有界;f(n)=O(1)f(n)c;36指数函数对于正整数m,n和实数a0:a0=1;a1=a;a-1=1/a;(am)n=amn;(am)n=(an)m;aman=am+n;a1an为单调递增函数;a1nb=o(an)推论:任何底大于1的指数函数比任何多项式函数增长得更快37对任意x有ex1+x;当|x|1时1+xex1+x+x2;ex=1+x+(x2),asx0;032!!3!21iixixxxxexnnenx1lim38(5)对数函数logn=log2n;lgn=log10n;lnn=logen;logkn=(logn)kl;loglogn=log(logn);fora0,b0,c0abbalog39baabcccloglog)(loganabnbloglogbaaccblogloglogaabblog)/1(logbaablog1logacbbcaloglog40|x|1forx-1,foranya0,,logbn=o(na).5432)1ln(5432xxxxxxxxxx)1ln(10loglim)2(loglimlogabnnabnnnn推论:任意正的多项式函数都比多项对数函数增长得更快41(6)阶乘函数Stirling’sapproximation00)!1(1!nnnnnnn321!nennnn11π2!42neennnnπ2!nnn121α1121)(!nnon)2(!nn)log()!log(nnn43算法分析中常见的复杂性函数44小规模数据45中等规模数据46函数增长和运行时间47其他常见函数和近似48算法复杂度分析方法例:顺序搜索算法templateclassTypeintseqSearch(Type*a,intn,Typek){for(inti=0;in;i++)if(a[i]==k)returni;return-1;}49(1)Tmax(n)=max{T(I)|size(I)=n}=O(n)(2)Tmin(n)=min{T(I)|size(I)=n}=O(1)(3)在平均情况下,假设:(a)搜索成功的概率为p(0p1);(b)在数组的每个位置i(0in)搜索成功的概率相同,均为p/n。nIsizeavgITIpnT)()()()(pnnpnnpnpnp1321)1(2)1(11pnnppninpni50算法分析的基本法则非递归算法:(1)for/while循环循环体内计算时间*循环次数;(2)嵌套循环循环体内计算时间*所有循环次数;(3)顺序语句各语句计算时间相加;(4)if-else语句if语句计算时间和else语句计算时间的较大者。51templateclassTypevoidinsertion_sort(Type*a,intn){Typekey;//costtimesfor(inti=1;in;i++){//c1nkey=a[i];//c2n-1intj=i-1;//c3n-1while(j=0&&a[j]key){//c4sumoftia[j+1]=a[j];//c5sumof(ti-1)j--;//c6sumof(ti-1)}a[j]=key;//c7n-1}}52在最好情况下,ti=1,for1in;在最坏情况下,ti=i+1,for1in;)1()1()1()1()1()(7116115114321nctctctcncncncnTniiniinii)1()1()1()1()(74321minncncncncncnT)()()(743274321nccccnccccc1112)1()1(ninni112)1(ninni)()(22)1(2)1(2)1(12)1()1()1()(27432765432126547654321maxnccccncccccccncccncnncnncnncncncncnT53例如对于输入数据a[i]=n-i,i=0,1,…,n-1,算法insertion_sort达到其最坏情形。因此,)()(22)(2743276543212654nccccncccccccncccnT54实例:最大和连续序列问题给一串整数a[1..n],求出其和最大的子序列,即找出1=i=j=n,使a[i]+a[i+1]+…+a[j]最大介绍四个算法并分析时间复杂度枚举:O(n3)优化的枚举:O(n2)分治:O(nlogn)贪心:O(n)55算法一思想:枚举所有的i和j,计算a[i]+…+a[j],选择最大的时间复杂度如何分析?三层循环内层操作次数取决于i,j中层操作次数取决于imax=a[1];fori=1tondoforj=itondobeginsum=0;fork=itojdosum=sum+a[k];ifsummaxthenmax=sum;end;56算法一分析当i和j一定的时候,内层循环执行j-i+1次总次数为应该如何计算?先计算里层求和号,得利用公式12+…+n2=O(n3)一般地,有1k+…+nk=O(nk+1).证明:数学归纳法结论:算法一时间复杂度为O(n3)经验
本文标题:ACM培训班课件(2013年春季)
链接地址:https://www.777doc.com/doc-3434149 .html