递归算法复杂度分析方法

递归算法的复杂度分析方法。

  a、分析出复杂度公式(关于n的规模)

  b、求解这个公式

1、齐次

  例如求fabonaci的第n项,f(n) = f(n-1)+f(n-2)

              => f(n)-f(n-1)-f(n-2)=0

              =>特征方程:x^2-x-1=0

              => x1,x2

              => f(n)=a*x1n + b*x2n

2、master method

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

  

3、采用分析树的方式

举个例子 f(n) = 2*f(n-1) + 1

      1                1 -------------------------------------->  20

   f(n-1)  f(n-1)     ==>       1        1  ---------------------------->  2

      ……        f(n-2)    f(n-2)    f(n-2)   f(n-2)  ---------------------> 22

 所以:  f(n) = 20 + 21 +22 +…… = 2n - 1

时间: 2024-12-29 04:55:33

递归算法复杂度分析方法的相关文章

算法复杂度分析方法以及算法概述

算法定义:解决特定问题的求解步骤的描述. 算法特性:有穷性.确定性.可行性.输入.输出 算法的设计要求:正确性.可读性.健壮性.高效率和低存储量需求 算法度量方法:事后统计方法(不科学).事前分析估算方法 函数的渐近增长:给定两个函数f(n)和g(n),如果存在一个整数N,使得对于所有的n>N,f(n)总是比g(n)大,那么我们说f(n)的增长渐近快于g(n). 于是,可以得出结论:判定一个算法好不好,可以对比算法的关键执行次数函数的渐近增长性,基本就可以分析出:某一个算法,随着n的变大,它会越

斐波那契数与二分法的递归与非递归算法及其复杂度分析

1. 什么是斐波那契数? 这里我借用百度百科上的解释:斐波那契数,亦称之为斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=Fn-1+Fn-2(n>=2,n∈N*),用文字来说,就是斐波那契数列列由 0 和 1 开始,之后的斐波那契数列系数就由之前的两数相加.特别指出:0不是第一

学好数据结构和算法 —— 复杂度分析

复杂度也称为渐进复杂度,包括渐进时间复杂度和渐进空间复杂度,描述算法随数据规模变化而逐渐变化的趋势.复杂度分析是评估算法好坏的基础理论方法,所以掌握好复杂度分析方法是很有必要的. 时间复杂度 首先,学习数据结构是为了解决“快”和“省”的问题,那么如何去评估算法的速度快和省空间呢?这就需要掌握时间和空间复杂度分析.同一段代码运行在不同环境.不同配置机器.处理不同量级数据…效率肯定不会相同.时间复杂度和空间复杂度是不运行代码,从理论上粗略估计算法执行效率的方法.时间复杂度一般用O来表示,如下例子:计

DSA_02:复杂度分析

真正掌握了复杂度分析,可以说 DSA 便掌握了一小半. 复杂度分析分为:时间复杂度分析.空间复杂度分析. 时间复杂度的定义: 并不是指代码执行的具体.确定时间. 它表示的是一个算法执行效率与数据规模增长的变化趋势. 即便代码需要执行成千上万次,只要它不随数据规模变化而变化,那么它的复杂度就是 O(1). 空间复杂度的定义: 类似的,它表示空间占用与数据规模增长的变化趋势 同样,哪怕占用再多的空间,只要它不随数据规模变化而变化,那么它的复杂度就是 O(1). 复杂度的两种表示方法: 1. T(n)

数据结构与算法复杂度分析

一.大 O 复杂度表示法 算法的执行效率,粗略地讲,就是算法代码执行的时间.但是,如何在不运行代码的情况下,用“肉眼”得到一段代码的执行时间呢?这里有段非常简单的代码,求 1,2,3…n 的累加和.现在,来估算一下这段代码的执行时间. 1 int cal(int n) { 2 int sum = 0; 3 int i = 1; 4 for (; i <= n; ++i) { 5 sum = sum + i; 6 } 7 return sum; 8 } 从 CPU 的角度来看,这段代码的每一行都执

杨辉三角(Pascal Triangle)的几种C语言实现及其复杂度分析

说明 本文给出杨辉三角的几种C语言实现,并简要分析典型方法的复杂度. 本文假定读者具备二项式定理.排列组合.求和等方面的数学知识. 一  基本概念 杨辉三角,又称贾宪三角.帕斯卡三角,是二项式系数在三角形中的一种几何排列.此处引用维基百科上的一张动态图以直观说明(原文链接http://zh.wikipedia.org/wiki/杨辉三角): 从上图可看出杨辉三角的几个显著特征: 1. 每行数值左右对称,且均为正整数. 2. 行数递增时,列数亦递增. 3. 除斜边上的1外,其余数值均等于其肩部两数

算法录 之 复杂度分析。

一个算法的复杂度可以说也就是一个算法的效率,一般来说分为时间复杂度和空间复杂度... 注意接下来说的均是比较YY的,适用与ACM等不需严格分析只需要大致范围的地方,至于严格的算法复杂度分析的那些数学证明,主定理什么的在<算法导论>这本书上有十分详细的讲解,网上应该也会有人写过,这里就不多说了(其实,是我不会而已o(╯□╰)o...). — 到底啥是复杂度呢?先来个栗子. 小明有10个苹果,有一天他饿了,然后准备吃掉一个苹果,但是小明有中二病,他要吃里面重量最大的那个,于是...他需要一个找到那

比较排序算法的简单介绍和复杂度分析

标题长坑,就拿最近有在用的来弄吧,先写个大概,以后逐渐完善. 对于以下代码,默认包含头文件: #include<algorithm> 1.冒泡排序(Bubble Sort) 先从课本上最常见的冒泡排序说起吧,C++代码如下(个人习惯介绍算法使用C++,比伪代码还通俗易懂.......) void BubbleSort(int *A, int n) { for (int i = 0;i < n;++i)//遍历数组 { for (int j = n - 1;j > i;--j)//倒

递归算法的时间复杂度分析 转载

在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解.实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比较常用的有以下四种方法: (1)代入法(Substitution Method)        代入法的基本步骤是先推测递归方程的显式解,然后用数学归纳法来验证该解是否合理.        (2)迭代法(Iteration Method)        迭代法的基本步骤是迭代地展开递归方程的右端,使之成为一个非递归的和