zoukankan      html  css  js  c++  java
  • 循环不变式

    考虑上一篇的插入排序,在for循环的每次迭代开始,包含元素A[0...i-1]的子数组是当前排序好的,剩余的数组元素A[i...arrlen]是仍未排序的。我们把A[0...i-1]的这个性质称为一个循环不变式 

    循环不变式(loop invariants)不只是一种计算机科学的思想,准确地说是一种数学思想。在数学上阐述了通过循环(迭代、递归)去计算一个累计的目标值的正确性, 属于基础数学的范畴,类似与数学归纳法。

    循环不变式主要帮助我们理解算法的正确性。关于循环不变式,我们需要证明三条性质:

    1. 初始化: 循环第一次迭代之前,为真

    2. 保持: 如果循环某次迭代之前它为真,那么下次迭代之前它仍为真

    3. 终止: 如果程序可以在某种条件下终止,那么在终止的时候,就可以得到自己想要的正确结果

    我们可以看到,插入排序的循环不变式(在for循环的每次迭代开始,包含元素A[0...i-1]的子数组是当前排序好的,剩余的数组元素A[i...arrlen]是仍未排序的)是满足这三个性质的。

  • 相关阅读:
    Power Strings P5019
    Floyd模板题 P1704
    【训练题】强连通分量缩点 P1679
    字符串hash模板题 P5018
    Dijkstra模板题 P1710
    【训练题】分队 P1672
    二分图模板题 P1631
    【训练题】无序字母对 P1675
    KMP模板题 P1537
    马路 树链剖分/线段树/最近公共祖先(LCA)
  • 原文地址:https://www.cnblogs.com/zuofaqi/p/9677610.html
Copyright © 2011-2022 走看看