2.3-4 我們可以把插入排序表示為如下的乙個遞迴過程.為了排序a[1...n], 我們遞迴地排序a[1..n-1],然後把a[n]插入已排序的陣列a[1..n-1].
為插入排序的這個遞迴版本的最壞情況執行時間寫乙個遞迴式.
最壞運**況t(n)
t(n) = 0 (n=1時)
t(n) = t(n-1) + n
思考過程:
當只有乙個數需要排序時 不用時間;
當有2個數時 第二個數需要考慮插入的位置是: 第乙個數的前面 或排在最後
當有3個數時 除了前2個數的排序步驟 第三個數要考慮3個排序位置: 第乙個數的前面 第二個數的前面 或排在最後
以此類推 第n個數要考慮的排序位置 是前面n-1個數的排序時長 即t(n-1) 加上自己的n-1個排序可能性
關於t(n)的最壞可能性的解是: t(n) = (2+n)*(n-1)/2
反證:如果n = 1; t(n) 根據假設解 = (2+n)*(n-1)/2 帶入 = 0;成立
如果帶入n+1; 第二步驟遞迴式為t(n+1) = t(n) + n + 1 根據假設解t(n) = (2+n)*(n-1)/2 將其帶入遞迴式右邊得到:
t(n+1) = (2+n)*(n-1)/2 + n + 1
t(n+1) = (2n-2+n^2-n)/2 + 2n/n +2/2
t(n+1) = (2n-2+n^2-n+2n+2)/2
t(n+1) = (n^2+3n)/2
t(n+1) = (n+3)*n/2
t(n+1) = (2+n+1)*(n+1 -1)/2
所以解t(n) = (2+n)*(n-1)/2成立
演算法導論第三版習題5 2
正好僱傭一次說明第一次僱傭的就是所有應聘者中最好的,所以概率為1n 正好僱傭 n 次說明所有應聘者按優秀從低到高依次出現,第一位是最差的,概率為1n 第二位其次,概率為1n 1,所以整體概率為1n 正好僱傭兩次,說明第乙個應聘者不是最好的,概率為n 1n,第二個應聘者是最好的,概率為1n 1,所以概...
演算法導論第三版習題5 3
在進入迴圈前,先將在整個陣列中隨機選擇乙個數至於a 1 即可 permute in place a 1 n a.length 2 swap a 1 with a random 1,n 3 for i 2 to n 4 swap a i with a random i,n 第二步其概率為1n 後面一樣...
演算法導論第三版習題6 3
a a.leng th 9 故從i a.l engt h 2 4開始呼叫max heapify a,i a 4 9 8 故交換a 4 和a 8 得到新的序列a1 b 接下來呼叫max heapify a,3 a 7 3 6 故交換a 3 和a 6 得到a2 c 第三步呼叫max heapify a,...