部分复杂度问题
来源:互联网 发布:验证dss算法的有效性 编辑:程序博客网 时间:2024/06/08 18:46
算法的时间复杂度:
算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的字符串的长度的函数。时间复杂度常用大O表示法,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。
下面是部分时间复杂度对比:
算法的空间复杂度:
空间复杂度(SpaceComplexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1)。而一般的递归算法就要有O(n)的空间复杂度了,因为每次递归都要存储返回信息。一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量。
分析一个算法所占用的 存储空间要从各方面综合考虑。如对于 递归算法来说,一般都比较简短,算法本身所占用的 存储空间较少,但运行时需要一个附加 堆栈,从而占用较多的临时工作单元;若写成非递归算法,一般可能比较长,算法本身占用的存储空间较多,但运行时将可能需要较少的存储单元。
我们来看几个简单的实例:
(斐波那契数列的非递归)
//#include<iostream>//#include<cassert>//using namespace std;//unsigned long long Fib_NonR(long long n)//{//assert(n>=0);//if(n==0||n==1)//return n;//else//{//long long frist,second;//long long ret=0;//for(int i=2;i<=n;i++)//{//frist=i-1;//second=i-2;//ret=frist+second;//frist=second;//second=ret;//}//return ret;//}//}//int main()//{//int ret=Fib(4);//cout<<ret<<endl;//system("pause");//return 0;//}//时间复杂度:O(n)
空间复杂度:O(1)
(斐波那契数列的递归)
#include<iostream>using namespace std;long long FibArray(long long n){if(n==0||n==1)return n;else return FibArray(n-1)+FibArray(n-2);}int main(){cout<<FibArray(100)<<endl;system("pause");return 0;时间复杂度:O(2^N)
空间复杂度:O(N)
二分法查找一个数(递归):
#include<iostream>//using namespace std;//int bin_search(int *arr,int left,int right,int key)//{//while(left<=right)//{//int equal=(left+right)/2;//if(key>equal)//{//return bin_search(arr,equal+1,right, key);//}//else if(key<equal)//{//return bin_search(arr,equal,equal-1,key);//}//else//return arr[equal];//}//return -1;//}//int main()//{//int arr[]={0,1,2,3,4,5,6,7,8,9,10,11,12};//int key=15;//int ret=bin_search(arr,0,sizeof(arr)/sizeof(arr[0]),key);//cout<<ret<<endl;//system("pause");//return 0;//}时间复杂度:O(log2 N)
空间复杂度:O(N)
因此,递归并不一定是最好的,在写程序之前应该比较不同方法的时间和空间复杂度,再进行选择。
未完待续!!!!!!!!!!!!
1 0
- 部分复杂度问题
- 问题复杂度
- 复杂度问题
- BFS时间复杂度问题
- HashMap时间复杂度问题
- 一个时间复杂度的问题
- 程序的复杂度问题(1)
- 类快排的时间复杂度问题
- 密码学——复杂度问题
- NP问题和计算复杂度
- 选择问题及复杂度分析
- 有关时间复杂度的问题
- 问题 A: 复杂度分析(Ⅰ)
- 汉诺塔问题以及时间复杂度
- 数据结构第一讲-复杂度问题
- 问题 A: 复杂度分析(Ⅰ)
- 时间复杂度的计算问题
- 【c++】关于时间复杂度和空间复杂度的相关问题
- 文章标题
- Dual Palindromes(USACO)
- codeforces 682 a 解题报告 Alyona and Numbers 数论基础
- [Leetcode] Best Time to Buy and Sell Stock
- Genymotion添加模拟器时报Unable to create virtual device,Server returned HTTP status code xxx
- 部分复杂度问题
- 矩阵乘法
- TTL(time to live)生存时间
- Linux发行版的基础目录名称、命名法则及功能规定
- 子查询
- Linux的发行版以及不同发行版之间的联系和不同
- #error命令
- JZOJ 4783. Osu
- LeetCode[268] Missing Number