![]() |
1
133
不变量比变量更具有“概念性”。一般来说,它是程序状态的一个属性,总是正确的。一种确保不变量保持不变的函数或方法,称为保持不变量。 例如,一个二进制搜索树可能具有不变量,即对于每个节点,节点的左子节点的键小于节点自己的键。为这棵树正确编写的插入函数将保持不变。 正如你所说,这不是你可以存储在变量中的那种东西:它更像是一个语句。 关于 程序。通过弄清楚程序应该维护什么样的不变量,然后检查代码以确保它确实维护了这些不变量,可以避免代码中的逻辑错误。 |
![]() |
2
21
这是一个你知道在逻辑的某个特定位置总是正确的条件,并且可以检查什么时候调试来找出哪里出了问题。 |
![]() |
3
12
我通常更多地从算法或结构的角度来看待它们。 例如,您可以有一个可以断言的循环不变量——在每次迭代的开始或结束时始终为真。也就是说,如果循环要处理从一个堆栈到另一个堆栈的对象集合,那么可以在循环的顶部或底部说stack1+stack2=c。 如果不变量检查失败,则表明出现了问题。在本例中,这可能意味着您忘记将已处理的元素推送到最终堆栈上,等等。 |
![]() |
4
12
维基百科的魔力: Invariant (computer science)
|
![]() |
5
3
在一个代码块内不改变的东西 |
![]() |
6
3
正如此行所述:
为了更好地理解这个希望,这个例子在C++中有帮助。
考虑一个场景,您必须获取一些值,并在一个名为as的变量中获取它们的总计数
这个 不变量 (这更像是一个概念):
上面的代码是这样的,
上面的代码是什么?
1)从
2)成功读取一次后,递增
3)重复1-2直到读取停止(即,ctrl+d) 循环不变量:不变量必须为真 总是 . 所以最初你用这个开始你的代码
这个循环从标准输入中读取数据,并存储在x.well和good中。但是 不变量 因为我们的第一部分 不变量 没有被跟踪(或保持真实)。
如何保持不变?简单!递增计数。
所以
但是即使现在我们 不变量 (一个必须是正确的概念)是错误的,因为现在我们不满足 我们的 不变量。
那么现在该怎么办呢?
添加
现在我们的代码变成了这样,
让我们检查一下代码是否与我们的不变量匹配
代码:
啊!循环不变量为真。 总是 代码也很好用。 上面的例子是 采取和修改自 书 加速C++ 作者:安德鲁·科宁和芭芭拉-E |
![]() |
7
2
接下来,不变量在编写干净的代码时非常有用,因为从概念上知道什么不变量应该存在。 在里面 您的代码允许您轻松地决定如何组织代码以实现这些目标。如前所述,它们在调试中也很有用,因为检查是否维护不变量通常是一种很好的方法,可以查看您试图执行的任何操作是否实际执行了您想要的操作。 |
![]() |
8
1
ADT不变的特殊关系 在数据字段中(实例变量) 在这之前和之后一定是这样 任何实例方法的执行。 |
![]() |
9
1
它通常是一个在某些数学运算中不会改变的量。 安 例子 是一个标量,在旋转下不会改变。例如,在磁共振成像中,用旋转不变量来描述组织特性是有用的,因为在理想情况下,它的估计并不取决于扫描仪中物体的方位。 |