我想为我的python三次排序程序证明我的循环不变性有所帮助。
到目前为止,我已经弄清了由两部分组成的循环不变量
- 0
- L [0:i + 1]已排序。
model.matrix(fm)
前提是L是整数列表 帖子:是列表被排列和排序
我不知道如何处理证明
我想为我的python三次排序程序证明我的循环不变性有所帮助。
到目前为止,我已经弄清了由两部分组成的循环不变量
model.matrix(fm)
前提是L是整数列表 帖子:是列表被排列和排序
我不知道如何处理证明
正确性的证明有两个要素:必须证明算法终止时结果正确。并且您必须证明算法确实终止。
您的两个循环不变式都是正确的,但是您需要证明它们是 不变式。为了说明这一点,您必须证明它们在循环的第一次迭代之前为true,如果在某个迭代之前为true,那么在该迭代之后它们将为true。
完成此操作后,很容易理解,当循环终止时,Edit the css and include:
<style>
.icon {
width: 80px;
clear: left;
float: left;
border-radius: 50%;
}
.name {
clear: right;
float: right;
margin-left: 10px;
padding-top: 10px;
}
.num {
clear: both;
float: none;
text-align: center;
font-size: 100px;
}
<style>
等于i + 1 == len(L)
等于L[0:i+1]
,因此,L
在循环终止时被排序。
通常,通过找到loop variant(整数数量在循环的每次迭代时都会变小),并在数量达到0时使循环终止,可以更直观地表明算法终止。但是对于该算法,没有明显的变化,因为循环计数器L
在循环内被重置为i
,这意味着该变量不会简单地单调变大或变小。
此证明的关键是考虑列表中inversions的数目,其中“取反”表示一对乱序的列表元素。在每次迭代中,0
会变大,或者i
会重置为0,但反转次数会减少1。i
不可能不断变大,而且数量也会变大以保持变小,而不会i
到达i
循环边界或倒数达到0的情况。一旦列表中没有倒数,while
始终为false,因此L[i] > L[i + 1]
将继续增加到边界,然后根据需要终止循环。