1. 程式人生 > >演算法導論·《迴圈不變式》

演算法導論·《迴圈不變式》

當我們編寫一則演算法時必定是期望對資料處理以達到某種效果,例如對於雜亂的數列進行大到小排序,那麼在迴圈前,迴圈中和迴圈結束時數列保持不變的性質,稱為迴圈不變式。

數列可以具有多個性質不變,就像插入排序,對於A[1...j-1]總是排序好的數列,並且A[j-1]比前方的數都要大或小。這兩個性質形式地表示為迴圈不變式。

迴圈前:第一次迴圈迭代前,即第一次檢驗迴圈條件之前and迴圈初始條件之後。

迴圈中:迴圈過程中性質不發生改變。即在插入排序中,不會出現A[1...j-1]沒有排序好的情況。

迴圈結束時:也就是演算法結束時,數列的性質仍然成立,進而證明演算法已經對資料處理達到我們想要的效果。

迴圈不變式是用來證明演算法的正確性。

1·1·1·1·1=1;1·1·0·1·1·=0;迴圈不變式要求數列的性質在演算法執行過程中始終為真,即1。而一旦為0,演算法就不正確或者該性質不能成為迴圈不變式。