算法设计与分析 - 主定理Master theorem (分治法递推时间复杂度)
英文原版不上了 直接中文
定义
假设有递推关系式T(n)=aT(n/b)+f(n)
其中n为问题规模
a为递推的子问题数量
n/b为每个子问题的规模(假设每个子问题的规模基本一样)
f(n)为递推以外进行的计算工作,无需参加递归
定理
a≥1,b>1为常数,f(n)为函数,T(n)为非负整数。则有以下结果(分类讨论):
(1)若f(n)=O(nlogba-ε)存在ε>0,就是当nlogba的阶高于f(n)时,可以存在ε使得nlogba-ε和f(n)的阶相同。此时取T(n)=θ(nlogba)
(2)若f(n)=Θ(nlogba) 注意这时nlogba的阶和f(n)的阶相同,不需要ε。此时取T(n)=Θ(nlogbalogn)
(3)若f(n)=Ω(nlogba+ε)首先得存在ε>0,就是当nlogba的阶低于f(n)时,可以存在ε使得nlogba+ε和f(n)的阶相同,即有足够大的n,而当af(n/b)<=cf(n), c<1此时取T(n)=Θ(f(n))
定义二
递推式子可以为T(n)=aT(n/b)+cnk 其中 cnk 表示原问题分解成子问题和将子问题的解合并成原问题的解的时间,对其分析可得到
O(n^{log_ba}) & a > b^k \\
O(n^k·log_bn) & a = b^k \\
O(n^k) & a < b^k
\end{cases}\]
示例
T(n) = 9T(n/3)+n
此时 a = 9, b = 3, k = 1, f(n) = n, 满足a > bk 所以套用定理条件1 T(n) = θ(nlogba) = O(n²)
T(n) = 2T(n/2)+2n
此时 a = 2, b = 2, k = 1, f(n) = 2n, 满足a = bk,所以套用定理条件2 T(n) = O(nk·logbn) = O(nlog2n)
T(n) = 2T(n/4)+n²
此时 a = 2, b = 4, k = 2, f(n) = n², 满足 a < bk, 所以套用定理条件3 T(n) = O(n^k) = O(n²)
T(n) = 2T(n½)+logn
a = 2, b = 1, f(n) = logn ... 不考 暂且放置..
算法设计与分析 - 主定理Master theorem (分治法递推时间复杂度)的更多相关文章
- 对主定理(Master Theorem)的理解
前言 虽说在学OI的时候学到了非常多的有递归结构的算法或方法,也很清楚他们的复杂度,但更多时候只是能够大概脑补这些方法为什么是这个复杂度,而从未从定理的角度去严格证明他们.因此借着这个机会把主定理整个 ...
- 【技术文档】《算法设计与分析导论》R.C.T.Lee等·第7章 动态规划
由于种种原因(看这一章间隔的时间太长,弄不清动态规划.分治.递归是什么关系),导致这章内容看了三遍才基本看懂动态规划是什么.动态规划适合解决可分阶段的组合优化问题,但它又不同于贪心算法,动态规划所解决 ...
- 算法设计与分析 - AC 题目 - 第 5 弹(重复第 2 弹)
PTA-算法设计与分析-AC原题 - 最大子列和问题 (20分) 给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+, ..., Nj },其中 ≤i ...
- 算法设计与分析 - AC 题目 - 第 2 弹
PTA-算法设计与分析-AC原题7-1 最大子列和问题 (20分)给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1 ...
- 算法设计与分析-Week12
题目描述 You are given coins of different denominations and a total amount of money amount. Write a func ...
- 算法设计与分析 - 李春葆 - 第二版 - html v2
1 .1 第 1 章─概论 1.1.1 练习题 1 . 下列关于算法的说法中正确的有( ). Ⅰ Ⅱ Ⅲ Ⅳ .求解某一类问题的算法是唯一的 .算法必须在有限步操作之后停止 .算法 ...
- 算法设计与分析(李春保)练习题答案v1
1.1第1 章─概论 1.1.1练习题 1.下列关于算法的说法中正确的有(). Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模 ...
- 算法设计与分析 - 李春葆 - 第二版 - pdf->word v3
1.1 第1章─概论 练习题 . 下列关于算法的说法中正确的有( ). Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 Ⅳ. ...
- 算法设计与分析 - 李春葆 - 第二版 - pdf->word v1
章─概论 练习题 . 下列关于算法的说法中正确的有( ).Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊Ⅳ.算法执行后一定产 ...
随机推荐
- 【Kubernetes学习笔记】-kubeadm 手动搭建kubernetes 集群
目录 K8S 组件构成 环境准备 (以ubuntu系统为例) 1. kubernetes集群机器 2. 安装 docker. kubeadm.kubelet.kubectl 2.1 在每台机器上安装 ...
- 题解-[NOI2005]瑰丽华尔兹
题解-[NOI2005]瑰丽华尔兹 [NOI2005]瑰丽华尔兹 \(n\times m\) 的矩阵.以 \((x,y)\) 为起点.一共 \(k\) 段时间,每段时间为 \([s_i,t_i](t_ ...
- 利用vs pcl库将多个PCD文件合并成一张PCD地图
主机环境:win10系统,pcl库1.11.1, vs2019 pcl库安装以及环境配置如下连接: https://www.jb51.net/article/190710.htm 代码很简单,主要是做 ...
- web前端js实现资源加载进度条
进度条核心方法,通常j不考虑判断到100,根据项目中的图片数量可能有所差异所以到95就可以了 //根据图片load进度条 function loadingAsImgLength(){ var prec ...
- Java中四舍五入
1.Math中四舍五入的方法 Math.ceil(double a)向上舍入,将数值向上舍入为最为接近的整数,返回值是double类型 Math.floor(double a)向下舍入,将数值向下舍入 ...
- oracle ADG启动顺序
一.oracle ADG启动顺序 1.启动主备库监听 [oracle@dgdb1 ~]$ lsnrctl start [oracle@dgdb2 ~]$ lsnrctl start 2.启动备库 ...
- JavaSE02-基本语法
1.注释 注释是对代码的解释和说明文字,可以提高程序的可读性,因此在程序中添加必要的注释文字十分重要. Java中的注释分为三种: 单行注释.单行注释的格式是使用//,从//开始至本行结尾的文字将作为 ...
- 快用Django REST framework写写API吧
Django默认是前后端绑定的,提供了Template和Form,现在流行前后端分离项目,Python大佬坐不住了,于是便有了Django REST framework:https://github. ...
- MetaException(message:Could not connect to meta store using any of the URIs provided. Most recent failure: org.apache.thrift.transport.TTransportException: java.net.ConnectException: 拒绝连接 (Connection
hive在hive-site.xml中配置hive.metastore.uris属性,后启动异常 hive异常 [fan@master hive-0.13.1-cdh5.3.6]$ bin/hive ...
- 记一次 HBase Master is initializing 问题处理
问题 hbase shell中建立建表出错 分析 org.apache.hadoop.hbase.PleaseHoldException: Master is initializing代表Master ...