当前位置: 首页 > news >正文

如何做网站地图txt/应用商店app下载

如何做网站地图txt,应用商店app下载,网站备案 照片,广州 网站 建设 制作算法的复杂度与Master定理 平时设计或者阅读一个算法的时候,必然会提到算法的复杂度(包括时间复杂度和空间复杂度)。比如我们说一个二分查找算法的平均时间复杂度为O(log n),快速排序可能是O(n log n)。那这里的O是什么意思&#…

算法的复杂度与Master定理


平时设计或者阅读一个算法的时候,必然会提到算法的复杂度(包括时间复杂度和空间复杂度)。比如我们说一个二分查找算法的平均时间复杂度为O(log n),快速排序可能是O(n log n)。那这里的O是什么意思?这样的表达是否准确呢?

今天来复习一下与算法复杂度相关的知识:函数渐进阶,记号O、Ω、θ和o;Master定理。

先插一句,在算法复杂度分析中,log通常表示以2为底的对数。

算法复杂度(算法复杂性)是用来衡量算法运行所需要的计算机资源(时间、空间)的量。通常我们利用渐进性态来描述算法的复杂度。

用n表示问题的规模,T(n)表示某个给定算法的复杂度。所谓渐进性态就是令n→∞时,T(n)中增长最快的那部分。严格的定义是:如果存在T˜(n)T~(n),当n→∞时,有

 

就说T˜(n)T~(n)是T(n)当n→∞时的渐进性态。

比如T(n) = 2 * n ^ 2 + n log n + 3,那么显然它的渐进性态是 2 * n ^ 2,因为当n→∞时,后两项的增长速度要慢的多,可以忽略掉。引入渐进性态是为了简化算法复杂度的表达式,只考虑其中的主要因素。当比较两个算法复杂度的时候,如果他们的渐进复杂度的阶不相同,那只需要比较彼此的阶(忽略常数系数)就可以了。

总之,分析算法复杂度的时候,并不用严格演算出一个具体的公式,而是只需要分析当问题规模充分大的时候,复杂度在渐进意义下的阶。记号O、Ω、θ和o可以帮助我们了解函数渐进阶的大小。

假设有两个函数f(n)和g(n),都是定义在正整数集上的正函数。上述四个记号的含义分别是:

可见,记号O给出了函数f(n)在渐进意义下的上界(但不一定是最小的),相反,记号Ω给出的是下界(不一定是最大的)。如果上界与下界相同,表示f(n)和g(n)在渐进意义下是同阶的(θ),亦即复杂度一样。

列举一些常见的函数之间的渐进阶的关系:

 

有些人可能会把这几个记号跟算法的最坏、最好、平均情况复杂度混淆,它们有区别,也有一定的联系。

即使问题的规模相同,随着输入数据本身属性的不同,算法的处理时间也可能会不同。于是就有了最坏情况、最好情况和平均情况下算法复杂度的区别。它们从不同的角度反映了算法的效率,各有用处,也各有局限。

有时候也可以利用最坏情况、最好情况下算法复杂度来粗略地估计算法的性能。比如某个算法在最坏情况下时间复杂度为θ(n ^ 2),最好情况下为θ(n),那这个算法的复杂度一定是O(n ^ 2)、Ω(n)的。也就是说n ^ 2是该算法复杂度的上界,n是其下界。

接下来看看Master定理。

有些算法在处理一个较大规模的问题时,往往会把问题拆分成几个子问题,对其中的一个或多个问题递归地处理,并在分治之前或之后进行一些预处理、汇总处理。这时候我们可以得到关于这个算法复杂度的一个递推方程,求解此方程便能得到算法的复杂度。其中很常见的一种递推方程就是这样的:

设常数a >= 1,b > 1,f(n)为函数,T(n)为非负整数,T(n) = a T(n / b) + f(n),则有:

比如常见的二分查找算法,时间复杂度的递推方程为T(n) = T(n / 2) + θ(1),显然有nlogba=n0=Θ(1)nlogb⁡a=n0=Θ(1),满足Master定理第二条,可以得到其时间复杂度为T(n) = θ(log n)。

再看一个例子,T(n) = 9 T(n / 3) + n,可知nlogba=n2nlogb⁡a=n2,令ε取1,显然满足Master定理第一条,可以得到T(n) = θ(n ^ 2)。

来一个稍微复杂一点儿例子,T(n) = 3 T(n / 4) + n log n。nlogba=O(n0.793)nlogb⁡a=O(n0.793),取ε = 0.2,显然当c = 3 / 4时,对于充分大的n可以满足a * f(n / b) = 3 * (n / 4) * log(n / 4) <= (3 / 4) * n * log n = c * f(n),符合Master定理第三条,因此求得T(n) = θ(n log n)。

运用Master定理的时候,有一点一定要特别注意,就是第一条和第三条中的ε必须大于零。如果无法找到大于零的ε,就不能使用这两条规则。

举个例子,T(n) = 2 T(n / 2) + n log n。可知nlogba=n1nlogb⁡a=n1,而f(n) = n log n,显然不满足Master定理第二条。但对于第一条和第三条,也无法找到大于零的ε使得nlogn=O(n1−ε)nlog⁡n=O(n1−ε)或者nlogn=Ω(n1+ε)nlog⁡n=Ω(n1+ε),因此不能用Master定理求解,只能寻求别的方式求解。比如可以利用递归树求出该算法的复杂度为T(n)=O(nlog2n)T(n)=O(nlog2⁡n)。简单的说一下计算过程:

递归树的建立过程,就像是模拟算法的递推过程。树根对应的是输入的规模为n的问题,在递归处理子问题之外,还需要n log n的处理时间。然后根据递推公式给根节点添加子节点,每个子节点对应一个子问题。这里需要两个子节点,每个节点处理规模为n / 2的问题,分别需要(n / 2) * log(n / 2)的时间。因此在第二层一共需要n * (log n - 1)的时间。第三层节点就是将第二层的两个节点继续分裂开,得到四个各需要(n / 4) * log(n / 4)时间的节点,总的时间消耗为n * (log n - 2)。依此类推,第k(设树根为k = 0)层有2 ^ k的节点,总的时间为n * (log n - k)。而且可以知道,这棵树总共有log n层(最后一层每个节点只处理规模为1的子问题,无须再分治)。最后将每一层消耗的时间累加起来,得到:

http://www.lbrq.cn/news/1379431.html

相关文章:

  • 网站开发体会/免费单页网站在线制作
  • 建设工程官方网站/少儿编程培训机构排名前十
  • 怎样做一个免费的网站/成人短期培训学校
  • 怎么用wordpress做模板/网站优化主要优化哪些地方
  • 哪里可以做网站/网站内部链接优化方法
  • 奉贤建设机械网站制作/小程序推广
  • 公司的网站推广费怎么做分录/淄博seo公司
  • 定制手机网站开发/百度推广代理
  • 建设独立网站需要什么/福州网seo
  • 建设工程施工证哪个网站查询/宁波关键词优化排名工具
  • 怎么制作网站软件/环球网
  • 营销团队建设/网站优化方式有哪些
  • 东丽区 网站建设/企业如何建立网站
  • 上海网站制作软件/网页制作作业100例
  • 在那个网站做推广实用/百度主页入口
  • ui设计在哪个网站可以接做/5月新冠病毒最新消息
  • 设计公司网站建设方案/百度查重免费入口
  • 网站建设需求分析报告功能/推荐6个免费国外自媒体平台
  • 自己怎样做海外网站/站长素材免费下载
  • 为网站做一则广告语/网站排名英文
  • 唯品会网站建设 分析报告/推广图片制作
  • 电脑什么软件可以做动漫视频网站/seo推广费用
  • 阿里巴巴国际站运营/搜索引擎营销的方法不包括
  • zblog php转wordpress/来客seo
  • 塘厦做网站/seo技术服务外包公司
  • 小网站做几个关键词/做整站优化
  • 个人做跨境电商网站/汕头seo网站建设
  • 钓鱼网站制作教程视频/新闻摘抄
  • 网站建设信息科技公司/企业网络推广平台
  • 定制网站开发商业计划书/网站免费发布与推广
  • 服务器地域选择指南:深度分析北京/上海/广州节点对网站速度的影响
  • OPENGLPG第九版学习 - 纹理与帧缓存 part2
  • 【源力觉醒 创作者计划】文心一言与deepseek集成springboot开发哪个更方便
  • 《棒球规则》棒球界外球怎么算·棒球1号位
  • 了解SQL
  • 计算机网络学习(一、Cisco Packet Tracer软件安装)