主定理

主定理最早出现在《算法导论》中,提供了分治方法带来的递归表达式的渐近复杂度分析。
规模为n的问题通过分治,得到a个规模为n/b的问题,每次递归带来的额外计算为c(n^d)
T(n) <= aT(n/b)+c(n^d)
那么就可以得到问题的复杂度为:

  • T(n) = O(n^d log(n)), if a = b^d
  • T(n) = O(n^d ), if a < b^d
  • T(n) = O(n^logb(a))), if a > b^d

证明方法

本来使用主定理是可以免去画递归树的,但为了证明主定理,还是需要画树。

可见,每次递归把问题分为a个规模为n/b的子问题。从根节点开始,共有logb(n)+1层,叶子节点数为a^(logb(n))。那么,第j层共有a^j个子问题,每个问题规模为n/b^j,每个子问题运算量为c*(n/b^j)^d需要完成的计算量为:

求和得到整个问题的运算量:

那么,根据a与b^d的关系,很容易得到主定理。

应用

二分搜索

  • 每次问题规模减半,a=1,b=2,d=0
  • 复杂度为n^0 log(n) = log(n)。

快速排序

  • 随机选择待排序序列中的一个数字作为划分字问题的标准,划分是否平均影响算法复杂度
  • 每次问题规模减半,a=2,b=2,d=1
  • 复杂度为n^2 log(n)
  • 最差情况下,复杂度为O(n^2)

归并排序

  • 数据列均分为两部分,分别排序,之后以O(n)的复杂度进行合并,空间复杂度O(n)
  • 每次问题规模减半,a=2,b=2,d=1
  • 复杂度为n log(n)

基数排序(Radix sort)

  • 对于待排序的整数序列,从最低位到最高位每次按照相应的位排序一次
  • 每次递归问题规模变为原来的1/10,但需要求解10个子问题,额外运算为O(n)的,a=10,b=10,d=1
  • 复杂度为n^1 log(n) = n log(n),近似为O(kN),k为整数的位数

快速傅里叶变换:FFT

  • 每次问题规模减半,a=2,b=2,d=1
  • 复杂度为n log(n)

Karatsuba快速乘法

  • 正常两个n位数乘法为n^2
  • 算法把两个乘数各分为高低位两部分,如X*Y = (a+b) * (c+d) = ac+bd + (bc+ad) = ac+bd+(ac+bd - (a-b)(c-d))
  • 只需要ac,bd,(a-b)(c-d)三次乘法
  • 每次问题规模减半,但需要解3个子问题,加法是O(n)的,a=3,b=2,d=1
  • 复杂度为n^log2(3)

转载请注明作者:Focustc,博客地址为 http://blog.csdn.net/caozhk,原文链接为 点击打开

主定理的证明及应用举例相关推荐

  1. Master—Theorem 主定理的证明和使用

    引言? 在分析算法的时候,我们经常需要分析递归算法的时间复杂度.Master--Theorem 正是用于快速得出递归算法时间复杂度的方法. Master-Theorem 假设某个递归算法的时间复杂度递 ...

  2. 离散数学及其应用学习笔记——主定理(Master Theorem)的证明

    先贴出两个初中数学公式 使用换根公式和对数倒数性质可以得出这样的结论: alogbn=nlogba a^{log_bn}=n^{log_ba} 等比数列求和公式: Sn=anq−a1q−1 S_n=\ ...

  3. 算法与程序设计(一):主定理

    目录 一.主定理的概念 二.举例 2.1 求解递推方程(case1) 2.2 求解递推方程(case2) 2.3 求解递推方程(case3) 2.4 不能使用主定理的例子 一.主定理的概念 二.举例 ...

  4. 递归算法复杂度与主定理的推导

    一.基本概念 分治法的基本思想 分治法就是把一个大的问题分解成为若干个小的问题,求出小问题的解后合并即为大问题的解 分治法能够解决的问题的一般特征 该问题可以分解为若干规模规模较小的相同问题: 该问题 ...

  5. 主定理 Master Theorem

    分治法主定理 主定理的证明 假设有递归式: T(n)=aT(nb)+f(n)T(n) = aT(\frac{n}{b}) + f(n)T(n)=aT(bn​)+f(n) 证明: T(n)=aT(n/b ...

  6. 【算法设计与分析】12 主定理及其应用

    主定理是一个非常有用的定理,前面我们学习的所有知识都可以用主定理来求解,而不必要使用复杂的计算方法来求解 文章目录 1. 主定理 1.1 主定理的应用背景 1.2 主定理内容 2. 主定理的应用 2. ...

  7. 递归算法时间复杂度的数学证明过程(主定理)

    由于平常的工作有时候会碰到递归,又刚好看到了这个主定理,因此多了解了一点,了解这个定理大致是怎么推导的.本文内容主要参照B站视频https://www.bilibili.com/video/BV1Q7 ...

  8. Sperner定理及其证明

    Sperner定理及其证明 额,最近看到了一个十分有趣的定理--Sperner定理.其实这个定理在OI中没什么用处,因此我都没把这篇文章放到我的OI标签里(不知道在MO中是否有用?)但是觉得它很有趣于 ...

  9. 【博弈论】纳什定理及其证明

    [博弈论]纳什定理及其证明 一.纳什定理的内容 二.布劳尔不动点定理的内容 三.纳什定理的证明 一.纳什定理的内容 定理内容:若允许玩家采用混合策略,则任何有限博弈均存在一个纳什均衡. 有限博弈的含义 ...

最新文章

  1. 实用精美的导航条制作
  2. Vue2.0配置mint-ui踩过的那些坑
  3. js -- 移动端pc端自动切换
  4. php 获取网卡mac
  5. 数据结构- 栈(实现综合计算器)(一位数计算 扩展到 多位数计算)
  6. QT每日一练day3:Qt的编译机制
  7. QQ邮箱鸡肋存储型XSS漏洞利用
  8. win7 32 java_Win7 32位系统下Java开发环境的安装及配置
  9. 初始化Maven本地仓库
  10. 修改服务器电脑mac地址,修改服务器电脑mac地址
  11. AAAI 2021论文推荐丨图神经网络成研究热点
  12. 矩阵并行加速之NENO与SSE
  13. 计算机品牌及介绍,【推广】电脑电源参数和品牌的介绍
  14. 性能测试报告包括哪些内容?模板范文哪里找?看这里
  15. 智能物流机器人蓝胖子完成A+轮融资,这是一家怎样的公司?
  16. Rockland Immunochemicals丨GFP抗体-荧光素结合物
  17. k8s重启导致node没有成功连接:The connection to the server localhost:8080 was refused - did you specify the righ
  18. linux 实验感悟_linux实训心得_linux实习心得体会范文
  19. Win10中的ERDAS 9.2安装(附下载链接)
  20. 【ESP32_8266_WiFi (十三)】ESP8266自动配网 – WiFiManager库使用说明

热门文章

  1. Element Plus 虚拟化表格组件的使用(排序、筛选、自定义单元格渲染) - 个人使用总结
  2. Unity UI架构设计理念
  3. CTU Open Contest 2016 Suspicious Samples(单调队列)
  4. itext 简介、中文文档、中英对照文档 下载
  5. PTA 22-23-1学期《数据结构》拓展练习题集
  6. 二叉树、二叉查找树与红黑树的原理及Java实现
  7. mysql怎么创建库和创建表?
  8. IgnoreActorWhenMoving
  9. 正常脑电与癫痫脑电信号特点
  10. [WTL/ATL]_[中级]_[自定义TrackBar]