什么是不变式?
时间:2020-03-06 14:30:54 来源:igfitidea点击:
这个词似乎在许多情况下都得到了使用。我能想到的最好的是,它们表示一个不变的变量。这不是什么常量/最终值(该死吗,Java!)?
解决方案
我们知道在逻辑中的特定位置处始终是真实的,并且可以在调试时检查出问题出在哪里,这是一个条件。
我通常从算法或者结构的角度看待它们。
例如,我们可以声明一个循环不变式-在每次迭代的开始或者结束时始终为true。也就是说,如果循环应该处理从一个堆栈到另一个堆栈的一组对象,则可以说| stack1 | + | stack2 | = c,位于循环的顶部或者底部。
如果不变检查失败,则表明出了点问题。在此示例中,这可能意味着我们忘记将处理后的元素推入最终堆栈中,依此类推。
维基百科的魔力:不变式(计算机科学)
In computer science, a predicate that, if true, will remain true throughout a specific sequence of operations, is called (an) invariant to that sequence.
不变量比变量更"概念上"。通常,它是程序状态的始终为真的属性。可以确保保持不变的函数或者方法被称为保持不变。
例如,二叉搜索树可能具有不变性,即对于每个节点,节点左孩子的关键字小于节点自己的关键字。为该树正确编写的插入函数将保持不变。
如我们所知,这不是可以存储在变量中的东西:它更多是关于程序的语句。通过弄清楚程序应该维护哪种不变量,然后查看代码以确保它实际上维护那些不变量,可以避免代码中的逻辑错误。
从本质上讲,不变式在编写简洁的代码方面非常有用,因为从概念上了解代码中应包含哪些不变式,我们可以轻松决定如何组织代码以实现这些目标。正如ealier所述,它们在调试中也很有用,因为检查不变量是否被维护通常是查看我们尝试执行的任何操作是否实际上在执行我们想要的操作的好方法。
在代码块中没有改变的东西