這對於在陣列中的線性搜索僞代碼,如果在陣列A
所需元素e
被發現返回一個索引i
,NIL
否則(這是來自CLRS書,第3版,運動2.1-3):這是這個循環的正確不變嗎?
LINEAR_SEARCH (A, e)
for i = 1 to A.length
if A[i] == e
return i
return NIL
我試圖從中推斷循環不變的,所以根據我的理解,我認爲,一個是由事實來表示,在循環中任何時刻子陣列A[1..i-1]
只包含其值平等測試證明是錯誤的。
具體而言,在第一次迭代i-1 == 0
這意味着該子陣列的長度爲空之前,因此不能有屬於它使得v == e
元件v
。在進行任何下一次迭代之前,作爲退出條件的等同性測試,假定的不變性必須保持爲真,否則循環已經結束。一旦終止,它要麼是功能即將返回的索引(在這種情況下,循環不變是平凡真實的),或NIL返回(在這種情況下i == A.length + 1
,所以循環不變任何1 < j < i
也是如此)。
以上是否正確?如果不是,你能否提供一個正確的循環不變式?
感謝您的關注。