目录
算法
1.算法效率
评价一个算法的好坏就是取决于它的效率
算法效率又取决于该算法的时间复杂度和空间复杂度
时间复杂度
1.时间复杂度的概念
算法中基本操作的执行次数为该算法的时间复杂度
下面我们举个例子 计算fun1函数的时间复杂度
void fun1(int n)
{
int i = 0;
int count = 0;
for (i = 0; i < n; i++)
{
for (i = 0; i < n; i++)
{
count++;
}
}
for (i = 0; i < 2 * n; i++)
{
count++;
}
for (i = 0; i < 100; i++)
{
count++;
}
}
先求出算法运行的大概次数
F(N)=n^2+2*n+100;
当n=10时 F(N)=130
当n=100时 F(N)=10210
当n=100时 F(N)=1002010
其实在实际中我们计算时间复杂度时并不是计算它准确的执行次数,而只需要计算大概执行次数即可,所以我们使用大O的渐进表示法
2.大O的渐进表示法
大
O
阶方法:
1
、用常数
1
取代运行时间中的所有加法常数。
2
、在修改后的运行次数函数中,只保留最高阶项。
3
、如果最高阶项存在且不是
1
,则去除这个项的系数。得到的结果就是大
O
阶。
F(N)=n^2+2*n+100
用大O的渐进表示法即可求出时间复杂度为O(N^2)
注:在实际中一般关注的是算法的最坏情况
3.常见复杂度对比
常见类型 时间复杂度
F(N)=15376 0(1)
F(N)=3n+1 0(n)
F(N)=3n^2+1 0(n^2)
F(N)=3longn+4 0(logn)
F(N)=2nlongn+n^2 0(nlogn)
F(N)=4n^3+n^2=100n 0(n^3)
F(N)=2^n+n 0(2^n)