(HDUACM201409版_10)搜索入门.ppt

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

ACM程序设计 杭州电子科技大学 刘春英 acm@hdu.edu.cn 每周一星(9): 第十讲 一招制敌之搜索题 根据“信息学初学者之家”网站的统计,Ural(俄罗斯的Ural州立大学的简称 ,有名的Ural Online Problem Set 就是该校的系统)的题目类型大概呈如下的分布: 搜索 动态规划 贪心 构造 图论 约10% 约15% 约5% 约5% 约10% 计算几何 纯数学题 数据结构 其它 约5% 约20% 约5% 约25% 什么是搜索算法呢? 搜索算法是利用计算机的高性能来有目的地穷举一个问题的部分或所有的可能情况,从而求出问题的解的一种方法。 搜索过程实际上是根据初始条件和扩展规则构造一棵解答树并寻找符合目标状态的节点的过程。 本讲主要内容 二分搜索 三分搜索 DFS BFS(略) 第一部分:二分查找 2 3 4 5 6 8 12 20 32 45 65 74 86 95 100 第一部分:二分查找 2 3 4 5 6 8 12 20 32 45 65 74 86 95 100 思考: 1、在一百万个元素里查找某个元素大约需要比较多少次? 二分查找-例题1 HDOJ-2199 给出方程: 8*x4 + 7*x3 + 2*x2 + 3*x + 6 = Y 其中,实数Y满足 (fabs(Y) = 1e10) 请输出x在区间[0,100]的解,结果精确到小数点后4位。 题目分析 常规暴力枚举? 当测试数据足够多-效率低下 指定区间内的单调性(如何证明?) 推荐方法:二分求解 二分查找-参考代码1 //HDOJ-2199 #include iostream #include cmath using namespace std; double Y; double l, r, m; double f( double x ) { return 8*pow(x, 4.0) + 7*pow(x, 3.0) + 2*pow(x, 2.0) + 3*x + 6;} int main() { int t; scanf(%d, t ); while( t-- ) { scanf(%lf, Y ); if( f(0) = Y Y = f(100) ) { l = 0; r = 100; while( r - l 1e-6 ) { m = (l + r) / 2; double ans = f(m); if( ans Y ) { r = m - 1e-7; }else l = m + 1e-7; } printf(%.4lf\n, (l + r) / 2 ); }else printf(No solution!\n); } } 二分查找-例题2 HDOJ-2899 给出函数: F(x) = 6*x7 + 8*x6 + 7*x3 + 5*x2 - y*x 其中,实数y满足 (0y 1e10) 请输出x在区间[0,100]时函数F(x)的最小值, 结果精确到小数点后4位。 题目分析 指定区间内是否满足单调性? 显然不满足-不能直接二分 满足凸性? 如何证明? 极值点的特点? 是否可以二分? 二分查找-参考代码2 //HDOJ-2899 #include stdio.h #include math.h const double eps = 1e-8; double y; double cal(double x){ return 42.0*pow(x,6.0)+48.0*pow(x,5.0)+21.0*pow(x,2.0)+10.0*x; } double ans(double x){ return 6.0*pow(x,7.0)+8.0*pow(x,6.0)+7.0*pow(x,3.0)+5.0*pow(x,2.0)-y*x; } int main(){ int T; double f,l,mid; scanf(%d,T); while(T--){

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档