搜索
简帛阁>技术文章>常见算法的时间复杂度(大O计数法)

常见算法的时间复杂度(大O计数法)

定义

​ 对于不同的机器环境而言,确切的单位时间是不同的,但是对于算法进行多少个基本操作(即花费多少时间单位)在规模数量级上却是相同的,由此可以忽略机器环境的影响而客观的反应算法的时间效率。

对于算法的时间复杂度效率,我们可以用“大O记法”来表示

“大O记法”:对于单调的整数函数f,如果存在一个整数函数g和实常数c>0,使得对于充分大的n总有f(n)<=c*g(n),就说函数g是f的一个渐近函数(忽略常数),记为f(n)=O(g(n))。也就是说,在趋向无穷的极限意义下,函数f的增长速度受到函数g的约束,亦即函数f与函数g的特征相似。

时间复杂度:假设存在函数g,使得算法A处理规模为n的问题示例,所用时间为T(n)=O(g(n)),

    对于算法进行特别具体的细致分析虽然很好,但在实践中的实际价值有限。对于算法的时间性质和空间性质,最重要的是其数量级和趋势,这些是分析算法效率的主要部分。而计量算法基本操作数量的规模函数中那些常量因子可以忽略不计。例如,可以认为3n^2和100n^2属于同一个量级,如果两个算法处理同样规模实例的代价分别为这两个函数,就认为它们的效率“差不多”,都为n^2级。
  • 我们主要关注算法的最坏情况,亦即最坏时间复杂度。

基本计算规则

1、基本操作,即只有常数项,认为其时间复杂度为O(1)
2、顺序结构,时间复杂度按加法进行计算
3、循环结构,时间复杂度按乘法进行计算
4、分支结构,时间复杂度取最大值
5、判断一个算法的效率时,往往只需要关注操作数量的最高次项,其它次要项和常数项可以忽略
6、在没有特殊说明时,我们所分析的算法的时间复杂度都是指最坏时间复杂度

常见时间复杂度

常见时间复杂度之间的关系

排序算法的时间复杂度

义​对于不同机器环境而言,确切单位时间是不同,但是对于算法进行多少个基本操作(即花费多少时间单位在规模数量级上却是相同,由此可以忽略机器环境影响而客观反应算法时间效率。对于算法时间
计数排序计数排序是一个非基于比较排序算法,该算法于1954年由HaroldHSeward提出。它优势在于在对一定范围内整数排序时,它复杂度为Ο(n+k)(其中k是整数范围,快于任何比较排
算法基础~链表~求两个链表交点(时间复杂度O(n)、空间复杂度O(1)1,接着上一篇优化思路:https://wwwcnblogscom/shan333/p/15033376html2,还记得
Java中Set和List集合contains()方法,检查数组链表中是否包含某元素检查数组链表中是否包含某元素,使用Set而不使用List原因是效率问题,前者setcontains()方法实现
1、原理:对于数组中所有的元素,利用元素每一位值进行排序,如十进制元素数组[342,254,87],则先对个位排序,再对十位排序,最后对百位排序。由于十进制每一位范围为09,因此按位排序过程调用计
i~大家好,最近疫情慢慢控制,各城市也开始逐步复工。风雨终究会过去,但是依然还是要努力,不管是在什么时候。好了,本篇我们学习堆排序。啥子叫堆排序呢?堆排序是利用堆这种数据结构而设计一种排序算法,堆
篇博客记录我对剑指offer第2版面试题39:数组中出现次数超过一半数字题解1一句话一个小误解,以及汇总一下涉及partition算法相关题目。在剑指offer第2版面试题39:数组中出现次
快速排序作为随机算法一种,不能通过常规方法来计算时间复杂度wiki上有三种快排平均时间复杂度分析,本文记录了一种推导方法。先放快速排序伪代码,便于回顾、参考quicksort(intL,intR
原数(10进制)原数(2进制)原数1(2进制)110210014100011810000111161000001111观察上面表格,如果1个数是2幂次方,转换成2进制,必然最高位是1,其它位都是0
相信很多开发同伴们在研究算法、排序时候经常会碰到O(1),O(n),O(logn),O(nlogn)这些复杂度,看到这里就会有个疑惑,这个O(N)到底代表什么呢?首先o(1),o(n),o(log