ACM_C语言二分法.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ACM_C语言二分法.ppt

彭文文 什么 是二分算法 高中我们学习过二分法求方程的解,回顾一下: 问题:求方程2x^3+3x-3=0的一个解,精确到0.01 思路:从一个两端函数值反号的区间开始,应用二分法逐步缩小实数解所在区间。 经计算f(0)= - 30,f(2)=190,所以函数f(x)=2x^3+3x-3在[0,2]存在0点,即在[0,2]有解。 取[0,2]的中点1,经计算,f(1)=20,又f(0)=-30,所以方程f(x)=2x^3+3x-3在[0,1] 有解。 如此下去,可以得到方程的实数解的区间: 二分区间表: 二分过程: 循 环 次 数 : 现在要求精确到0.01,如果要求更精确,小数点后几位, 那么会继续计算下去,一次类推,总共计算了多少次呢? 答案:log (n),计算机里log(n)就表示log (n), 所以时间复杂度是O(log(n)) 2 2 … 二分要不断把区间缩小为原来的二分之一, 再分为这二分之一的二分之一, 不断缩小区间,找到满足的情况; 利用计算机能够麻木快速的计算 来完美的使用二分…… 前提:在有序的情况下(局限性) 如何用代码实现呢??? #include stdio.h int check(double x){ return (2*x*x*x+3*x-30)?1:0; } double binary (double left,double right){ double mid; while(right-left0.001){ //printf(left:%.12lf right:%.12lf\n,left,right); mid=(left+right)/2; if(check(mid)==1) right=mid; else left=mid; } return left; } int main(){ printf(%.2lf\n,binary(0,2)); } 运行结果: 二分代码框架: int binary (int left,int right,int key ) { while(leftright){ int mid=(left+right)/2; if(keymid) left=mid+1; else right=mid; } return left; } 例题1: Hrbustoj1270 立方 Description a、b、c、d是在区间(1,200]内的整数,找出所有符合如下关系式的组合。 a^3 = b^3 + c^3 + d^3(b=c=d) Output 将组合按a由小到大的顺序排列。 若两个式子中的a大小相等,则按b由小到大排列,若b也相等,则按c由小到大排列。 输出形式如引号内所示“a^3 = b^3 + c^3 + d^3”,其中a、b、c、d为整数。 暴力方法: #includestdio.h int main (){ int a,b,c,d; for(a=2;a=200;a++){ for(b=2;b=200;b++){ for(c=b;c=200;c++){ for(d=c;d=200;d++) { if(a*a*a==b*b*b+c*c*c+d*d*d) printf(%d^3 = %d^3 + %d^3 + %d^3\n,a,b,c,d); if(a*a*a=b*b*b+c*c*c+d*d*d) break; } } } } } 538ms!!!慢!!!龟的速度!!! 时间复杂度:O(n^4) 二分代码: #includestdio.h int main(){ int a,b,c,d,i,j,left,right,mid; for(a=2;a=200;a++) for(b=2;ba;b++) for(c=b;b*b*b+c*c*ca*a*a;c++){ left=c; right=a; while(leftright){ mid=(left+right)

文档评论(0)

ziyouzizai + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档