什么是算法中的时间复杂度
2019-03-30 17:04
99 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/HenrySun1993/article/details/88913013
T(n):执行某个算法的语句次数,称为语句频度或时间频度。n是指算法的规模,n不断的变化,T(n)就不断的变化。而变化的规律是什么样的?这就引入了时间复杂度的概念,下面举例说明。
时间复杂度为:O(1)
[code] public void fun1() { int n = 100;//没有入参变量,执行规模永远为1行 }
时间复杂度为:O(n)
[code]public void fun1() { int n = 100;//执行次数:1 int sum = 0;//执行次数:1 for (int j = 1; j <= n; ++j) {//执行次数:n sum += j;//执行次数:n } } // 所以T(n)=1+1+n+n=2n+2 = n,即时间复杂度为:O(n). //时间复杂度是表示一个函数的趋势,并不代表具体值,当n趋于无穷大时,可以忽略低阶项和首项系数。
时间复杂度为:O(logn)
[code] int i=1; while (i<=n) i=i*2; //一个算法如果能在每个步骤去掉一半数据元素,如二分检索,通常它就取 O(logn)时间
时间复杂度为:O(n²)
[code] public void fun1() { int n = 100;//执行次数:1 int sum = 0;//执行次数:1 for (int i = 1; i <= n; ++i) {//执行次数:n for (int j = 1; j <= n; ++j) {//执行次数:n*n sum += j;//执行次数:n*n } } } //T(n)=1+1+n+nn+nn=2n²+2n+2=n²
总结:常规的代码的算法是有规律的:看几重循环:只有一重则时间复杂度为O(n),二重为O(n^2);如果有二分则为O(logn),二分例如快速幂、二分查找,如果一个for循环套一个二分,那么时间复杂度则为O(nlogn)。
时间复杂度按n越大算法越复杂来排的话:常数阶O(1)、对数阶O(logn)、线性阶O(n)、线性对数阶O(nlogn)、平方阶O(n²)、立方阶O(n³)、……k次方阶O(n的k次方)、指数阶O(2的n次方)。
相关文章推荐
- 【算法】什么是时间复杂度
- 算法分析:时间复杂度+空间复杂度 O(n)
- 算法时间复杂度的计算
- 算法的时间复杂度(计算实例)
- 算法的时间与空间复杂度
- 关于算法的时间复杂度
- 时间复杂度:O(1)、O(n)、O(n²)、O(nlogn)等是什么意思,白话文解释专业术语。
- 求解算法的时间复杂度
- 长度为n的整数数组,找出其中任意(n-1)个乘积最大的那一组,只能用乘法,不可 以用除法。要求对算法的时间复杂度和空间复杂度作出分析,可以写思路也可以写程序。
- 数据结构之算法时间复杂度
- 算法的时间复杂度和空间复杂度-总结
- 算法的时间复杂度和空间复杂度
- 计算算法时间复杂度的主方法的一种较为简洁的记忆方法
- 算法的时间复杂度和空间复杂度
- 面试-链表逆置 作业手写一个单链表,并且实现单链表元素的逆置,(a0, a1,a2,a3,..an)-> (an,an-1,… a1, a0),算法的空间复杂度和时间复杂度经可能低
- 转载&nbsp;一个时间复杂度为O(N)的算法
- 简单算法学习之时间复杂度的计算
- 排序算法的C语言实现以及各个算法的时间复杂度和空间复杂度分析(冒泡排序)
- 算法的时间复杂度的计算
- 算法的时间复杂度和空间复杂度