您的位置:首页 > 其它

STL算法原理分析

2010-05-05 21:57 169 查看
一、判断算法的代码好坏,通过以标准(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(指数)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐