时间复杂度
简介:在计算机科学中,时间复杂性,又称作时间复杂度(time complexity)它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。
可能大家通过简介还是不能很好的了解什么是时间复杂度,通俗点来说就是一个程序运行所需的时间多少。
为什么要了解时间复杂度
很多时候大家应该都有遇到这种情况,明明自己写出了程序也能运行但是总是比朋友的代码慢很多,这时候大家应该也就看出问题了,当你不能很好的解决时间复杂度的问题时,代码其实就很容易出现问题。
常见的时间复杂度
常数阶时间:O(1)
线性阶时间:O(n)
平方阶时间:O(n^2)
对数阶时间:O(logn)
线性对数阶时间:O(nlogn)
立方阶时间:O(n^3)
指数阶时间:O(2^n)
阶乘阶时间:O(n!)
时间复杂度的也有着大小区分:
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) <O(n^3) < O(2^n) < O(n!)
如何来计算一个程序的时间复杂度呢?
1.忽略常数项
2.忽略系数
3.只保留最高项
在这里插入代码片
#include <iostream>
using namespace std;
int main()
{
int n=200;//执行一次
int m=300;//执行一次
while(m--)//执行m次
{
for(int i=1;i<=n;i++)//int i=1执行一次,i<=n要判断n+1次 i++要执行n次
{
cout<<"love you"<<endl;//输出n次
}
}
//则总共需 T(n)=2+m*(3n+2) 用O(n)*O(m)来表示这个程序的时间复杂度
return 0;
}
总结:
如果想要程序尽可能的避免不必要的错误,对时间复杂度的了解只能多不能少,只有通过对时间复杂度的充分了解才能使得自己的代码更耐打,不要抱着能运行就行的思想,程序需要严谨。以上只是个人的一点微弱了解,如果有什么不对的地方欢迎指出。