数学建模常用技巧2010717.pptVIP

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
谢谢! 数学建模---常用技巧 常用技巧 计算复杂性分析 算法设计 精确算法 近似算法 算法计算量估计、算法优劣比较 比较算法的好坏,从不同的角度出发,有各种不同的标准。在这里,我们仅就算法的计算速度作一个十分粗略的比较。 例1 (整理问题)给定n个实数a1, a2,…, an,要求将它整理成由小到大排列(或由大到小排列)的顺序:b1, b2,…, bn,b1≤ b2≤…≤ bn。 (算法1) 取出a1, a2,…, an中的最小者,令其为b1。从a1, a2,…, an中去除b1,在余下的n—1个数中选出最小者,令其为b2,…,直至得到b1, b2,…, bn。 容易看出,为了排出b1, b2,…, bn,算进行了 n(n-1)/2 次比较。 (算法2) 步0 b1←a1 步1 设已有b1,…,bk (1≤kn),将按两分法比较的方式把ak+1排入其中:若b1≤…≤bi≤ak+1≤bi+1≤…≤bk,令(b1, b2,…,bk , bk+1)←(b1,…, bi, ak+1, bi+1, …, bk)。若k+1n,令k ← k+1,返回步1。 计算复杂性 我们来分析一下算法2的计算量: 排出b1不必作比较,排出b2只需作一次比较,…,一般,在排ak+1时,设2r-1≤k<2r,则只需作r次比较即可将ak+1安排在它应排的位置上。例如在排a8时,k=7,先和b4比,若a8b4,可再和b6比(若a8b4则和b2比),易见,只要比3次即可排入a8,由于r≤log2k+1,算法的比较次数不超过 令 , ,设计算机每秒可作C次比较,则算法1与算法2整理a1, a2,…, an所用的时间分别为 若n=100万,C=100万次/秒,则t1≈5.8天,而t2≈20秒。可见在较大规模的整理问题时,算法2明显优于算法1。 现设一台每小时能作M次运算的计算机,并设求解某一问题已有了两个不同的算法。算法A对规模为n的实例约需作n2次运算而算法B则约需作2n次运算。于是,运用算法A在一小时内可解一个规模为 的实例,而算法B则只能解一个规模为log2M的实例。两者的差别究竟有多大呢?让我们来对比一下。假如计算机每秒可作100万次运算,则算法A一小时大约可解一个规模为n=60000的实例,而算法B在一小时内只能解一个规模 的实例且n每增加1,算法B求解时所化的时间就将增加1倍。例如算法B求解一个n=50的实例将连续运算357年多。 现设计算速度提高了 100倍,这对计算机来讲已是一个相当大的改进。此时算法A可解问题的规模增大了10倍,而算法B可解问题的规模只增加了log21007。前者可解问题的规模成倍成倍地增加而后者则几乎没有什么改变,今天无法求解的问题将来也很少有希望解决。 由于这一原因,人们对算法作了如下的分类: (多项式算法)设A是求解某一问题D的一个算法,对D的一个规模为n的实例,用fA(D,n)表示用算法A求解这一实例所作的初等运算的次数。若存在一个多项式P(n)和一个正整数N,当n≥N时总有 fA(D,n)≤P(n)(不论求解D的怎样的实例,只要其规模为n),则称算法A为求解问题D的一个多项式时间算法,简称多项式算法。 (指数算法)设B是求解某一问题D的一个算法,f B(D,n)为用算法B求解D的一个规模为n的实例时所用的初等运算次数,若存在一个常数k0,对任意正整数N,总可找到一个大于N的正整数n及D的一个规模为n的实例,对这一实例有fB(D,n)=O (2^kn),则称B为求解问题D的一个指数算法。 多项式算法被称为是“好”的算法即所谓有效算法,而指数算法则一般被认为是“坏”算法,因为它只能求解规模极小的实例。 下面的表1列出了在规模大约为n时各类算法的计算量,而表2则反映了当计算机速度提高10倍、100倍时,各类算法在1小时内可求解的问题的模型的增长情况,(前三个是多项式时间的,后两个是指数时间的) 表1 几个多项式和指数时间复杂性函数增长情况 算法要求的计算量 规模n的近似值 10 100 1000 n 10 100 1000 nlogn 33 664 9966 n3 103 106 109 2n 1024 1.27×1030 1.05×10301 n! 3628800 10158 4×102567 表2 1小时内可解的问题实例的规模 算法要求的计算量 用现在计算机 用快10倍计算机 用快100倍计算机 n N1 10N1 100N1 nlogn N2 8.2N2 67N2 n3 N3 2.15N3 4

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档