使用循环不变量来证明堆排序的正确性
什么是循环不变量以及如何使用它们来证明堆排序算法的正确性?
没有找到相关结果
已邀请:
3 个回复
窃誓额
资源。 CLRS 例如,我们怎么知道最大堆的构建实际上构建了一个最大堆!如果我们的BuildMaxHeap算法正常工作,我们可以使用它来正确排序。 遵循我们的上述直觉,我们需要决定我们在整个算法中维护的所需属性。 MaxHeap中所需的属性是什么? heap [i]> = heap [i * 2]。无论你在堆中乱七八糟,如果它仍然具有该属性,那么它就是MaxHeap。 因此,我们需要确保用于排序的BuildMaxHeap算法在整个算法中保持不变。 初始化:在第一次迭代之前。一切都是叶子,所以它已经是一堆。 维护:让我们假设到目前为止我们有一个有效的解决方案。节点i的子节点编号高于i。 MaxHeapify也保留了循环不变量。我们在每一步都保持不变性。 终止:当i下降到0并且循环不变时终止,每个节点都是最大堆的根。 因此,您编写的算法是正确的。 算法简介(CLRS)对此技术有很好的处理。
粳饶瓢部
扑北爱