1. 程式人生 > >演算法導論課後習題解析 第二章

演算法導論課後習題解析 第二章

2.1-1
初始 31 41 59 26 41 58
第一遍 31 41 59 26 41 58
第二遍 31 41 59 26 41 58
第三遍 26 31 41 59 41 58
第四遍 26 31 41 41 59 58
第五遍 26 31 41 41 58 59


2.1-2
把順序改成非遞增只要把判斷大小時的條件改成小於即可

1 2 3 4 5 6 7 8 Insertion-Sort(A) for j = 2 to A.length key = A[j]
i = j - 1 while i > 0 and A[i] < key A[i + 1] = A[i] i = i - 1 A[i + 1] = key

2.1-3

1 2 3 4 5 Linear-Search(A, v) for i = 1 to A.length if A[i] == v return i return NIL
  • Initialization: 一開始i=1,說明子序列[1, 0]即空集中不包含所找的v。
  • Maintenance: 接下來,每次迴圈開始的時候都有子序列[1, i - 1]中不包含所找的v,而每次迴圈都判斷A[i]是否是v,當不是v的時候說明子序列[1, i]中都不包含要找的v,這為下一次迴圈提供了前提條件。
  • Termination: 最後當迴圈退出的時候有兩種情況:當發現A[i]等於v的時候返回要找元素的下標i;當迴圈進行到i=A.length次後,這時說明子序列[1, A.lenght]即整個序列中都沒有要找的v,這個時候返回NIL。

2.1-4
Input: 兩個n位元序列 A={a1,a2,,an}A={a1,a2,…,an} B={b1,b2,,bn}B={b1,b2,…,bn}


Output: 一個n+1位元序列 C={c1,c2,,cn+1}C={c1,c2,…,cn+1} 使得等式 (cn+1cnc2c1)2=(anan1a2a1)2+(bnbn1b2b1)2(cn+1cn…c2c1)2=(anan−1…a2a1)2+(bnbn−1…b2b1)2 成立
利用全加器的邏輯位運算可以簡單得到每一位的結果和進位。

1 2 3 4 5 6 7 8 9 10 11 Binary-Addition(A, B) inc = 0 i = 1 while i <= A.length k = A[i] xor B[i] g = A[i] and B[i] C[i] = k xor inc inc = inc and k or g i = i + 1 C[i] = inc