时间复杂度计算的主方法

  主方法要比那什么代入法好很多啊,代入法就是先凭经验猜一个较好的界,然后再代入证明,运气好猜对了,证明却不对,运气不好都猜不对。

  先介绍下主定理,主定理有条件限制,先看看主定理给出递归式:

T(n) = aT(n/b) + f(n);(a ≥ 1,b > 1)
其中 a 是子问题个数,n/b是每个子问题的规模(n/b不是总是整数,所以应将其看作[n/b](上取整或下取整)),f(n)是一个函数(分和治的总代价)。

  好了,主方法的介绍就暂时到此为止了,为了做为复习和加固记忆所以把书上的手打了一遍,过于细节的和我也还模糊的知识点就跳过了,所以要了解的还有很多,但如书上所说,牢记主方法的三个条件就可以解决大部分递归式,甚至不用笔和纸...=v=,多方便。

--------------------------------2017 9.24. 12:23:39----------------------

  写完后发现博客园不支持LaTeX的公式编辑图片?反正不能正常显示...于是上面的都是图片 (¯﹃¯)...

时间: 2024-10-11 11:09:07

时间复杂度计算的主方法的相关文章

计算算法时间复杂度的主方法的一种较为简洁的记忆方法

这阵子在认真地看着算法导论,之前看到第四章计算分治法的时间复杂度的计算方法被称为“主方法”,运用这个主方法可以快速地口算出分治算法的递归式的时间复杂度,以下给出算法导论里关于主方法的描述吧,我就直接截图 不得不说,算法导论是一本非常偏向于数学的算法书,里面的对于各种算法结论的正确性大都有着严格的数学上的推导.之前对于主方法的描述只是大略地看了一下,看是看懂了,但是当时没有刻意将这个结论记下来,当我往后看遇到递归式求解部分的时候发觉还是忘记了主方法的求解过程,只能模糊记得部分而已,昨天晚上再复习的

Java之面向对象概述,类,构造方法,static,主方法,对象

一.面向对象概述 面向过程 "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想.这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响.与面向对象明显的不同就是封装.继承.类. "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想."面向过程"也可称之为"面向记录"编程思想,他们不支持丰富的"面向对象"特性(比如继承.多态),并且它们

转:master公式(主方法)

master公式(也称主方法)是利用分治策略来解决问题经常使用的时间复杂度的分析方法,(补充:分治策略的递归解法还有两个常用的方法叫做代入法和递归树法),众所众知,分治策略中使用递归来求解问题分为三步走,分别为分解.解决和合并,所以主方法的表现形式: T [ n ]=a T[ n / b ] + T ( N ^ d) 其中a>=1 and b>1 是常量,其表示的意义是n表示问题的规模,a表示递归的次数也就是生成的子问题数,b表示每次递归是原来的1/b之一个规模,f[n]表示分解和合并所要花费

方法与主方法

1 方法 如果方法没有返回值,则必须写void,不能省略 如果有返回值,则定义的方法的类型必须和方法体内返回值的类型相同 public String returnString(){ return"返回值是字符串类型" } 2 主方法 它是程序的入口. public static void main(String[] args){ }

交换基本数据类型的方法swap,并影响到主方法

不知道朋友在哪里看到的问题,qq来问我,题目是:在不修改主方法的前提下使用一个方法交换两个int的值,方法如下: public static void main(String[] args) { Integer a = 1; Integer b = 2; System.out.println("交换前:a="+a+",b="+b); swap(a,b); System.out.println("交换后:a="+a+",b="+

JAVA 主函数(主方法)

主函数(主方法) 1.public     (访问修饰符,公共的)代表该类或者该方法访问权限是最大的 2.static    代表主函数随着类的加载而加载 3.void    代表主函数没有具体的返回值 4.main    main不是java中的关键字,它是一个特殊的单词,它能够被JVM(java虚拟机)所识别 5.String[] args    函数的参数类型是一个字符串数组,该数组的元素是字符串,这个数组传入值的方法是在运行的时候传入,例如:javac Index.java 编译java

面向对象:封装(一):构造函数;类的主方法;权限修饰符;对象的创建

对象:一切皆为对象. 对象包括两部分内容:属性(名词形容词),行为(动词). 对象和对象之间是有关系的. 派生(子类与父类的关系),关联,依赖. 类:对同一类别的众多对象的一种抽象. 类,还是用来生成对象的一种模板,对象是类的一种具体化的表现. 面向对象的三大特性:封装,继承,多态. 一:类的定义: class 类名{ 访问修饰符 成员变量的定义; 访问修饰符 成员函数(方法)的定义; } 例1: public class Student{ public String name; public

参数可以在子方法中赋值,主方法中得到

今天看一同事的代码 list可以从另一个方法中获得值,看上去有点奇怪..list在主方法中创建并传到方法中,没有赋值的,没想到的是,在子方法中赋值,这个值居然可以带到父方法中来.. 1 import java.util.*; 2 3 public class Test { 4 public static void main(String[] args) { 5 6 Person person = new Person(); 7 int a = 100; 8 int b = person.doPe

主方法main的定义说明

主方法必须有几下几点,缺一不可: 1.访问控制符为public 2.必须为静态方法,须有static修饰 3.返回类型为void 4.方法参数为string类型的数组,数组名任意但必须满足标示符规范. ==========一下定义的main()方法,都是正确的========== //1.默认 public static void main(String[] args) { System.out.println("main method....."); } //2.static修饰符提