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的正确性。