三次分类程序的程序正确性

我想为我的python三次排序程序证明我的循环不变性有所帮助。

到目前为止,我已经弄清了由两部分组成的循环不变量

  1. 0
  2. L [0:i + 1]已排序。
model.matrix(fm)

前提是L是整数列表 帖子:是列表被排列和排序

我不知道如何处理证明

lyj5360 回答:三次分类程序的程序正确性

正确性的证明有两个要素:必须证明算法终止时结果正确。并且您必须证明算法确实终止。


您的两个循环不变式都是正确的,但是您需要证明它们是 不变式。为了说明这一点,您必须证明它们在循环的第一次迭代之前为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]将继续增加到边界,然后根据需要终止循环。

本文链接:https://www.f2er.com/3169620.html

大家都在问