- 1、本文档共97页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
查找(Searching).ppt
搜索初探 Cs 2.6 1040310615, simple, Swai 算法的时间复杂性 百鸡问题 公鸡每只五元,母鸡每只三元,小鸡三只一元用n元买n只鸡,求公鸡,母鸡,小鸡的只数 约束方程: a+b+c=n 5a+3b+c/3=n 输入:所购买三种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[], m[], s[] 1.void chicken_question(int n, int k, int g[], int m[], int s[]) 2.{ int a, b, c; k=0; for(a=0;a=n;a++){ for(b=0;b=n;b++){ for(c=0;c=n;c++){ 8. if((a+b+c==n)(5*a+3*b+c/3==n)(c%3==0)){ g[k]=a; m[k]=b; s[k]=c; k++; } } } } 17. } 下面考虑这个算法花费的时间T1(n) 第4行需执行1个操作;第5行需执行1+2(n+1)个操作;第6行需执行n+1+2(n+1)2个操作;第7行需执行(n+1)2+2(n+1)3;第8行需执行14(n+1)3个操作;第9,10,11,12行循环各执行一个操作,执行与否取决于第8行的条件语句,所以这四行的执行时间不会超过4(n+1)3因此,T1(n)= 1+2(n+1)+n+1+2(n+1)2+(n+1)2+16(n+1)3+4(n+1)3=20n3+63n2+69n+27 当n很大时,T1(n) ≈c1n3 c10 当n=10000时,约需11天零13小时,显然这个算法不能满足我们的要求! 改进的百鸡问题 输入:所购买三种鸡的总数目n 输出:满足问题的解的数目k,公鸡,母鸡,小鸡的只数g[], m[], s[] 1.void chicken_question(int n, int k, int g[], int m[], int s[]) 2.{ int i, j, a, b, c; k=0; i=n/5; j=n/3; for(a=0;a=n;a++){ for(b=0;b=n;b++){ c=n-a-b; if((a+b+c==n)(5*a+3*b+c/3==n)(c%3==0)){ g[k]=a; m[k]=b; s[k]=c; k++; } } } 16.} 分析第二个算法的时间花费: 第4行执行1个操作;第5,6行各执行2个操作;第7行执行1+2(n/5+1)个操作;第8行执行n/5+1+2(n/5+1)(n/3+1)个操作;第9行执行3(n/5+1)(n/3+1);第10行执行10(n/5+1)(n/3+1)个操作;第11,12,13,14行循环一次各执行一个操作,执行与否取决于第10行的条件语句,所以这四行的执行时间不会超过4(n/5+1)(n/3+1)个操作。上述/均表示整除操作,因此 T2(n)=1+2+2+1+2(n/5+1)+n/5+1+2(n/5+1)(n/3+1)+(3+10+4)(n/5+1)(n/3+1)=19n2/15+161n/15+28≈c2n2 , c2 0, (n很大时) 当n=10000时,约花费6.7s 运行时间的上界,Ο记号 定义:令N为自然数集合,R+为正实数集合。函数f:N→ R+,函数g:N→ R+,若存在自然数n0和正常数c,使得对所有的n= n0,都有f(n)=cg(n),则称函数f(n)的阶至多是Ο(g(n)). 因此,如果存在lim f(n)/g(n),则: n→∞ lim f(n)/g(n) ≠ ∞,即:f(n)= Ο(g(n)) n→∞ 这个定义表明:f(n)的增长至多像g(n)的增长那么快。此时称Ο(g(n))是f(n)的上界 运行时间的下界,s记号 定义:令N为自然数集合,R+为正实数集合。函数f:N→ R+,函数g:N→ R+,若存在自然数n0和正常数c,使得对所有
文档评论(0)