算法导论学习笔记(一)

本文介绍了循环不变式的概念及应用,详细解释了其在算法正确性证明中的作用,并以归并排序为例进行深入分析,包括其伪代码、运行时间分析等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值