2017-02-12 33 views
0
k :=0 
for i ←1 to n 
    c←a[i] 
      k←k+1 

這並沒有改變的事情是要知道元素,在算法

+0

我發現k <= i在循環之前,期間和結束時是真的@NickA –

+0

最好把已經完成的所有工作都放到問題中,人們會更傾向於幫助你如果他們覺得你至少試圖解決這個問題。 @亞歷山大 –

+0

謝謝,我會@NickA,如果你能幫忙請做 –

回答

0

技術上的數量algorithim,是的,k <= i是不變的,但不是一個非常有用的一個。我們使用不變量的原因是我們可以使用它們來證明循環後的狀態。隨着你的不變,你可以證明k <= n後循環。雖然非常真實,但這並不能真正幫助你試圖證明循環的真正作用。

那麼什麼樣的不變量會有用?我們想要證明k等於ab中的元素數量。由於我們正在循環遍歷a中的元素,因此一個不錯的選擇是:k等於也在b中的元素數量達到a[i]


我們現在需要證明這個不變量成立。我會保持一點粗略,所以它仍然由你來形式化。

最初,我們需要證明k = 0a[1]之前的元素的數量,它們也是b。沒有這樣的元素,所以k = 0是正確的。

現在,考慮到ki是的元素數也是b,我們需要證明該不變量對於i+1成立。有兩種選擇:或者a[i+1]b中,或者不是。

  • 如果ba[i+1],然後元件高達a[i + 1]是在b的數量比元件的可達a[i]是在b的數量大一個。使用我們的不變量,我們因此需要顯示ki+1 = ki + 1
  • 如果a[i+1]不在b,然後元件高達a[i + 1]是在b的數目等於元素多達a[i]是在b的數量。使用我們的不變量,我們因此需要顯示ki+1 = ki

我會留給你來證明這些。

+0

我明白這一點,它的真實性。所以,現在我們想通過初始化,維護和終止來證明循環不變。所以在初始化時我們說在第一次迭代之前k = 0。保持我應該說或證明什麼? @Vincent van der Weele –

+0

我添加了一個關於證明草圖的部分。我希望你能從那裏拿走它。 –