算法的复杂度:时间复杂度和空间复杂度

算法的复杂度分为:时间复杂度空间复杂度
1、时间复杂度实际就是一个函数,该函数计算的是执行基本操作的次数;本质就是在计算基本操作重复执行的次数 ,并且大多数情况下分析的是最坏情况的
例如:

 voidTest(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;//执行10次
    while(count--) 
 { 
      iCount++;
  }
}

  语句总执行次数:f(n)= n^2+ 2*n + 10

然而算法存在最好、平均和最坏情况:
最坏情况:任意输入规模的最大运行次数(上界)
平均情况:任意输入规模的期望运行次数
最好情况:任意输入规模的最小运行次数,通常最好情况不会出现(下界)

例如:在一个长度为N的线性表中搜索一个数据x

最好情况:1次比较

最坏情况:N次比较

平均情况:N/2次比较

在实际中通常关注的是算法的最坏运行情况,即:任意输入规模N

算法的最长运行时间

计算机的两个准则:

1、    忽略掉那些常数

2、关注函数式中增长最快表达式

 

 

最差时间分析

 

平均时间复杂度

 

稳定度

 

空间复杂

 

冒泡排序

 

O(n2)

O(n2)

稳定

O(1

快速排序

O(n2)

O(n*log2n

不稳定

O(log2n)~O(n)

选择排序

O(n2)

O(n2)

稳定

O(1

二叉树排序

O(n2)

O(n*log2n

不稳定

O(n

插入排序

O(n2)

O(n2)

稳定

O(1

堆排序

O(n*log2n

O(n*log2n

不稳定

O(1

希尔排序

O

O

不稳定

O(1

2、普通情况下的空间复杂度

   空间复杂度就是函数中创建对象的个数关于问题规模函数表达式,一般情况用O的渐进表示法表示。
对于一个算法来说,空间复杂度和时间复杂度往往是相互影响的。当追求一个较好的时间复杂度时,可能会使空间复杂度的性能变差,即可能导致占用较多的存储空间;反之,当追求一个较好的空间复杂度时,可能会使时间复杂度的性能变差,即可能导致占用较长的运行时间。

有时我们可以用空间来换取时间以达到目的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值