1.定义:书中举出A[1..j-1]这个已排序数组的例子,将其性质具有的性质归纳为循环不变式
那么有哪些性质呢:
(1)在执行最外层for循环的每次迭代开始时,子数组A[1..j-1]由原来在A[1..j-1]中的元素组成,但已按序排列。
(2)循环不变式主要用来帮我们理解算法的正确性。
(3)三条性质:
初始化:循环的第一次迭代之前,它为真。
保持:如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真。
终止:在循环终止时,不变式为我们提供一个有用的性质,该性质有助于证明算法是正确的。
2.自我理解:
主要写第三条,即三条性质。
首先,初始化是对于某个循环中的主要操作对象在最开始进入for类似的循环之前,即for条件的第一步开始,操作对象满足当前循环所追求的一种不变的性质,例如我追求所有操作对象有序,那么你的第一步的初始化对象就得是有序的,不然怎么也达不到最终目的。类似于归纳法的第一步。
其次,保持是为了让操作对象在执行每一次循环操作过后,其性质与前一次循环操作过后的对象性质保持一致,比如插入排序中第3次循环过后的排序数组其前3项,与第2次循环过后的排序数组的前2项,都得是有序的,依此类推。类似于归纳法的第二步。
再者,终止是为了验证算法正确的一个结果,即执行完所有循环后返回的结果必须与我们追求的结果是一致的。类似于归纳法的第三步。
而我们设计算法时,是根据结果是否具有我们所追求的性质来判断算法的正确性的。此时觉得归纳法在解决迭代式相关问题的重要性。
初次学习,望指正。
本文深入解析循环不变式的三个关键属性:初始化、保持和终止。通过具体实例,如插入排序过程,阐述了这些属性如何确保算法的正确性和效率,强调了归纳法在迭代问题解决中的重要角色。
1131

被折叠的 条评论
为什么被折叠?



