复杂度分析

本文讨论了时间复杂度的几种情况,包括循环结构中的logn分析,递归函数的n阶复杂度,以及空间复杂度的计算,如固定大小的二维数组和动态分配的动态数组。重点强调了在有序数组中查找元素对的最优时间复杂度为n。
摘要由CSDN通过智能技术生成

时间复杂度

1.logn

void fun(int n) 
{
  int i=1;
  while(i<=n)
    i=i*2;
}

i循环多少次到达n?

i每次循环 乘2,以2的次数增长

转换为:求2的几次方 = n

循环次数即:log_{2}n = ?

最后log_{2}n简写成log_{}n

所以复杂度就为logn

2.递推公式复杂度n

设某算法的递推公式是T(n)=T(n-1)+n,T(0)=1,则求该算法中第n项的时间复杂度为()

T(n)

=T(n-1)+n

=T(n-2)+(n-1)+n

=T(n-3)+(n-2)+(n-1)+n

...

=T(0)+1+2+...+(n-2)+(n-1)+n

=1+1+2+...+(n-2)+(n-1)+n

从递推公式中可以看到,第n项的值需要从n-1开始递归,一直递归到0次结束,共递归了n-1次

所以时间复杂度为n

3.递归复杂度n

 int f ( unsigned int n ) 
 {
    if (n == 0 || n==1) 
      return 1;
    else 
      return n * f(n-1);
  }

每次递归的参数为,上一次,减1 ,当递归参数为1的时候返回,所以递归了n - 1次

4.寻找复杂度n

给定一个整数sum,从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum,最快的平均时间复杂度是多少

求最快的时间复杂度,由于是有序数组,从头每确定两个元素,比较与sum的大小,然后再移动元素,整个数组被搜索一遍,就可以得到结果,所以最好时间复杂度为n。

空间复杂度

5.定义二维数组复杂度1

如果一个函数的内部中只定义了一个二维数组a[3][6],请问这个函数的空间复杂度为多少

函数内部数组的大小是固定的,不论函数运行多少次,所需空间都是固定大小的,因此空间复杂度为O(1)

6.malloc二维数组复杂度n^{^{2}}

 int** fun(int n) 
 {
    int ** s = (int **)malloc(n * sizeof(int *));
    while(n--)
      s[n] = (int *)malloc(n * sizeof(int));
    return s;
 }

       此处开辟的是一个二维数组,数组有n行,每行分别有1,2,3,...n列,所以是n(n + 1)/2个元素空间,空间复杂度为n^2

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值