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

article/2025/9/19 3:15:40

主定理是一个非常有用的定理,前面我们学习的所有知识都可以用主定理来求解,而不必要使用复杂的计算方法来求解

文章目录

    • 1. 主定理
      • 1.1 主定理的应用背景
      • 1.2 主定理内容
    • 2. 主定理的应用
      • 2.1 求解递推方程 例1
      • 2.2 求解递推方程 例2
      • 2.3 求解递推方程 例3
    • 3. 总结

1. 主定理

1.1 主定理的应用背景

求解递推方程:

T(n) = a T(n/b) + f(n)

其中:

  • a: 归约后的子问题个数
  • n/b:归约后子问题的规模
  • f(n):归约过程及组合子问题的解的工作量

例如前面的文章我们曾求解过:

  • 二分检索: T(n) = T(n/2)+1
  • 二分归并排序: T(n) =2T(n/2)+n-1

现在想要求解这些式子,不再像以前那样采用各种技巧进行求解,可以直接通过主定理进行求解:

1.2 主定理内容

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

在这里插入图片描述

主定理的证明过程略

2. 主定理的应用

2.1 求解递推方程 例1

T(n) = 9T(n/3) + n

上述递推方程中:

a = 9, b = 3,f (n) = n,所以:
在这里插入图片描述
相当于主定理的case1,其中 ξ \xi ξ =1.
根据定理得到 T(n) = Θ \Theta Θ (n2)

2.2 求解递推方程 例2

T(n) = T(2n/3) + 1

上述递推方程中的

a = 1, b = 3/2, f(n) = 1,

n l o g 3 / 2 1 = n 0 = 1 n^{log_{3/2}1} = n_0 = 1 nlog3/21=n0=1

相当于主定理的Case2 .

根据定理得到T(n) = Θ \Theta Θ( log n)

2.3 求解递推方程 例3

求解递推方程

T(n) = 3T(n/4) + nlogn

上述递推方程中的

a=3, b=4, f(n)=nlogn

所以:在这里插入图片描述
取 = 0.2 即可.

ξ \xi ξ =0.2即可

条件验证:

在这里插入图片描述

3. 总结

对于之前的二分搜索则对应主定理的case2,二分归并排序则也对应主定理的case2,可以直接利用主定理求解。

但是也有很多时候不能使用主定理,如果不能使用,就使用递归树或者迭代法等方法求解。


http://chatgpt.dhexx.cn/article/MVA7YwqK.shtml

相关文章

主定理 Master Theorem

分治法主定理 主定理的证明 假设有递归式: T ( n ) a T ( n b ) f ( n ) T(n) aT(\frac{n}{b}) f(n) T(n)aT(bn​)f(n) 证明: T ( n ) a T ( n / b ) f ( n ) T(n) aT(n/b) f(n) T(n)aT(n/b)f(n) a [ a T ( n / b 2 ) f ( n / b ) ] f ( n…

基于主定理以及递推树求解递归算法的时间复杂度

非递归算法的时间复杂度可以通过找到执行次数最多的代码,计算其执行次数即可。但是递归算法的时间复杂度则无法通过这种方式求得。有一种最简单的求递归算法的方式,即利用递推方法求解时间复杂度。如下所示: 这种方法求时间复杂度很简单&…

时间复杂度-主定理分析

目录 1.定理 2.举例 1.定理 主定理分析是一种时间复杂度的计算方式,当时间复杂度推根据实际情况推算出来是下面T(n)的形式的时候,可以通过主定理分析计算它的时间复杂度。 其实就是根据前半部分的a,b,计算出一个结果,再和后面的…

递归式求解-主定理

1.主定理:设a>1和b>1为常数,设f(n)为一函数,T(n)由递归式 对非负整数定义,其中n/b指下取整或上取整.那么T(n)可能有如下的渐进界: (1)若对于某常数 ε>0,有,则; (2)若.则; (3)若对于某常数 ε>0,有,且某常数 c<1与所有足够大的n,有,则 2.主定理的使用方法. 由主…

使用主定理求时间复杂度

文章目录 使用主定理求时间复杂度主定理直接可用主定理转化之后可以利用主定理使用主定理求时间复杂度 很多算法最后都可以写出 T ( n ) = a T ( n b ) + f ( n ) ) ( a ≥ 1 , b ≥ 1 ) T(n)=aT(\frac{n}{b}) + f(n)) (a\ge1,b\ge1) T(n)=aT(bn​)+f(n))(a≥1,b≥1) 的递推式…

主定理学习笔记

主定理用于求递推方程的阶。 设a>1, b>1为常数&#xff0c;f(n)为函数&#xff0c;T(n)为非负整数&#xff0c;且 T(n) aT(n/b) f(n) &#xff08;注意a、b取值范围&#xff09; a代表递归调用子问题的个数(子问题数>小于原问题&#xff0c;故a>1)n / b代表子…

主定理证明

转自GoogleSite算法导论习题解答&#xff0c;先fork一下 算法导论其实已经给出了具体的证明步骤&#xff0c;但是还是有些省略&#xff0c;此文章是对主定理进行了完全的证明&#xff1b; 主定理的证明大致分为两个阶段&#xff1a; (1)假设n为b的整数次幂&#xff0c;如1,b,b^…

主定理(递归式分析)

上图来自《算法导论》 其意思为&#xff1a; 令a≥1&#xff0c;b>1都是常数&#xff0c;f(n)是一个函数 T&#xff08;n&#xff09;是定义在非负整数上的递推式&#xff1a; 1、对某个常数&#xff0c;有&#xff0c;则 2、若&#xff0c;则 3、对某个常数&#xff…

主定理学习及理解

主定理证明 请参考该文章: https://wenku.baidu.com/view/993d716a84868762cbaed522.html 主定理理解运用 看完上面的推导证明, 想必对主定理的推导有了一定理解, 那么又如何理解运用呢? 先晒下公式: 公式大致阐明了三种情况: f(n) < nlogb a, 则取时间复杂度为O(nlogb…

主定理

《目录》 使用主定理求解递归式? 算例 ?证明主定理 使用主定理求解递归式 主定理是分治算法分析中非常重要的定理。 如&#xff0c;我们要处理一个 规模为 的问题通过分治&#xff0c;得到 个规模为 的问题&#xff0c;分解子问题和合并子问题的时间是 &#xff1a; 在上…

主定理(Master Theorem)

主定理是分析分治算法时间复杂度很重要的一个定理。 我们之前对于一个递归类的代码进行时间复杂度分析&#xff0c;一般会采用递归树的方式&#xff0c;下面我们先介绍一下递归树的方式&#xff0c;理解之后&#xff0c;再引入主定理的相关内容。 分治的介绍 分治算法总是将…

主定理(Master Theorem) 及其应用

主定理"Master Theorem" 一、主定理(Master Theorem)二、应用举例 在分析算法的时候&#xff0c;我们经常需要分析递归算法的时间复杂度。 一、主定理(Master Theorem) 主定理适用于求解如下递归式算法的时间复杂度&#xff1a; 其中&#xff1a; n 是问题规模大…

2020.10.27【GWAS】丨使用vcftools绘制pi(θπ) 选择消除分析图

这两天在整理GWAS流程&#xff0c;发现绘制θπ选择消除分析图在网上只能找到计算π的代码&#xff0c;但是没有绘图代码&#xff0c;于是自己搞了一下&#xff0c;供大家参考。 vcftools --vcf AxiomGT1.calls.vcf --window-pi 1000 --window-pi-step 1000 --out GT1_pi 生成…

使用vcftools或者gcta计算群体间固定指数(Fixation index,FST)

下列所用到的数据均为千人基因组数据库 1、通过vcftools计算FST 命令行如下&#xff1a; ./vcftools --vcf input_data.vcf --weir-fst-pop population_1.txt --weir-fst-pop population_2.txt --out pop1_vs_pop2 其中&#xff0c;input_data.vcf就是输入的vcf格式 population…

那些在vcftools安装上踩的坑

[TOC]那些在vcftools上踩的坑 那些在vcftools安装上踩的坑 近期由于学习需要所以需要安装vcftools做基因比对分析。然后的然后就各种问题来了… vcftools在kail linux 系统下安装 老生常谈的话题就直接上代码吧。 // 这个想必大家都很熟悉 tar -zxvf vcftools_0.1.13.tar.…

vcftools如何在Linux系统中安装

这里&#xff0c;记录一下vcftools的安装教程。 1. 下载 https://vcftools.github.io/examples.html 下载到本地&#xff0c;上传到服务器中。 2. 解压缩 unzip vcftools-vcftools-v0.1.16-18-g581c231.zipcd vcftools-vcftools-581c231/3. 安装 bash autogen.sh ./configur…

vcftools 安装 (bash autogen.sh ./configure出问题)

安装可以直接从gitclone安装&#xff0c;省略下载安装包及解压的过程&#xff0c;代码如下 git clone https://github.com/vcftools/vcftools.git 官方的教程步骤接下来是配置环境及安装 bash autogen.sh ./configure make make install 但是我之前一直在这一步卡了很久…

vcftools-linux-conda安装、使用

shell conda命令安装&#xff1a; conda install -c bioconda vcftoolsvcftools文档&#xff1a; OUTPUT FILE OPTIONS--out <output_prefix>This option defines the output filename prefix for all files generated by vcftools. For example, if <prefix> is…

Chr函数

函数chr&#xff08;&#xff09;的作用是返回其参数所表示的字符&#xff0c;参数是这个字符的ASCII码。 CHR函数&#xff0c;传入一个数值&#xff0c;返回这个数值对应的ascii码字符&#xff0c;比如chr(65)输出的是大写的A 示例&#xff1a; Private Sub Command2_Click…

Python笔记:内置函数chr()用法

chr(i) chr()&#xff1a;输入一个整数【0&#xff0c;255】返回其对应的ascii符号&#xff0c;相反ord&#xff08;&#xff09;函数就是用来返回单个字符的ascii值&#xff08;0-255&#xff09;或者unicode数值&#xff08;&#xff09;参数 i :可以是10进制也可以是16进制的…