循环不变式(Loop Invariant)与算法正确性

循环不变式是让循环成立的一个statement,其必须具备三个性质:

  1. 初始(Initialization):在循环开始(第一次迭代)之前,它为真
  2. 保持(Maintenance):如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真。
  3. 终止(Termination):当循环终止时(在某种条件下),不变式为我们提供一个有用的性质,该性质有助于证明算法是正确的。

Insertion Sort

对于插入排序来说,“A[1, …, j - 1]是有序的”这一statement是它的循环不定式。

初始:在进行第一次循环之前(j = 2),因为仅有单个元素A[1],因此A[1,…, j - 1]一定是有序的。

保持:因为循环将循环中的每一元素向右移动,直到此次插入的A[j]到恰当的元素。因此我们可以保证,从A[1,…, j - 1]一定是有序的。

终止:for循环终止的条件是j超出A的长度。因为每次j都是增加1,因此必会发生j>A.length。那么整个数组A[1, …, j]一定是有序的

Insertion-Sort(A)
  for j = 2 to A.length
      key = A[j]
      i = j - 1
      while i > 0 and A[i] > key
          A[i + 1] = A[i]
          i = i - 1
      A[i + 1] = key

   Reprint policy


《循环不变式(Loop Invariant)与算法正确性》 by Mie is licensed under a Creative Commons Attribution 4.0 International License
 Previous
Domain Name System(Authorized Reproduction) Domain Name System(Authorized Reproduction)
对于 DNS(Domain Name System) 大家肯定不陌生,不就是用来将一个网站的域名转换为对应的IP吗。当我们发现可以上QQ但不能浏览网页时,我们会想到可能是域名服务器挂掉了;当我们用别人提供的hosts文件浏览到一个“不存在”
2019-07-16
Next 
周六野 + 林芊妤 健身计划 周六野 + 林芊妤 健身计划
参考豆瓣鹅组原帖:https://www.douban.com/group/topic/138221315/ Fat Burn Everyday下面是筛选出来每天一定会做的四个视频(update 2019/07/08) 矫正假胯宽(周六野
2019-06-19
  TOC