Algorithm Course Review(1.1)

  算法课要考试了。没想到一晃就到学期末了。一开始是打算边上课边整理算法的学习笔记的,结果拖到现在了。如果现在复习的时候不整理,估计以后都不会整理了。那就现在整理吧。
  课本,算法设计技巧与分析。
  先来看第一章,主要内容是复杂性的概念和分析。
  为了分析算法的复杂性,提出了计算时间复杂性和空间复杂性的方法。对于时间复杂性,计数元运算操作的次数。元运算如算数运算,包括加减乘除,还有比较和逻辑运算,赋值运算,包括遍历表或树的指针赋值。对于空间复杂性,计数用到的存储单元,不包括分配用来存储输入的空间。
  复杂性是相对于问题的输入规模而言的。当输入是一个列表的时候,输入规模是列表元素的个数,而当输入为一个整数n的时候,分析中有时候把n的位数当作输入规模。
  复杂性的表示有四种符号,notation,这个单词是需要记住的。当初因为不知道notation被人鄙视了。比较常见的是O符号,它提供运行时间的一个上界,然后就是大omega符号,在运行时间的常数因子内提供一个下界。还有就是大theta符号,它给出算法运行时间增长率的一个精确描述。可以认为O类似于<=,大omega类似于>=,而大theta类似于=。还有一个是小o符号,表示低阶的关系。
  接着讨论了计算复杂性的几种方法。一个是对于迭代类的算法,计算迭代次数,而对于递归,分治之类的算法,使用递归公式,还有一种方法是计算基本运算的频度,就是选一个基本运算,然后看基本运算的次数。

  复杂度的顺序1<log(log(n)) < log(n) < n^1/2 < n < nlog(n) < n^2 < 2^n < n! < 2^(n^2).
  计算复杂性也分为几种不同的情况。算法中有条件语句的时候,那么不同的输入会使的运行时间也不同,于是就分为最坏情况,和一般情况。平均情况的分析就会涉及到概率了,这个会比较麻烦。
  计算复杂性在这一章就这些内容了,这一章还介绍了几种经典的排序算法,并给出了时间复杂性分析。接下来整理这些经典排序算法。

 

posted @ 2012-05-12 20:56  Frandy.CH  阅读(218)  评论(0编辑  收藏  举报