算法复杂度分析

算数级数:与末项平方同阶

T(n) = 1+2+…+n = n(n+1)/2 = O(n2)

幂方级数:比幂次高出一阶

T2(n) = 12 + 22 + 32 + … + n2 = n(n+1)(2n+1)/6 = O(n3)

T3(n) = 13 + 23 + 33 + … + n3 = n2(n+1)2/4 = O(n4)

T4(n) = 14 + 24 + 34 + … + n4 = n(n+1)(2n+1)(3n2 + 3n -1)/30 = O(n5)

几何级数(a > 1):与末项同阶

Ta(n) = a0 + a1 + … + an = (an+1 -1)/(a - 1) = O(an)

1 + 2 + 4 + … + 2n = 2n+1 - 1 = O(2n+1) = O(2n)

收敛级数

1/1/2 + 1/2/3 + 1/3/4 + … + 1/(n-1)/n = 1 - 1/n = O(1)

1 + 1/22 + … + 1/n2 < 1 + 1/22 + … = π2/6 = O(1)

1/3 + 1/7 + 1/8 + 1/15 + 1/24 + 1/26 + 1/31 + 1/35 + … = 1 = O(1)

可能未必收敛,但是长度有限

调和级数 : h(n) = 1 + 1/2 + 1/3 + … + 1/n = O(log(n))

对数级数 : log(1) + log(2) + log(3) + … + log(n) = log(n!) = O(nlog(n))

时间: 2024-10-17 23:50:32

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

算法9-4:最大流算法复杂度分析

前面一节介绍了Ford-Fulkerson算法.那么这个算法是否一定能够在有限步骤内结束?要多少步骤呢? 这个问题的答案是,该算法确实能够在有限步骤之内结束,但是至于需要多少步骤,就要仔细分析. 为了分析问题,需要假定图中所有边的容量都是整数.但是有个严重的问题,比如下图中,如果使用Ford-Fulkerson算法,需要迭代200次才能结束. 首先将所有边的容量都初始化为0. 第一次迭代和第二次迭代之后,两条边各增加了1. 到最后200次迭代之后整个算法才结束. 这还不算最坏的情况.因为整数最多

转 算法复杂度分析

转自 http://www.cnblogs.com/gaochundong/p/complexity_of_algorithms.html 为什么要进行算法分析? 预测算法所需的资源 计算时间(CPU 消耗) 内存空间(RAM 消耗) 通信时间(带宽消耗) 预测算法的运行时间 在给定输入规模时,所执行的基本操作数量. 或者称为算法复杂度(Algorithm Complexity) 如何衡量算法复杂度? 内存(Memory) 时间(Time) 指令的数量(Number of Steps) 特定操作

数据结构基础 算法复杂度分析(二) 典例篇

示例代码(1) decimal Factorial(int n) { if (n == 0) return 1; else return n * Factorial(n - 1); } [分析] 阶乘(factorial),给定规模 n,算法基本步骤执行的数量为 n,所以算法复杂度为 O(n). 示例代码(2) int FindMaxElement(int[] array) { int max = array[0]; for (int i = 0; i < array.Length; i++)

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

算法复杂度分为时间复杂度和空间复杂度 首先要清楚一点,大O表示法的时间复杂度高不代表程序运行时间长,空间复杂度高不代表占用空间多. 他们表示的是代码执行时间随着数据规模增长的变化趋势.和算法储存空间与数据规模之间的增长关系. 时间复杂度判断方法 1.只关注循环次数最多的一段代码 2.加法法则:总复杂度等于量级最大的那段代码的复杂度 3.乘法原则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 常见的复杂度量级(按数量级递增) 常量阶:O(1) 对数阶:O(logn) 线性阶:O(n) 线性对数阶:

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

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

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

一.大 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 的角度来看,这段代码的每一行都执

数据结构基础 算法复杂度分析(一) 概念篇

为什么要进行算法分析? 预测算法所需的资源 计算时间(CPU 消耗) 内存空间(RAM 消耗) 通信时间(带宽消耗) 预测算法的运行时间 在给定输入规模时,所执行的基本操作数量,或者称为算法复杂度(Algorithm Complexity) 如何衡量算法复杂度? 内存(Memory) 时间(Time) 指令的数量(Number of Steps) 特定操作的数量 磁盘访问数量 网络包数量 渐进复杂度(Asymptotic Complexity) 算法的运行时间与什么相关? 取决于输入的数据.(例

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

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

[算法]复杂度分析

时间复杂度 时间复杂度的分析 只关注循环执行次数最多的一段代码,因为使用大O表示法,其他执行次数较少的复杂度可以忽略 加法法则:总复杂度等于量级最大的那段代码的复杂度 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 常见的时间复杂度示例 复杂度从低阶到高阶为:(复杂度越高阶,执行效率越低) O(1).O(logn).O(n).O(nlogn).O(n^2) O(1) 该时间复杂度表示代码的执行时间可以认为与输入n无关,是一个固定的值 O(logn)&O(nlogn) o(logn)复杂度