在演算法中,有乙個重要的概念就是迴圈不變式,迴圈不變式主要用來幫助我們理解演算法的正確性。關於迴圈不變式,我們必須證明三條性質:
1.初始化:迴圈的第一次迭代之前,它為真。
2.保持:如果迴圈的某次迭代之前它為真,那麼下次迭代之前它仍為真。
3.終止:在迴圈終止時,不變式為我們提供了乙個有用的性質,該性質有助於證明演算法是正確的。
我們用插入排序來解釋這個性質:
/*** 編寫插入排序, 運用 迴圈不變式的思想 本質上就是 迭代化歸的過程
* 特點
* 1.初始化
* 2.保持
* @author neuclil
* */
public class test ;
insertsort(a);
for(int i=0; i0; j--)else
}//迴圈退出 有兩個可能 1.a[j-1]0; j--)else
}//迴圈退出 有兩個可能 1.a[j-1]
迴圈不變式
先看引用自由cay horstmann寫的 computing concepts with c essentials 3rd 一書的,用以計算a n的例子 double power double a,int n else return r 粗看一下,用此方法計算a n時比原始方法進行迴圈次數要少很多...
迴圈不變式的思想及其應用
迴圈不變式的思想及其應用 迴圈不變式 loop invariants 不只是一種電腦科學的思想,準確地說是一種數學思想。在數學上闡述了通過迴圈 迭代 遞迴 去計算乙個累計的目標值的正確性,屬於基礎數學的範疇,而且在計算機上也應用廣泛。初次見到這個詞是在 演算法導論 在第二章描述了這個思想和正確性,後...
排序 插入排序(迴圈不變式)
插入排序的思想是構造乙個迴圈不變式,可用撲克牌的例子來解釋,左手為已經排好序的牌,右手為未排好序的牌,分別將右手中的牌依次一張一張地插入到左手,將左手中的每一張牌依次和這張牌比較,以此來確定這張牌在左手中的正確順序,然後進行下一張牌,在這個過程中,左手中的牌始終是排好序的,即不變的,稱為迴圈不變式 ...