,在算法
回答
技術上的數量algorithim,是的,k <= i
是不變的,但不是一個非常有用的一個。我們使用不變量的原因是我們可以使用它們來證明循環後的狀態。隨着你的不變,你可以證明k <= n
後循環。雖然非常真實,但這並不能真正幫助你試圖證明循環的真正作用。
那麼什麼樣的不變量會有用?我們想要證明k
等於a
和b
中的元素數量。由於我們正在循環遍歷a
中的元素,因此一個不錯的選擇是:k
等於也在b
中的元素數量達到a[i]
。
我們現在需要證明這個不變量成立。我會保持一點粗略,所以它仍然由你來形式化。
最初,我們需要證明k = 0
是a[1]
之前的元素的數量,它們也是b
。沒有這樣的元素,所以k = 0
是正確的。
現在,考慮到ki
是的元素數也是b
,我們需要證明該不變量對於i+1
成立。有兩種選擇:或者a[i+1]
在b
中,或者不是。
- 如果
b
a[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
。
我會留給你來證明這些。
我明白這一點,它的真實性。所以,現在我們想通過初始化,維護和終止來證明循環不變。所以在初始化時我們說在第一次迭代之前k = 0。保持我應該說或證明什麼? @Vincent van der Weele –
我添加了一個關於證明草圖的部分。我希望你能從那裏拿走它。 –
- 1. 在php中無法算出算法
- 2. 算法在PHP
- 3. 在FFT算法
- 4. karatsuba算法在Python
- 5. 算法在美國
- 6. 算法在列表
- 7. Djikstra算法在C
- 8. NYSIIS算法在Perl
- 9. 堆在Dijkstra算法
- 10. LRU算法在Java
- 11. 算法在畫布
- 12. 算術算法
- 13. 算法歷算
- 14. 圖算法,近似算法
- 15. 選舉算法 - 環算法
- 16. 算法導論算法
- 17. 算法:Esau-Williams算法
- 18. 在序言中計算算法時間
- 19. 算法計算最大點在點集
- 20. 在算術代碼算法,C++
- 21. 用算法計算
- 22. 圖算法來算
- 23. 計算器算法
- 24. 算法
- 25. 算法
- 26. 算法
- 27. 算法
- 28. 「波算法」(總部設在李的算法)用C
- 29. '是SignatureMethod' 算法相對於 'DigestMethod' 算法在XML簽名
- 30. 異或算法在算法中的一些實際應用
我發現k <= i在循環之前,期間和結束時是真的@NickA –
最好把已經完成的所有工作都放到問題中,人們會更傾向於幫助你如果他們覺得你至少試圖解決這個問題。 @亞歷山大 –
謝謝,我會@NickA,如果你能幫忙請做 –