算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
算法的定义
- 接受或者不接受输入;
- 必须产生一个输出;
- 在有限步骤后终止;
- 使用一系列指令去做一件事情;
- 指令必须是明确定义,没有歧义,且在计算机处理范围之内;
- 指令的描述不依赖任一语言及具体的实现手段;
算法复杂度
算法复杂度分为空间复杂度 S(n) 和时间复杂度 T(n) 。
空间复杂度指在运行过程中为局部变量分配的存储空间的大小,它包括参数列表中形参变量分配的存储空间和为在函数体中定义的局部变量分配的存储空间两个部分,记做S(n)=O(f(n))。
时间复杂度是一个函数,它定性描述了该算法的运行时间,记做T(n)=O(f(n))。
代码中算法时间复杂度分析
1 int MaxSubseqSum1(int A[],int N) 2 { 3 int ThisSum,MaxSum=0; 4 int i,j,k; 5 for(i=0;i<N;i++){ 6 for(j=i;j<N;j++){ 7 ThisSum=0; 8 for(k=i;k<=j;k++){ 9 ThisSum+=A[k]; 10 if(ThisSum>MaxSum) 11 MaxSum=ThisSum; 12 } 13 } 14 } 15 return MaxSum; 16 }
上方的算法中有三个for循环,经分析,每个for循环都遍历了N次,if-else中的代码都是常数数量级的运算,所以这个算法的时间复杂度为T(n)=O(N3)。
由此可以得出评测算法时间复杂度的方法为:
- 对于for循环,时间复杂度等于循环次数*循环体代码复杂度;
- 对于if-else语句,时间复杂度等于if条件判断和两个分支中复杂度最大的一个;
对于算法,我们可以对它进行优化,使之运行时间缩短,提高程序的效率。如以上算法,假设每个N运行需要3分钟,那么总运行时间为27分钟;再假设我们把算法优化成T(n)=O(N),总运行时间就是3分钟,提升是非常大的。
刚开始学习算法,写的不对的欢迎指正交流。