算法心得-高效算法的奥秘(原书第2版.docx

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法心得:高效算法的奥秘(原书第2版   分治算法小组的汇报内容:   一、分治算法的基本概念?????????????第(来自:写论文网:算法心得:高效算法的奥秘(原书第2版)2页   二、分治算法的基本思想及策略??????????第2页   三、分治法适用的情况??????????????第3页   四、分治法的基本步骤??????????????第3页   五、分治法的复杂性分析?????????????第4页   六、快速傅里叶变换???????????????第5页   七、可使用分治法求解的一些经典问题???????第9页   八、依据分治法设计程序时的思维过程???????第9页   九、分治法与其它常见算法的比较?????????第9页小组的分工情况:   彭勇讲前五个部分,天西山讲第六个部分,胡化腾讲最后三个部分,吕璐负责汇报的资料收集,小组分工以及最后的资料整理。   三、分治法适用的情况   分治法所能解决的问题一般具有以下几个特征:   1)该问题的规模缩小到一定的程度就可以容易地解决   2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。   3)利用该问题分解出的子问题的解可以合并为该问题的解;   4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。   第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;   第二条特征是应用分治法的前提它也是大多数问题可以满足的,此特征反映了递归思想的应用;、   第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征,如果具备了第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法。   第四条特征涉及到分治法的效率,如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但一般用动态规划法较好。   四、分治法的基本步骤   分治法在每一层递归上都有三个步骤:   step1分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;   step2解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题   step3合并:将各个子问题的解合并为原问题的解。   它的一般的算法设计模式如下:   Divide-and-Conquer(P)   1.if|P|≤n0   2.thenreturn(ADHOC(P))   3.将P分解为较小的子问题P1,P2,...,Pk   4.fori←1tok   5.doyi←Divide-and-Conquer(Pi)△递归解决Pi   6.T←MERGE(y1,y2,...,yk)△合并子问题   7.return(T)   其中|P|表示问题P的规模;n0为一阈值,表示当问题P的规模不超过n0时,问题已容易直接解出,不必再继续分解。ADHOC(P)是该分治法中的基本子算法,用于直接解小规模的问题P。因此,当P的规模不超过n0时直接用算法ADHOC(P)求解。算法MERGE(y1,y2,...,yk)是该分治法中的合并子算法,用于将P的子问题P1,P2,...,Pk的相应的解y1,y2,...,yk合并为P的解。   五、分治法的复杂性分析   一个分治法将规模为n的问题分成k个规模为n/m的子问题去解。设分解阀值n0=1,且adhoc解规模为1的问题耗费1个单位时间。再设将原问题分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用f(n)个单位时间。用T(n)表示该分治法解规模为|P|=n的问题所需的计算时间,则有:   T=kT(n/m)+f(n)   通过迭代法求得方程的解:   递归方程及其解只给出n等于m的方幂时T(n)的值,但是如果认为T(n)足够平滑,那么由n等于m的方幂时T(n)的值可以估计T(n)的增长速度。通常假定   T(n)是单调上升的,从而当mi≤nmi+1时,T(mi)≤T(n)T(mi+1)。   在了解这个算法之前,我们首先必须弄清楚这样几个问题。什么是傅里叶变换?什么是快速傅里叶变换?   傅里叶变换能将满足一定条件的某个函数表示成三角函数或者它们的积分的线性组合。在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。最初傅里叶分析是作为热过程的解析分析的工具被提出的。离散傅里叶变换的一种快速算法。所以我们可以了解到快速傅里叶变换就是对离散的点进行处理的算法。今天我们通过两个多项式的乘积来介绍FFT。   S=PX?K(X)   S=(PO+P1X+P2X2+?+Pn?1Xn?1)?(K0+K1X+K2X2+?+   Kn?1Xn?1)   在上个式子中,

文档评论(0)

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

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

1亿VIP精品文档

相关文档