演算法導論 第三版 第二章2 3 4 2 3 5

2021-10-03 17:40:37 字數 825 閱讀 8448

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,...