算法导论学习笔记(一)

2.1循环不变式(loop invariant)

  1. 性质
    1. 初始化:循环第一次迭代前为真(即第一次赋值是否有效);
    2. 保持:如果循环的某次迭代前它为真,那么下次迭代之前它仍为真(循环体内一次运算后回到下一个初始位置);
    3. 终止:循环终止时提供一个有用的性质,有助于证明算法的正确性(终止时的检验);
  2. 注意点:不要过分形式主义

2.2 伪代码中的约定

  • to:迭代递增1;
  • downto:迭代减少1;
  • 变量一般为局部的;
  • 参数为按值传递,指针为按引用传递;
  • return可返回多个值;
  • 布尔运算短路运算;
  • error:错误,但不用说明具体发生什么错误;

2.3 RAM模型与运行时间

  1. RAM模型
    • 通用的单处理器模型
    • 设计贴近真实计算机
    • 不涉及高速缓存与虚拟内存
      指数运算有时可以用位运算简化
  2. 运行时间
    • 分最佳情况与最坏情况,一般考虑最坏情况
    • 运行时间是指执行的基本操作数
    • 一般以常数乘次数表示
  3. 增长量级往往是最重要的标志

2.4归并排序及其分析

  1. 循环不变式的验证

    • 初始化
      A[p..k-1]总是有序的,且当k=p时,A中共有0个元素,必然有序,故成立;

    • 保持
      每次k必然递增1,同时有i或j递增1,即i+j=k-p;

    • 终止
      终止时k=r+1,对应两个哨兵牌

  2. 运行时间分析

T(n)=Θ(1)aT(n/b)+D(n)+C(n)

其中T(n/b)表示子问题,D(n)表示分解所需时间,C(n)表示合并子问题所需时间。

化简后得

T(n)=2T(n/2)+Θ(n)

其中渐进次数与匿名函数出现次数有关,与数学含义无关,即

i=1nΘ(i)Θ(1)+Θ(2)++Θ(n)

目前由数学归纳法或画树状图的方法,可以求出 T(n)=Θ(nlgn)

你可能感兴趣的:(算法,算法导论笔记)