算法导论<1、课程简介与算法分析>

来源:互联网 发布:淘宝网涂料 编辑:程序博客网 时间:2024/05/20 21:21

1、学习伪代码

伪代码中的一些约定:

  • 缩进表示块结构;eg:第1行开始的for循环体由2~8行组成;
  • while、for、repeat-until等循环结构以及if-else等条件结构与c、c++、Java、Python和Pascal中的结构有类似的解释;for循环迭代增加用to,迭代减少用downto;
  • //表示注释;
  • i=j=e等价于先j=e,然后i=j;赋值语句可以用符号←表示,x←exp表示将exp的值赋给x,其中x是一个变量,exp是一个与x同类型的变量或表达式(该表达式的结果与x同类型);多重赋值i←j←e是将表达式e的值赋给变量i和j,这种表示与j←e和i←e等价
  • 变量是局部于给定过程的,若无显示说明不用全局变量;
  • 复合数据通常被组织成对象(由属性组成);eg:A.length
  • 按值吧参数传递给过程:被调用过程接收其参数自身的副本;
  •  return语句立即将控制返回到调用过程的调用点,允许在单一的return语句中返回多个值;
  • 布尔运算符“”and“和“or”都是短路的。
  • 关键词error表示已被调用的过程情况部队而出现了一个错误。

2、运行时间:

2.1、取决于输入规模(eg:已经排好序)

2.2、取决于输入的大小size(eg:一些参数)

2.3、运行时间的上界限;

3、情况分析:

 3.1、最坏情况分析:T(n)=max time on any input size n;

 3.2、平均情况分析:T(n)=expected time over all inputs of size n;加权平均;

 3.3、最好情况分析:(bogus)一般不这么考虑;

4、渐进分析asymptotic analysis:

忽略那些依赖于机器的常量,不去检查实际运行的时间,而是关注运行时间的grouth增长(增长率或增长量级),也就是只考虑公式里面最重要的项

 渐进符号theta(弱符号)----->写个公式,弃掉他的低阶项,并且忽略前面的常数因子。

*清楚时间复杂度和空间负复杂度以及如何计算。

5、排序算法1:

循环不变性


eg:插入排序







6、排序算法2:

eg:归并排序(略)