【初赛】主定理(时间复杂度)
有错误欢迎指出
主定理:
对于\(T(n)=aT(\dfrac{n}{b})+f(n),T(1)=O(1)\),有:
- \(f(n)=O(n^{\log_ba-\epsilon})\),\(\epsilon>0\)时,\(T(n)=\Theta(n^{\log_b a})\)
- \(f(n)=\Theta(n^{\log_ba}\log_b^l n)\)时,\(T(n)=\Theta(n^{\log_b a}\log_b^{l+1} n)\)
- \(f(n)=\Omega(n^{\log_ba+\epsilon})\),\(\epsilon>0\)且有一实数\(c\)满足\(0<c<1,af(\dfrac{n}{b})\leq cf(n)\)时,\(T(n)=\Theta(f(n))\)。
递推式转化和式
对于\(T(n)=aT(\dfrac{n}{b})+f(n),T(1)=O(1)\)的式子,我们假设\(n=b^k,k\)为正整数,则有:
\(T(n)=aT(\dfrac{n}{b})+f(n)\)
\(=a(aT(\dfrac{n}{b^2})+f(\dfrac{n}{b}))+f(n)\)
\(=a^2T(\dfrac{n}{b^2})+af(\dfrac{n}{b})+f(n)\)
\(=a^3T(\dfrac{n}{b^3})+a^2f(\dfrac{n}{b^2})+af(\dfrac{n}{b})+f(n)\)
\(=a^k\times T(1)+\sum\limits_{j=0}^{k-1}a^jf(\dfrac{n}{b^j})\)
\(=a^{\log_b n}+\sum\limits_{j=0}^{k-1}a^jf(\dfrac{n}{b^j})\)
\(=n^{\log_b a}+\sum\limits_{j=0}^{k-1}a^jf(\dfrac{n}{b^j})\)
上一步是由\(a^{\log_bc}=(b^{\log_ba})^{\log_bc}=b^{\log_ba\times\log_bc}=(b^{\log_bc})^{\log_ba}=c^{\log_ba}\)得到的。
接下来研究\(T(n)-n^{\log_b a}\)即可,不妨设其为\(t(n)\)。
情况1 \(f(n)=O(n^{\log_ba-\epsilon})\),\(\epsilon>0\)
\(t(n)=\sum\limits_{j=0}^{k-1}a^jf(\dfrac{n}{b^j})\)
\(=\sum\limits_{j=0}^{k-1}a^j(\dfrac{n}{b^j})^{\log_b a-\epsilon}\)
\(=n^{\log_b a-\epsilon}\sum\limits_{j=0}^{k-1}\dfrac{a^j}{b^{j(\log_b a-\epsilon)}}\)
\(=n^{\log_b a-\epsilon}\sum\limits_{j=0}^{k-1}\dfrac{a^jb^{j\epsilon}}{b^{j\log_b a}}\)
\(=n^{\log_b a-\epsilon}\sum\limits_{j=0}^{k-1}b^{j\epsilon}\)
\(=n^{\log_b a-\epsilon}(\dfrac{(b^\epsilon)^{k}-1}{(b^\epsilon)-1})\)
\(=n^{\log_b a-\epsilon}(\dfrac{n^{\epsilon}-1}{(b^\epsilon)-1})\)
\(=\dfrac{n^{\log_b a}-n^{\log_b a-\epsilon}}{(b^\epsilon)-1}\)
所以\(t(n)=\Theta(n^{\log_b a})\),所以\(T(n)=\Theta(n^{\log_b a})\)
情况2 \(f(n)=\Theta(n^{\log_ba}\log_b^l n)\)
\(t(n)=\sum\limits_{j=0}^{k-1}a^jf(\dfrac{n}{b^j})\)
\(=\sum\limits_{j=0}^{k-1}a^j(\dfrac{n}{b^j})^{\log_b a}\log_b^l\dfrac{n}{b^j}\)
\(=n^{\log_b a}\sum\limits_{j=0}^{k-1}\dfrac{a^j}{b^{j\log_b a}}\log_b^l\dfrac{n}{b^j}\)
\(=n^{\log_b a}\sum\limits_{j=0}^{k-1}(k-j)^l\)
\(\leq n^{\log_b a}k^{l+1}\)
\(=n^{\log_b a}\log_b^{l+1} n\)
所以\(T(n)=\Theta(n^{\log_b a}\log_b^{l+1} n)\)
情况3 \(f(n)=\Omega(n^{\log_ba+\epsilon})\),\(\epsilon>0\)且有一实数\(c\)满足\(0<c<1,af(\dfrac{n}{b})\leq cf(n)\)
\(t(n)=\sum\limits_{j=0}^{k-1}a^jf(\dfrac{n}{b^j})\)
\(\leq \sum\limits_{j=0}^{k-1}c^jf(n)=f(n)\sum\limits_{j=0}^{k-1}c^j\)
\(\leq f(n)\sum\limits_{j=0}^{\infty}c^j\)
\(=\dfrac{f(n)}{1-c}\leq f(n)\)
所以\(t(n)=\Theta(f(n))\),且\(t(n)>O(n^{\log_b a})\),所以\(T(n)=\Theta(f(n))\)
原文地址:https://www.cnblogs.com/mod998244353/p/15222847.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 30 分钟轻松搞定正则表达式基础
- Vant引入CDN实现图片懒加载
- Js时间戳倒计时天时分秒
- 微信小程序引用we-cropper裁切图片
- NodeJs获取get/post传值
- Mybatis源码本地化构建Demo
- NodeJs封装静态web服务器、路由、读取文件获取响应类型
- NodeJs使用ejs模板引擎实现后端渲染
- 如何优雅地本地化构建Mybatis源码
- Vue监听返回键关闭弹出层不返回页面
- Css添加div点击态
- Mybatis源码笔记之浅析ParameterHandler
- SpringBoot总结之浅析自动化配置原理
- Vue用keep-alive实现页面缓存
- Mybatis源码笔记之浅析StatementHandler