zoukankan      html  css  js  c++  java
  • 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).
      计算复杂性也分为几种不同的情况。算法中有条件语句的时候,那么不同的输入会使的运行时间也不同,于是就分为最坏情况,和一般情况。平均情况的分析就会涉及到概率了,这个会比较麻烦。
      计算复杂性在这一章就这些内容了,这一章还介绍了几种经典的排序算法,并给出了时间复杂性分析。接下来整理这些经典排序算法。

  • 相关阅读:
    Codeforces 1265A Beautiful String
    1039 Course List for Student (25)
    1038 Recover the Smallest Number (30)
    1037 Magic Coupon (25)
    1024 Palindromic Number (25)
    1051 Pop Sequence (25)
    1019 General Palindromic Number (20)
    1031 Hello World for U (20)
    1012 The Best Rank (25)
    1011 World Cup Betting (20)
  • 原文地址:https://www.cnblogs.com/Frandy/p/algorithm_course_1_1.html
Copyright © 2011-2022 走看看