consider thesearching problem:
input:a sequence of n numbers a = and a value v.
output:an index i such that a[i] = v or the special value nil if v does not
write pseudocode forlinear search, which scans through the sequence, looking
for v. using a loop invariant, prove that your algorithm is correct. make sure that
your loop invariant fulfills the three necessary properties.
偽**:
linear_search(a , v)
fori=1 to n
do ifa[i] = v
thenreturn i
i = i + 1
returnnil
利用迴圈不變式證明:
我們可以斷言:對於任意 x < i ,a[i] != v為真,在迴圈開始之前和迴圈的每一次迭代以及迴圈結束後,都成立。
初始化:此時,x < 1, a[x]超出了陣列邊界,所以不存在為v的元素。
保持:如果 a[i] = v成立,那麼x < i時,a[i] != v;反之,也成立
結束:很顯然,我們的斷言也是成立的。
另外,所謂「迴圈不變式」就是,某個斷言,在進入迴圈之前和離開迴圈之後都為真。
參考:維基百科:
《演算法導論》習題2 1 3
考慮以下查詢問題 輸入 n個數的乙個序列a 和乙個值 v 輸出 下標i使得 v a i 或者當 v 不在 a中時,v 為特殊值nil。寫出線性查詢的偽 它掃瞄整個序列來查詢 v。使用乙個迴圈不變式來證明你的演算法是正確的。確保迴圈不變式滿足三條必要的性質。偽 find key a,v fori 1 ...
演算法導論課後習題第二章(1)
練習 2.1 1 以圖 2 2 為模型,說明 insertion sort 在陣列 a 31,41,59,26,41,58 上的 執行過程。2.1 2 重寫過程 insertion sort,使之按非公升序 而丌是按非降序 排序。insertion sort a 1 for j 2 to lengt...
演算法導論 習題 5 4 1
題 乙個房間裡必須要有多少人,才能讓某人和你生日相同的概率至少為1 2?必須要有多少人,才能讓至少兩個人生日為7月4日的概率大於1 2?解 1.假設一年有n 365 天,房間裡面有x人 不算自己 為求某人與自己生日相同,可求其反面,即房間裡面沒人跟自己生日相同,他們每個人生日可以在n天中選擇除去我生...