**` WELCOME`**
时空复杂度的分析
1. 什么是时间复杂度?
时间复杂度即为程序运行的所需时间。
我们将每一个所写的程序语句(即赋值,输出或运算等语句)的运行时间进行统一,认为他们所运行的时间是相同的,看作一个单位时间。
2. 时间复杂度怎么分析?
首先判断所写程序中的每一个语句各自分别的时间复杂度是多少,即判断每一个语句总共需要多少个单位时间,再将每一个语句所用的单位时间相加,计算出总共所需的单位时间,即为程序的时间复杂度。
通常,计算时间复杂度遵循以下三个原则
- 忽略常数项。
- 忽略系数。
- 只保留最高项。
3. 有哪些常见的时间复杂度?
1. O(1)
#include<iostream>
using namespace std;
int main()
{
int a = 3; // o(1)
int b = 4; // o(1)
cout << a; // o(1)
return 0;
}
时间复杂度为 o(1) + o(1) + o(1) = o(3)
遵循舍去常数项原则 该程序的时间复杂度为o(1)
2. o(n)
#include <iostream>
using namespace std;
int main()
{
int n; // o(1)
cin >> n; // o(1)
int sum = 0; // o(1)
for (int i = 0; i < n; i++)
// i = 0执行1次, i < n执行n+1次, i++执行n次
{
sum += i; // 执行n次
} // 整个for循环执行3n+2次
cout << sum; // 执行1次
return 0;
}
时间复杂度为o(1) + o(1) + o(1) + o(3n+2) + o(1) = o(3n+6)
遵循舍去常数项以及忽略系数原则 该程序的时间复杂度为o(n)
3. o(n^2)
int main()
{
for(int i = 0; i < n; i++) // o(n)
for(int j = 0; j < n; j++) // o(n)
{
cout << 1;
}
}
该程序为两重循环
时间复杂度为 o(n) * o(n) = o(n^2)
还有其他比较常见的时间复杂度,
如o(logn),o(nlogn),o(2^n),o(n!), o(n^3)
从小到大的顺序为O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3)
< O (2^n)< O(n!)
4. 分析时间复杂度的作用
在做题时可根据题目给出的变量的数据范围计算程序所需的时间复杂度,即运行的所需时间,又因为计算机1秒钟可计算10^9次,由此可进行判断我们的程序是否提交后会TLE。