数据结构时间复杂度

如何衡量一个算法的复杂度?
算法的时间复杂度和空间复杂度统称为算法的复杂度

void Test(int n) 
{
 int iConut = 0; 
  for(int i = 0; i < n; ++i) 
  {
   for(int j = 0; j < n; ++j) 
      iCount++;
  }
  for(int k = 0; k < 2*n; ++k)
      iCount++;
       int count = 10; 
       while(count--) 
           iCount++;
}

这个函数执行次数为f(n)=n*n+2*n+10
时间复杂度实际就是一个函数,该函数计算的是执行基本操作的次数
算法存在最好、平均和最坏情况,在实际中通常关注的是算法的最坏运行情况,即:任意输入规模N,算法 的最长运行时间

时间复杂度大O渐进表示法

一个算法语句总的执行次数是关于问题规模N的某个函数,记为f(N),N 称为问题的规模。语句总的执行次数记为T(N),当N不断变化时,T(N)也 在变化,算法执行次数的增长速率和f(N)的增长速率相同。则有T(N) = O(f(N)),称O(f(n))为时间复杂度的O渐进表示法
**一般算法O(n)计算方法:
用常数1取代运行时间中的所有加法常数
在修改后的运行次数函数中,只保留最高阶项
如果最高阶项系数存在且不是1,则去除与这个项相乘的常数
递归算法时间复杂度:递归总次数每次递归次数*

long long Fib(int n)
{
    if(n<3)
    return 1;
        return Fib(n-1)+Fib(n-2);
}

这个函数返回值为long long是防止返回值太大导致int越界,这也是这个递归一般编写存在的问题
斐波那契数列递归时间复杂度为2的n次方,当n=30时就大约计算10亿次,所以这个递归算法几乎没有什么实用价值

猜你喜欢

转载自blog.csdn.net/weixin_40909099/article/details/79571638