算法的五个重要的特征.docx
- 文档编号:4855070
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:26
- 大小:622.10KB
算法的五个重要的特征.docx
《算法的五个重要的特征.docx》由会员分享,可在线阅读,更多相关《算法的五个重要的特征.docx(26页珍藏版)》请在冰豆网上搜索。
算法的五个重要的特征
1、算法的五个重要的特征:
确定性、能行性、输入、输出、有穷性/有限性。
2、表示算法的语言主要有:
自然语言、流程图、盒图、PAD图、伪代码、计算机程序设计语言
3、算法分析有两个阶段:
事前分析和时候测试。
4、衡量算法有几个方面:
时间和空间。
。
。
5、渐进意义下的符号的意义:
记:
算法的计算时间为f(n),数量级限界函数为g(n),其中,n是输入或输出规模的某种测度。
f(n)表示算法的实际”执行时间一
与机器及语言有关。
g(n)是形式简单的函数,如nm,
logn,2n,n!
等。
是事前分析中通过对计算时间或频率计数统计分析所得的与机器及语言无关的函数。
以下给出算法执行时间:
上界(0)、下界(Q)、“平
均”()的定义。
定义1.1如果存在两个正常数c和NO,对于所有的N
>NO,有|f(N)|wC|g(N)|,则记作:
f(N)=O(g(N))。
1)当说一个算法具有0(g(n))的计算时间时,指的就是如果此算法用n值不变的同一类数据在某台机器上运行时,所用的时间总是小于g(n)的一个常数倍。
2)g(n)是计算时间f(n)的一个上界函数,f(n)的数量级就是g(n)。
Eg:
因为对所有的N>1有3N<4N,所以有
3N=O(N);
因为当N>1时有N+1024<1025N,所以有N+1024=O(N);因为当N>10时有2N2+11N-10W3N2,所以有
2N2+11N-1O=O(N2)
因为对所有NA1有N2 作为一个反例N3丰O(N2),因为若不然,则存在正的常数C和自然数N0,使得当NAN0,有N3WCN2,即N 显然,当取N=max{N0,C+1}时这个不等式不成立,所以N3丰 O(N2) 多项式定理: 定理1.1若A(n)=amnm+,+a1n+a0是一个m次多项式,则有A(n)=O(nm)即: 变量n的固定阶数为m的任一多项式,与此多项式的最高阶nm同阶。 证明: 取n0=1,当nAn0时,有|A(n)|<|am|nm+,+|a1|n+|a0|<(|am|+|am-1|/n+, +|a0|/nm)nm w(|am|+|am-1|+,+|a0|)nm令c=|am|+|am-1|+,+|a0| 定理得证。 符号O运算性质: (f,g为定义在正数集上的正函数) (1)O(f)+O(g)=O(max(f,g)) (2)O(f)+O(g)=O(f+g) (3)O(f)O(g)=O(fg) (4)如果g(N)=O(f(N)),贝UO(f)+O(g)=O(f) (5)O(Cf(N))=O(f(N)),其中C是一正常数。 (6)f=O(f) 定理1.2如果f(n)=amnm+.+a1n+a0且am>0,则f(n)=? (nm)。 该定义的优点是与O的定义对称,缺点是f(N)对自然数的不同无穷子集有不同的表达式,且有不同的阶时,不能很 好地刻画出 f(N)的下界。 比如当 100N为 正偶数 f(N)= 6N2 N为正奇数 按照定义,得到f(N)=? (1),这是个平凡的下界,对算法分析没有什么价值。 “平均情况”限界函数 定义1.3如果存在正常数c1,c2和n0,对于所有的n >n0,有c1|g(N)|w|f(N)|wc2|g(N)|则记作f(N)=(g,(N)) 含义: 算法在最好和最坏情况下的计算时间就一个常数因子范围内而言是相同的。 可看作: 既有f(N)=Q(g(N)),又有 f(N)=O(g(N)) 【例1.8】循环次数直接依赖规模n-变量计数之一。 (1)x=0;y=0; (2)for(k=1;k<=n;k++)(3)x++;(4) for(i=1;i<=n;i++) (5)for(j=1;j<=n;j++)(6)y++; 该算法段的时间复杂度为T(n)=O(n2)。 当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的。 【例1.9】循环次数间接依赖规模n-变量计数之二。 (1)x=1; (2)for(i=1;i<=n;i++)(3)for(j=1; j<=i;j++)(4)for(k=1;k<=j;k++)(5)x++; 该算法段中频度最大的语句是(5),从内层循环向外层分析语句(5)的执行次数: 算法段的时间复杂度为: T(n)=O(n3/6+低次项)=O(n)。 b.算法的时间复杂度与输入实例的初始状态有关。 这类算法的时间复杂度的分析比较复杂,一般分最好情况(处理最少的情况),最坏情况(处理最多的情况)和平均情况分别进行讨论。 【例1.10】在数值A[0..n-1]中查找给定值K: (1)i=n-1; (2)while(i>=0andA[i]<>k) (3)i=i-1;(4)returni; 此算法的频度不仅与问题规模n有关,还与输入实例中A 的各元素取值及k的取值有关: 1.若A中没有与k相等的元素,则⑵频度f(n)=n(最坏情况); 2.若A最后一个元素等于k,则 (2)频度f(n)是常数1(最好情况); 在求平均情况时,一般地假设查找不同元素的概率P是相 同的,则算法的平均复杂度为: 若对于查找不同元素的概率P不相同时,其算法复杂 度就只能做近似分析,或在构造更好的算法或存储结构后,做较准确的分析。 例1.11】求N! 递归方程为: T(n)=T(n-1)+0 (1)其中0 (1)为一次乘 法操作。 迭代求解过程如下: T(n)=T(n-2)+0 (1)+0 (1) =T(n-3)+0 (1)+0 (1)+0 (1)••=•0 (1)+……+0 (1)+0 (1)+0(1 ) =n*0 (1)=0(n) 【例1.12】抽象地考虑以下递归方程,且假设n=2k,则迭代求解过程如下: Tg=2^(^)4-2 =畚J+2)+2 =羽苛〕十47 =斗多〉+2)+4+2 =237^(4^)+8+4+2 3=1 •••T(n)=O(n) 【例1.13】一个楼有n个台阶,有一个人上楼有时一次跨一个台阶,有时一次跨两个台阶,编写一个算法,计算此人有几种不同的上楼方法,并分析算法的时间复杂度。 解: 设计一个递归算法。 H(intn) { if(n<0)printf(“Error! ”); ifn=1return (1); ifn=2return (2); elsereturn(H(n-1)+H(n-2)); } 时间复杂度(设T(n))分析: nw2 C T(n)= T(n-1)+T(n-2) n>2 •••T(n)w2T(n-1)<2T(n-2)< …w2T (1)=O (2) 【例1.14】抽象地考虑以下递归方程, 且假设n=2k,则 迭代求解过程如下: T(n)=2T(n/2)+O(n)=2T(n/4)+2O(n/2)+O(n)=… =O(n)+O(n)+…+O(n)+O(n)+O(n) =kx O(n)=O(kxn)=O(nlog2n) 【例1.15】抽象地考虑以下递归方程, 迭代求解过程如下: T(n)=T(n/3)+T(2n/3)+n =T(n/9)+T(2n/9)+n/3+T(2n/9)+T(4n/9)+2n/3=•••n=(k+1)n=n(logn+1) 设最长路径长度为k,(2/3)n=1•k=logn、、、、、、、、、、加图 Chapter2 蛮力法 蛮力法是基于计算机运算速度快这一特性,在解决问独时采取的一沖懒惰密策略.这种策略不经过(或者说纟丈很少〉思考,把问题所有情况或所有过程交给计算机去-一尝试,从中找出问题的解嵌 蛮力策略应用: 选择排序、冒泡排序、插入排序sg茅查找、朴素的字符串匹配等。 比较常用还有枚举法、盲弓搜索算法等。 1贪婪算法的思想: 贪婪算法通过一系列的局部选择来 得到一个问题的解。 所作的每一个选择都是当前状态 下最优”的选择。 要依照某种策略。 策略只顾眼前,不管将来”,称之为贪婪策略”。 贪婪算法没有固定的算法框架,算法设计的关键是贪婪策 略的选择。 1贪婪算法的思想■例4.2活动安排问题-算法 ..按站束时间非减序排序: fl<=(Z<=..<=fii-O(nlonn) L从第I亍活动开始,按糜序放进集合乩檢入活动i当且便当与集合A中已有元索相容* 与集台A中垠后元素j比较=若食》二左则加入.否则不加入 ©Fix&“(fk)—煤合的谥大绘集时间 0(11) voidGreedySrlecIin111,lulsj]iiutQ]JjooIA[]){A|l]=true;//A(i|=tmeM示仝入集合 forflftiI-2: i<-n: H-+) [IT何]nn {A(i]=true; 鬥; 4酒功时拦持时间和 雄卓时问甘于睦甄£ 和f中砒站克叶问的 非总序特弭 tkeA[i|=fake; } I 查讎入的活幼已搖结束时间的菲;《序拌列.尊法只flfornj时间安ftn 个活动,便斗多的活动能相零地使用曷曲资淇. J41累所给岀的活动未按非笑序那列「可以用伪“[唱皿的时囘重那. 1贪婪算法的思想-例4.2活动安排问题 规则: 选择具有最早结束时间的相容活动加入,使剩余的可安排时间最大,以安排尽可能多的活动。 由于输入的活动以其完成时间的非减序排列,所以算法GreedySelector每次总是选择具有最早完成时间的相容活动加入集合A中。 直观上,按这种方法选择相容活动为未安排活动留下尽可能多的时间。 也就是说,该算法的贪心选择的意义是使剩余的可安排时间段极大化,以便安排尽可能多的相容活动。 2可绝对贪婪问题■例4.3 ■洞乩3键盘输入一个高稱度的正鳌数N,去掉碁中任意合个数宇启竊下的数字按原左右次序将组成一个新的正整数’编程对给走的N和$•寻找一种方案悄得剰下射数字组威的新数最小. ・输出应包括所去荐的数字的世置和齟成的新的正墾埶N不超过100^). 豹抵酷构设计: 和上一节对高精度正藝数的处理一样,将输入的高稱度数存储为字符串格式.根据输出要或设置数组,在制除数字时记录其豐置士 2可绝对贪婪问题-例43问题分析 通过“枚举归纳卄设计算法,实例<8=3): Jn1=*[12435863+| ■盍整策略 U在忖数固走的前提下.让髙位的毂字尽量小其值就辍 =时除商位较大的甄字* U具体地相撫两位比技若高位比低位大则的除高位U ・n1^12435 fi63" =4比3大韵除 “123 U23 i5863,T 」E比石犬阴障 i563r, 二6比3大扫除 +,123 I63s I 1 2 3 4 5 6 7 s 9 10 S[l] 1 2 0 5 3 a 6 & 2 12 4 € 7 3 1C 11 12 ia 14 例: 设待安排的11个活动的开始时间和结束时间按结束时间的非减序排列如下: 例42牯动穽择间题 彈怯型劇谗观r的计算过桦如砸所示・图屮每行相应于尊法的一蝕ft・阴岳低条玮的活动是己选人靠合丄的沼动.而空就条査示的活功是当前正在检査相容社的活动. 1贪婪算法的思想”总结 ■适用同肆 □两类 ■可绝对盍婪问题 -I求阜忧解; □具有贪婪进郵性质、阜优子聲构性质; ■相对贪婪问鑒了為到近姒解不算初町 □專近槪解;一=<^^题. □不具备全部性胸,但求解毁率要求高,解的務度要不高'” ■算法框架 n樓心: 贪婪董略 2可绝对贪婪问题•例43问题分析 ■再一个实捌: □n2-l,231183" □3比1大斜除“21183“ □2比1大方除“1183" □8比3大列除"11 由实例仁相邻数字只需要从前向后比较;而从实例2中可以看出当第I位与第i巧恒比校,若胡除第i位后,応殖向前考虑第i-1便旨第田位进行比较,才能保证结果的正确枠. nJ=PFl2J4bbrrs=3 □由这个实例看出,经过对破相邻比较一个数字都没有制除,这就要考虚将后三位进行删除; □当然还有可能,在相邻比较的过程中曲除的位較小于s时,也要进行相似的操作. 算法设计: 棍据以上实枫分析,揶法主要由四部分组成: 初始化.相嘟数字比较{必要时豹除h处理比较过程中旳除不够S位的情况和结果諭出匕 其中删除字符的实现方注很多,如: 二1)物理进行字符旧除「就是用后面的字符覆盖已帕除的字符,字符率长度改变匕这样可能会有比较茂字符移动操柞,算法效率不高* 二2)可以利用教组记录字符的存在伏态,元素值为,T表示对应数字存在,元素值为沖表示对应数字已對除.这样避免了字符的移动,字符串长度不会改变,可凶省略专门记录拠除数字前位晉*怛这样融前后数字的比较过程和绘后的桂出过程相对复: 杂一些. 3)同样还是利用数组,记录未阳除字符的下标: 頼略的过稈如下: n=l(12435833"s=312345678 34比3大删除ff12435833"1245678 □8比3犬曲除“12435833”12457a □5比3大网除2435833"12478 这时数组好霉是数据库中的索引文件=此方式同拝存在探作比轶宜杂的问莎. 贪心算法解决01背包问题: 对于0-1背包问题,贪心选择之所以不能得到最优解是因 为在这种情况下,它无法保证最终能将背包装满,部分闲 置的背包空间使每公斤背包的价值降低了。 //事实上,在考虑0-1背包问题时,应比较选择该物品和不选择该物品所导致的最终方案,然后再作出最好选择。 由此就导出许多互相重叠的子问题。 这正是该问题可用动态规划算法求解的重要特征。 动态规划 动态规划的基本思想: 动态规划方法的基本思想是,把求解的问题分成许多阶段 或多个子问题,然后按顺序求解各子问题。 最后一个子问题就是初始问题的解。 由于动态规划的问题有重叠子问题的特点,为了减少重复 计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。 动态规划=贪婪策略+递推(降阶)+存储递推结果 5•空间换取时间 递归隼法64效率低的主要原因是因为进行了犬量的重族计算.而动态规划的基本动机就是充分利用重叠子问題(Overlapping刼以pQUQb期m零h 因为动态嫂划将以前(子问题)计算过时结果都记录下来’遇到便用子问题结果的时像只需査表. 动态规划是一种用空间换取时间的方送匕 因此,动吉规划常常因为空闾消耗衣大而难以实现. "适合解决的问题的性质 动态规划第法的问题及决策应该具有两个性质;最优化原理、无后向性* □1)最优化匣理(或称为最佳原则、最优子站构); □2)无后向性(无后效性): 某駙段状态一旦确定以后,就不受这个状态以后决策的影响.即某状态以后的过程不会影响以前的伏态,只与当前狀态有关匕 能够体现动态规划优壹的性质: □子问题重叠性质; 二动态規划用空间换联时间,在有大量重叠子问题的时餐苴优静才降荒分钵刼出来, 最大字段和的问题: 例5.4求两个字符序列的最长公共字符子序列。 问题分析 若丸的拴度为皿’若B的长度為X则 .4的子序列共有;+c;+c;+-+c: =2'-1 E的子序列共有;—爲+霍—…+c;=2^-1 如栗用枚毕策略,当m=□时*英谨轩爭比较次数为: c;*亡;--c;•-,-cJ*c;耗时 龙多,不可取. 例5.4算法设计 1.逋推关系分析 _^=448o>S.1-;..-.tam-i"1、B="bo#til*bii-i"'11 眄巧…为它f门的城长公共子序列« 有以下结论; L)如果ainl^bM亠则Zk-l"Anl=bn1.且“叫卫上,…疋匕: “是"dgl,…/m-广和叫。 血,…,bn-广的一个虽长公共子F? 列: 丄)抑果amH1■则“罚,21,…,Zk-1-'是 W«O,B1和,叭虬…山nJ”的一个皋长公共子序列: 3)如果am.lHbn』*且JltdHbml,则“Z。 ,Zl7小,1"是 伽#m…,倉《|-1"和"bo,birT.>的一个量长公共 子序列匕 由此,2牛序列的蛊悅公共子序列包警了这2牛序列的询醍的最良公共予序列*因此*该问题具有嵐优子结构性质. 匕存储、子问題合并 船i]和叩]芬别存储两个字符串’定>Zc(i][j]为序列 *0鼻1,…冲秤和*ibo,bi,...;1bj-iw的垠长公共子序列的长度,计j HU[j]可递归地表述刘下: 1)加山]=0如果i=0或j=0 2)€fi](j]=c[i-ll[j-ll+l如果ij>O^a[i-l]=b[j-l] 3>€fi]U]=inai(c[i)U-l],c(L-l]U])如果i.pOhKa[i-l]^b|j-l] J 0 1 2 3 4 5 6 j y- B D C A B A 0 X> 0 0 0 0 0 0 1 A 0 0 0 0 1 1 1 2 B 0 1 1 1 1 2 2 3 C 0 1 1 2 2 2 2 4 0 0 1 1 2 2 3 3 5 D 0 1 2 2 2 3 3 6 A 0 1 2 2 3 3 4 7 B 0 1 2 2 3 4 4 算 法(递归形式) intNum=100 chara[Num],b[Num],str[Num]; main() {intm,n,k; print(“Enteitwostring”); input(a,b);m=strlen(a);n=strlen(b),k=lcs_len(n,m); build_lcs(k,n,m);print(str); } l爲4虹讪仃j)齐计算最优值 {如口竝; if(i=0orj=0) elseir(a[i-l]=b[j-l])c[i][j]=lc3_kn(i-l,j-l)+l; else{titlesr2=lcs else510=⑵ return^HHjD;JOfmwn)(UJ): 构造毘长公共子序列境杂度 [if(i=0orj=0)retuiD; elseif(dllli]=c[i]U-lJ)(MJL); el5t(就也]=』[i-L];huttdjn(k-1,i-lj-1);}} n=10U char血ULMMxWl;曲為3规Ta[],charb[].injt€[][iQ)/计算 {UU叫%ij; piint(^Entertwostnng"1);inputfa.b); for(i=0: i<=mii++)c[i][0]=0: for(i=0;i<=n;i-+)c[0](i)=0; for(i=l;i<=mii++) for(j=l;j*=m;j++)ir(a[i-l]=bU-l])c[i][j]=c[i-l]U-l]+l; elseif(€[i-lJ[j)>-c(i]U-l])c[i)Li]=c(i-l)U); else€[i][j]=c[i]U-l]: wiilie(k-O) if if {k=k-l; j=j1;3 例5・5求一个数列的最长不下降子序列。 设有由11个不相同的整数组城的数列,记为: a(lha (2)鹼)且建①吒〉则)(ioj) 若存在il 託度为K的不下隔序列・ 请褊写算法求出一个豹列的最长不下降序列. 例王&算法设计 1.诵推关系 1)对師血来说,由于它是堆后一个議,所以当从a(u)Jf始查找时,只存在长度肯L的不下阿序列; 2)若从a(n-l)JF始查找,则存在两种可能性: ⑴若机n-1)勺(11)则存在长度対2的不下騒序列a(n-l).a(.n)r⑵若a(ii-l)>3(n)则存在度为1的不下降序列a(n-l)或机it)* 3)若从;1⑴开始,此时毎栓不下降序列应按下列方法求出: 在a(i+l)? a(i+2V..T3{jO中,找出一牛起始数据比日①大的且据长的不下降序列,作育其后继= 匕舉据结构设计用数组b[i]tc[ij分别记垂直i到n的罐长不降子序列的长度和点i后墨数拯编号. i»ttun—1oo: intaruiaxnlnxml? cTirxaxnj: maiiiO tInt tup11; fo±*(1=l.-±O lbLU—1; 厂庞分利用tL经得到甬){J结果,避免重篡计士二、算”节吿计算时间 时值]貝杂度了口门宀 ibjs^smnli]=j i”max_sum2(intntijita[]JntFMJ) {iRtsum=O;規加蛮i=1;it=Rj++)(iratthi仏船期=o;fprOnJj=! j<=! iJ++如muB+=QUJ;if(thissurn>sutn){誓紗期;b^J=i;b^sJJ=J;} } }returnsum; 例丄7圾大于段率1 离级点丿L的策略; -该问題不耳缶童娄选疑住展+动态规划 ="划分阶段鼓找出子词题W n2)选捧扶态; 二3)硒走決策并百出扶态锻穆方叱 」分阶段: 第i阶段得到前i个数字的暈大子段和, ■选痒伏态■伏态转移方程 」当前子段的和: tNu? wm[d this_sum[i-1]+a[i],当thi$_sum[i-1J>- 自[ih □绘大子段和: sum[/] 'sumti-IJr ■时间赛杂度? Q{rj) ■改进: 该问題决策比较简单,是一股的运算,可以直接确
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 五个 重要 特征