使用循环不变式证明Mergesort中“拆分部分”的正确性

时间:2019-02-18 23:13:26

标签: algorithm sorting mergesort

def mergesort(U): 

===== SPLITTING PART =====
L = []
R = []
while U != [] and tail(U) != []:  
   L = L + [head(U)]  
   U = tail(U)  
   R = R + [head(U)]  
   U = tail(U)  
L = L + U 
===== SPLITTING PART =====
L = mergesort(L)  
R = mergesort(R)  
mergeFunction()
return

分割部分将U分为长度相等的两半L和R。但是,我想不出任何循环不变性来证明这一点。我知道循环不变性必须在循环之前(初始化),每次迭代(维护)之后为真,并且在循环终止(终止)之后给我们一个有趣的结果,但是我想不出满足这三个条件的一个。 这不是家庭作业,因为我不需要完整的证明,而我只是在练习使用Cormen的CLRS中的循环不变式来证明mergesort的正确性。

0 个答案:

没有答案