1. 程式人生 > >演算法導論學習-數學歸納法與迴圈不變式理解

演算法導論學習-數學歸納法與迴圈不變式理解

數學歸納法:

最簡單和常見的數學歸納法是證明當n等於任意一個自然數時某命題成立。證明分下面兩步:
  1. 證明當n= 1時命題成立。
  2. 假設n=m時命題成立,那麼可以推導出在n=m+1時命題也成立。(m代表任意自然數)
這種方法的原理在於:首先證明在某個起點值時命題成立,然後證明從一個值到下一個值的過程有效。當這兩點都已經證明,那麼任意值都可以通過反覆使用這個方法推匯出來。把這個方法想成多米諾效應也許更容易理解一些。例如:你有一列很長的直立著的多米諾骨牌,如果你可以:
  1. 證明第一張骨牌會倒。
  2. 證明只要任意一張骨牌倒了,那麼與其相鄰的下一張骨牌也會倒。
  3. 那麼便可以下結論:所有的骨牌都會倒下。
迴圈不變式:

迴圈不變式為演算法思想,用於判斷演算法的正確性,通常通過三條性質證明:初始化、保持、終止。

1、初始化。比如插入演算法開始第一次迭代之前,只有一個元素,顯然成立。

2、保持。也就是演算法迴圈過程中不變的特性,比如插入排序,每次排完前面的序列都是排好序的。

3、終止。迴圈結束時,可以保證演算法正確,比如插入排序,前面n-1次都是排好序的,那麼最後一次也是排好序的。

正確演算法的迴圈過程中總是存在一個維持不變的特性,這個特性一直保持到迴圈結束乃至演算法結束,這樣就可以保證演算法的正確了。
比方說插入排序,演算法每次迴圈後,前n個數一定是排好序的(n為已經迴圈的次數)。由於這個特性一直成立,到演算法結束時,所有N個數一定是排