(參數傳遞代價)我們有一個貫穿本書的假設——過程調用中的參數傳遞花費常量時間,即使傳遞一個N個元素的數組也是如此。在大多數系統中,這個假設是成立的,因爲傳遞的是指向數組的指針,而非數組本身。本題討論三種參數傳遞策略:
1. 數組通過指針來傳遞。時間 = Θ(1)。
2. 數組通過元素複製來傳遞。時間 = Θ(N),其中N是數組的規模。
3. 傳遞數組時,只複製過程可能訪問的子區域。若子數組A[p..q]被傳遞,則時間 = Θ(q−p+1)。
a. 考慮在有序數組中查找元素的遞歸二分查找算法(參見練習2.3-5)。分別給出上述三種參數傳遞策略下,二分查找最壞情況運行時間的遞歸式,並給出遞歸式解的好的上界。令N爲原問題的規模,n爲子問題的規模。
b. 對2.3.1節的MERGE-SORT算法重做(a)。
解
a. 二分查找
如果忽略參數傳遞時間,二分查找的運行時間的遞歸式爲T(n)=T(n/2)+Θ(1)。
(1) 數組通過指針來傳遞
最壞情況運行時間遞時式爲T(n)=T(n/2)+Θ(1)+Θ(1)=T(n/2)+Θ(1),求解該遞歸式得到T(n)=O(lgn)。
(2) 數組通過元素複製來傳遞
最壞情況運行時間遞時式爲T(n)=T(n/2)+Θ(1)+Θ(N)=T(n/2)+Θ(N),其中N爲原數組規模,求解該遞歸式得到T(n)=O(nlgn)。
(3) 數組通過只複製子問題要訪問的區域來傳遞
最壞情況運行時間遞時式爲T(n)=T(n/2)+Θ(1)+Θ(n)=T(n/2)+Θ(n),用主方法求解該遞歸式得到T(n)=O(n)。
b. MERGE-SORT
如果忽略參數傳遞時間,MERGE-SORT的運行時間的遞歸式爲T(n)=2T(n/2)+Θ(n)。
(1) 數組通過指針來傳遞
最壞情況運行時間遞時式爲T(n)=2T(n/2)+Θ(n)+Θ(1)=2T(n/2)+Θ(n),求解該遞歸式得到T(n)=O(nlgn)。
(2) 數組通過元素複製來傳遞
最壞情況運行時間遞時式爲T(n)=2T(n/2)+Θ(n)+Θ(N)=2T(n/2)+Θ(N),其中N爲原數組規模,求解該遞歸式得到T(n)=O(n2)。
(3) 數組通過只複製子問題要訪問的區域來傳遞
最壞情況運行時間遞時式爲T(n)=T(n/2)+Θ(n)+Θ(n)=2T(n/2)+Θ(n),求解該遞歸式得到T(n)=O(nlgn)。