文章目录
分为时间复杂度和空间复杂度度
1 算法效率
- 用
时间复杂度
和空间复杂度
衡量一个算法的好坏 时间复杂度
最受关注
2 时间复杂度
asymptotic time complexity
T(n) = O (f(n))
2.1 时间复杂度的概念
下面输出是几呢?
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void Func1(int N)
{
int count = 0;
for (int i = 0; i < N; ++i)
{
for (int j = 0; j < N; ++j)
{
++count;
}
}
for (int k = 0; k < 2 * N; ++k)
{
++count;
}
int M = 10;
while (M--)
{
++count;
}
printf("%d\n", count);
}
int main()
{
int n = 0;
scanf("%d", &n);
Func1(n);
return 0;
}
4
34 // 一共执行了(N**2 + 2N + 10)次
其T(n) = O(N**2 + 2N + 10) = O(n^2)
2.2 大O表示
大O表示(Big O notation)
表示函数的渐近行为, 复杂度从小到大
依次为:
- O(1)
- O(n)
- O(log2n)
- O(n**2)
- O(2**n)
常数次都算O(1)
因为计算机很快
int main()
{
size_t begin = clock();
size_t n = 0;
for (size_t i = 0; i < 10000000; i++)
{
n++;
}
size_t end = clock();
printf("%d\n", end - begin);
return 0;
}
6 or 5//单位是ms
可以看见循环了10000000时间也很少,常数次
都算O(1)
.
2.3 实例
2.3.1 执行2N+M次
#include <stdio.h>
void Func2(int N)
{
int count = 0;
for (int i = 0; i < 2 * N; i++)
{
count++;
}
int M = 10;
while (M--)
{
count++;
}
printf