时间复杂度和空间复杂度
来源:互联网 发布:360手机 usb共享网络 编辑:程序博客网 时间:2024/04/26 23:56
在程序设计中,算法的时间复杂性和空间复杂性,是衡量算法优劣的重要指标。而衡量这两个指标时,有三种不同的情形:最好情形、最坏情形和平均情形。
例如,对排序算法而言,要求将一堆数按升序排列。最好情形是所有数已经有序,最坏情形是所有数按降序排列。而平均情形则是要计算出相应的数学期望,也就是要确定每一种情形出现的概率(一般情况,按等概率分布)。
有时算法的复杂度过高,无法满足系统的实时性要求,在算法比赛中将被判为超时,是不满足要求的。这就要求我们在设计算法时,需要有效考虑算法的时间复杂性和空间复杂性,有时需要用空间来换取时间。
以fibnacci数列为例说明这个问题。许多同学拿到这个题目,会很自然想到数列的递推公式f(n)=f(n-1)+f(n-2),相应的代码如下:
#include <stdio.h>#include <time.h>int f(int n){if (n==0 || n==1)return 1;else return f(n-1)+f(n-2);}int main(){long int begint=time(0);long int b;b=f(40);printf("the result is %ld.\n",b);printf("time=%ld",time(0)-begint);return 0;}
<span style="font-family:SimHei;font-size:18px;"> 然而这样处理,会导致在计算数列的某一项时,出现重复计算的情况,因此通常这个程序不会满足算法的时间要求。为了提高算法的复杂度,通常采取以空间换时间的方法,牺牲计算机的存储空间,去换取时间复杂度比较低的算法。例如,对上述算法进行改进,可以得到如下的代码:</span>
#include <stdio.h> int main() { long int a[100]; int i; a[0]=a[1]=1; for(i=2;i<100;i++) a[i]=a[i-1]+a[i]; printf("the result is %ld.\n",a[50]); return 0; }
0 0
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- 时间复杂度和空间复杂度
- iOS中的堆(heap)和栈(stack)的理解
- Struts2之服务器端验证
- javascript实现代码高亮-wangHighLighter.js
- Java IO: InputStream
- cmd命令连接oracle数据库
- 时间复杂度和空间复杂度
- 关于帝国标签变量带入javascript中出现的问题
- 关于string.equals("str")的小技巧
- Yarn在Shuffle阶段内存不足问题(error in shuffle in fetcher)
- Fragment与Activity生命周期
- Android系统设置— android.provider.Settings
- 321 数据恢复大师
- java 发送邮件
- 根据size调整图片背景