常用算法的时间复杂度分析

按数量级递增排列,常见的时间复杂度有:
常数阶O(1),对数阶O(log2n),线性阶O(n),
线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),...,

k次方阶O(n^k),指数阶O(2^n)。随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。

时间复杂度:基本操作重复执行的次数的阶数 T(n)=o(f(n))
以下六种计算算法时间的多项式是最常用的。其关系为:
 O(1)<O(logn)<O(n)<O(nlogn) <O(n2)<O(n3)
指数时间的关系为:
   O(2n)<O(n!)<O(nn)
   当n取得很大时,指数时间算法和多项式时间算法在所需时间上非常悬殊。

以下是一些常见时间复杂度的例子。

名称     复杂度类     运行时间(T(n))     运行时间举例     算法举例
常数时间     
    O(1)     10     判断一个二进制数的奇偶
反阿克曼时间     
    O(\alpha(n))     
    并查集的单个操作的平摊时间
迭代对数时间     
    O(\log^{*}n)     
    en:Cole-Vishkin algorithm
对数对数时间     
    O(\log \log n)     
    有界优先队列的单个操作[1]
对数时间     DLOGTIME     O(\log n)     \log n,\log n^2     二分搜索
幂对数时间     
    (\log n)^{O(1)}     (\log n)^2     
(小于1次)幂时间     
    O(n^c),其中0 < c < 1     n^{\frac{1}{2}},n^{\frac{2}{3}}     K-d树的搜索操作
线性时间     
    O(n)     n     无序数组的搜索
线性迭代对数时间     
    O(n\log^{*}n)     
    Raimund Seidel的三角分割多边形算法
线性对数时间     
    O(n\log n)     n\log n,\log n!     最快的比较排序
二次时间     
    O(n^2)     n^2     冒泡排序、插入排序
三次时间     
    O(n^3)     n^3     矩阵乘法的基本实现,计算部分相关性
多项式时间     P     2^{O(\log n)} = n^{O(1)}     n,n \log n,n^{10}     线性规划中的en:Karmarkar‘s algorithm,AKS质数测试
准多项式时间     QP     2^{(\log n)^{O(1)}}     
    关于有向斯坦纳树问题最著名的O(\log^2 n)近似算法
次指数时间(第一定义)     SUBEXP     O(2^{n^{\epsilon}}),对任意的ε > 0     O(2^{(\log n)^{\log \log n}})     Assuming complexity theoretic conjectures, BPP is contained in SUBEXP.[2]
次指数时间(第二定义)     
    2o(n)     2n1/3     Best-known algorithm for integer factorization and graph isomorphism
指数时间     E     2O(n)     1.1n, 10n     使用动态规划解决旅行推销员问题
阶乘时间     
    O(n!)     n!     通过暴力搜索解决旅行推销员问题
指数时间     EXPTIME     2poly(n)     2n, 2n2     
双重指数时间     2-EXPTIME     22poly(n)     22n     Deciding the truth of a given statement in Presburger arithmetic

常用时间复杂度如图:

---------------------  
作者:听见下雨的声音hb  
来源:CSDN  
原文:https://blog.csdn.net/u010010664/article/details/78834695  
版权声明:本文为博主原创文章,转载请附上博文链接!

原文地址:https://www.cnblogs.com/fengff/p/10950786.html

时间: 2024-10-13 08:41:32

常用算法的时间复杂度分析的相关文章

算法的时间复杂度分析

在上一篇文章中对时间复杂度及其举例进行了简单描述,本篇文章将分析算法的时间复杂度和相关方法. 1.事前分析估算的方法 因事后统计方法更多的依赖于计算机的硬件.软件等环境因素,有时容易掩盖算法本身的优劣.因此人们常常采用事前分析估算的方法.本文对事后统计方法不做描述.在编写程序前,依据统计方法对算法进行估算.一个用高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素: (1). 算法采用的策略.方法:(2). 编译产生的代码质量:(3). 问题的输入规模:(4).  机器执行指令的速度.

常用算法及效率分析

算法即解决问题的方法,算法的核心就是为了提升性能 so 冒泡排序 冒泡一: #_*_coding:utf-8_*_ '''  冒泡排序 ''' import random,time l=range(1000) print(l) random.shuffle(l) print(l) def timer(func):     def _wrapper(*args,**kwargs):         start_time=time.time()         res=func(*args,**kw

算法的时间复杂度和空间复杂度分析

一 算法的时间复杂度分析 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道.但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了.并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多.一个算法中的语句执行次数称为语句频度或时间频度.记为T(n). (2)时间复杂度 在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化.但有时我们想

C++算法之——常用算法总结

http://blog.sina.com.cn/s/blog_61bebe480100v7c7.html 基本的C++算法分为三类:排序算法.树算法.图算法 算法思想有三种:递推.分治.动态规划 以及 贪心算法. 本文将简要介绍上面三类算法,介绍时穿插介绍算法思想. 一.排序算法 1.基本O(n^2)排序算法: (对基本排序算法的时间复杂度分析主要考虑  比较次数.数据交换次数) 冒泡排序:针对数组.本地排序.需要交换数据.O(1)额外空间 选择排序:一般针对数组.本地排序.需要交换数据.O(1

常用排序算法比较与分析

一.常用排序算法简述 下面主要从排序算法的基本概念.原理出发,分别从算法的时间复杂度.空间复杂度.算法的稳定性和速度等方面进行分析比较.依据待排序的问题大小(记录数量 n)的不同,排序过程中需要的存储器空间也不同,由此将排序算法分为两大类:[内排序].[外排序]. 内排序:指排序时数据元素全部存放在计算机的随机存储器RAM中. 外排序:待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中还需要对外存进行访问的排序过程. 先了解一下常见排序算法的分类关系(见图1-1) 图1-1 常见排

【计算机基础】 常用的排序算法的时间复杂度和空间复杂度

常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n) 选择排序 O(n2) O(n2) 稳定 O(1) 二叉树排序 O(n2) O(n*log2n) 不一顶 O(n) 插入排序 O(n2) O(n2) 稳定 O(1) 堆排序 O(n*log2n) O(n*log2n) 不稳定 O(1) 希尔排序 O O 不稳定 O(1) 1

【常用算法思路分析系列】字符串高频题集

本文是[常用算法思路分析系列]的第二篇,分析字符串相关的高频题目.第一篇是关于排序相关的高频题,还没有看的同学请移步:[常用算法思路分析系列]排序高频题集 1.KMP字符匹配 对于两棵彼此独立的二叉树A和B,请编写一个高效算法,检查A中是否存在一棵子树与B树的拓扑结构完全相同,即给定两棵二叉树的头结点A和B,请返回一个boolean值,代表A中是否存在一棵同构于B的子树.上述其实就是一个字符匹配的问题,我们将A.B两棵二叉树进行遍历,得到一个字符串,就是判断B串是否是A串的子串.而字符匹配常用的

【常用算法思路分析系列】与二分搜索相关高频题

本文是[常用算法思路分析系列]的第五篇,总结二分搜索相关的高频题目和解题思路.本文分析如下几个问题:1.求数组局部最小值问题:2.元素最左出现的位置:3.循环有序数组求最小值:4.最左原位:5.完全二叉树计算结点数:6.快速N次方. 本系列前四篇导航: [常用算法思路分析系列]排序高频题集 [常用算法思路分析系列]字符串高频题集 [常用算法思路分析系列]栈和队列高频题集(修改版) [常用算法思路分析系列]链表相关高频题集 二分搜索的重要提醒: 一般我们选择中点进行搜索,会写成mid = (lef

【常用算法思路分析系列】排序高频题集

最近在牛客上整理常用的一些算法思路,[常用算法思路分析系列]主要是针对一些高频算法笔试.面试题目的解题思路进行总结,大部分也给出了具体的代码实现,本篇文章是对排序相关题目的思路分析. 1.简单分类 首先对一些常用算法按空间复杂度进行分类如下: O(1): 冒泡排序.选择排序.插入排序.希尔排序.堆排序 O(logN)~O(N): 快速排序 O(N): 归并排序 O(M): 计数排序.基数排序 2.对一个基本有序的有序的数组排序,选择哪种排序算法? 基本有序:指如果把数组排好序的话,每个元素移动的