一、判断算法的代码好坏,通过以标准(1).系统、内存性能标准
在一种算法需要大的存储空间时,初始数据大小要求高。另一种系统执行效率并不高,但需内存较少。
在某些情况下,第一种算法根本不能执行、而另一种较差在内存有限时还是却可以执行不过这样问题在
现代计算机中显示并不那么重要。
(2)、算法性能标准:时间复杂度分析
我们一般定义一个函数T(h),该函数基于n来计算执行频度其实这个标准就描述计算复杂度,指出该算法
的执行效率有多高。
(3)、时间复杂度:min()函数
在n个元素数组如果算法把第1元素默认为最小值,并让它与数组中其它元素进行n-1次比较,结果就会
产生T(n)=n-1的公式来统计比较次数。
(4)、时间复杂度:选在排序
在未排序的子表中查找最小值。这时T(h)的公式值便是。这时T(h)的公式值便是:
T(n)=(n-1)+(n+1)+...+3+2+1
在数学上,我们认为T(h)是1到n-1得等差级数,可以根据n来度量。
T(n)=n(n-1)/2=n^2/2-n/2
(5)、时间复杂度:顺序查找
查找有两种情况,一种是恰巧在第1个元素中查到,也可能到最后一个元素也没找到这两种极端在我们
不能精确知道比较次数时。可选择期望(平均)比较一次数期望比较次数为n/2,因此比较数公式为T(n)=n/2
期望比较次数。
(6)、时间复杂度:最好一最坏一平均情形
(1)、最后
T(n)=1 // 表示在分析查找时就恰巧锁定到第1元素值
(2)、平均
T(n)=n/2 // 在大量目标值中重复查找,时间复杂度为期望比较次数
(3)、最坏
T(n)=n // 子表中找到最后1个元素了也没找到的情况
二、常见数量级
O度量值:算法运行时可能出现的可能值
① 常量时间
当算法时间复杂度位于数据项目时,算法效率为O(1)
例如:在有序数组中找最小值那么该算法效率永远为O(1)
② 线性
当算法时间复杂度与子表大小成正比时,效率为O(n)
例如:n个元素无序表中我最小值时效率为O(n)
③ 平方和立方
(1)、多数简单排序算法复杂是O(n^2)平方级
平方 - 适用于相对小的n值,算法的时间复杂度增长4倍。
(2)、另一种比如用于矩阵乘法计算的O(n^3)立方级
立方 - 这种算法效率一般很差。算法时间复杂度增加8倍。
④ 对数
有些算法时间复杂度为O(log2^n)和O(nlog2^2)它们变是对数算法重复
将数据细分子表时,子表原大小可被分为原来的1/2、1/4、1/8 像二分查找法
用的就是这类算法。例如:n=1024,log2^n=10,当n=100000时 log2n=19.9315
这数算法的时间复杂度非常好,著名快速排序算法的时间复杂度就为O(nlog2^n)
⑤指数
在找问题答案前,查找大量可能解决方案.这种算法复杂度通常为O(a^n), a>1
排序在n值很小的情况下 ->各种数量级效率对比(从大到小)
log2^n(对数) > nlog2^n > n(线性) > n^2(平方) > n^3(立方) > 2^n(指数)
STL算法原理分析
最新推荐文章于 2022-09-24 18:41:02 发布