数据结构(java)
算法分析
算法是为求解一个问题需要遵循的、被清楚指定的简单指令集合。对于一个问题,一旦我们确定了某种算法的正确性,那么最重要的一步就是确定该算法将需要的时间和空间资源量的问题。
数学基础
对于数学基础上,我们主要应用的是对于算法资源消耗的分析,主要有计算时间、控件资源等
相对增长率便是应用到算法分析时候的重要的度量
大O标记法O(N2)等等
典型的增长率如下
接下来说一下要分析的问题
最大子序列问题(对于不同条件下的算法时间)
为什么要分析这个问题?因为存在于求解这个问题的很多算法,而这些算法的性能上还有很多的差异,我们解决一个问题的时候,通常还应该考虑我们磁盘读入所消耗的时间,当数据量小的时候其实算法之间的差异是不大的,一旦数据量变大,那将会是另一种情况了。
从以上两个图可以看出,低效的算法即便是适度大小的数量级它也是不可采用的。
运行时间的计算
我们首先设定,不存在特定的时间单位,我们不考虑常数和低阶项,我们分析程序运行时间时,绝对不要低估程序的运行时间,实际情况是分析的结果为程序在一定的范围内能够终止运行提供保障,程序可能提前结束但是绝对不能错后
一般法则
法则1—for循环法则
一个for循环的运行时间至多是该for循环内部那些语句的运行时间乘以迭代的次数
法则2—嵌套的for循环
从里向外分析这些循环。在一组嵌套循环内部的一条语句总的运行时间为该语句的运行时间乘以该组所有的for循环的大小的乘积。
法则3—顺序语句
将各个语句的运行时间求和即可
法则4—if/else语句
运行时间不超过判断的运行时间再加上语句中的程序的运行时间长者的总的运行时间