1.算法
循环不变式实际是这个循环的功能,或者数据结构保持不变的性质。循环不变式在第一个迭代前成立,在每一次迭代后仍然成立。
循环不变式选自《算法导论》
(1)快速排序
循环不变量:
数组A[k](p<=k<=r),p与r是数组边界。
则,1. p<=k<=i,则A[k]<=x。
2. i+1<=k<=j-1,则A[k]>x。i,j是high端与low端的工作游标。
3. K=r,则A[k]=x。
算法效率循环不变式:
中间数据结构一棵BST,根节点pivot,所有在左右子树的节点,遵守左子树节点<pivot,右子树节点>pivot。
循环不变式的效度: 两个游标在边界中,而且左子树游标<右子树游标。(注意辨析)
循环终止条件: 两个游标相等,或超出边界。
(2)堆排序
循环不变量:
最大堆建堆算法,调整A[i],结点i+1,i+2,...,n都是一个最大堆的根结点。
*每一个结点i只在一个“队列”中,这个队列是结点i到结点i为顶点(根)的待排序最大堆的完全二叉树的一个叶结点。
保持最大堆的性质,根结点是最大值,用遵守性质的结点数量递增的方法。
算法效率方法,数据精确比较范围,每次堆结点调整只在一个队列中。
(3)归并排序
有序数组A[p..q]与A[q+1..r]合并并且代替数组A[p..r]。
循环不变量:
部分数组A[p..k-1](p<=k<=r)按从小到大的顺序,包含L[l..n1](n1=q-p+1,等于A[p..q])和R[1..n2](n2=r-q,等于A[q+1..r])中的k-p个最小元素。L[l]和R[j]是各自数组未被复制回的最小元素。
算法效率方法:
数据分组的树形序。
2.程序性质
快速排序,双向多序,树型序。
堆排序,完全二叉树,每一个元素在从堆顶元素为首元素的一个队列中,数据确定比较范围。
3.数据组织技术与算法复杂度分析