算法導論第二章 思考題

算法導論第二章

思考題

2-1

  • 證明:
    已知插入排序的最壞情況運行時間爲Θ(n2)Θ(n^{2}),且我們使用插入排序來排序長度爲kkn/kn/k個子表。
    長度爲kk的一個子數組,用插入排序其最壞情況運行時間爲Θ(k2)Θ(k^{2}),且有n/kn/k個子表,得出Θ(nk×k2)Θ(\dfrac{n}{k} \times k^{2}),結果爲Θ(nk)Θ(nk)

  • 舉個例子:當一個總長度爲nn的輸入(n>1)(n > 1),經過一次歸併排序遞歸後,將nn一分爲二,也就是n/2n / 2,如果kk爲代表的當前這次的長度n/2n / 2,則我們可以得出層數:
    lg(n/k)+1==log2(n/k)+1==log2(n/n2)+1==log2(2)+1==2lg(n/k)+1==log_{2}(n / k)+1==log_{2}(n / \dfrac{n}{2})+1==log_{2}(2)+1==2
    得到層數爲2。
    同理,當我們再一次經過歸併排序遞歸後,n/2n/2再次一分爲22,也就是(n/2)/2==n/4(n/2)/2==n/4kkn/4n/4,代入上面的式子,得出層數3。
    我們可以得出,lg(n/k)+1lg(n/k)+1即爲歸併排序遞歸的層數,因爲合併算法MERGE的最壞情況運行時間爲Θ(n)Θ(n),得出nlg(n/k)+nnlg(n/k)+n,去掉常量,得出Θ(nlg(n/k))Θ(nlg(n/k))

  • ‎最大值是‎‎k=lgnk‎‎=‎‎lg‎‎n‎,如果我們替代,我們得到:‎
    Θ(nlgn+nlgnlgn)=Θ(nlgn)Θ(nlgn+nlg\dfrac{n}{lgn})=Θ(nlgn)
    如果‎k=f(n)>lgnk=f‎(n‎)>‎‎lg‎‎n‎‎,複雜性將是Θ(nf(n))Θ(nf(n))‎,它比合並排序的運行時間大

  • It’s constant factors, so we just figure out when insertion sort beats merge
    sort, exactly as we did in exercise 1.2.2, and pick that number for k.
    (這是常數因子,所以我們只找出插入排序比合並排序,完全像我們在練習 1.2.21.2.2中所做的那樣,並選擇該數字KK.)

2-2

BUBBLESORT(A)
1   for i = 1 to A.length - 1                       // i = 1,下標i從第一個元素一直循環到i大於A.length - 1停止
2       for j = A.length downto i + 1               // j = A.length,下標j從最後一個元素循環遞減到小於i + 1停止
3           if A[j] < A[j - 1]
4               exchange A[j] with A[j - 1]         // 如果A[j]小於A[j - 1],則交換這兩個元素的值
  • We need to prove that A’ consists of the original elements in A, although in (possibly) different order.
    (我們需要證明A’由A中的原始元素組成,儘管順序可能不同。)

  • 循環不變式(2(2~4)4)
      (1)總是從最後一個元素開始遞減,且後前一位元素進行判斷交換
      (2)每循環一次後,A[j]A[j]A[j..A.length]A[j..A.length]中最小的元素
    證明:
        初始化:循環的第一次迭代ii爲首元素,jj爲尾元素,判斷式爲真,開始執行循環
        保持:進行A[j]A[j]A[j1]A[j - 1]的判斷,如果A[j]>A[j1]A[j] > A[j - 1]則交換換元素中的數據,我們可以得知,A[j]A[j]將會是A[j]A[j1]A[j]和A[j-1]中最小的一個,同理,A[j]A[j]也會是A[j..A.length]A[j..A.length]中最小的。
        終止:因爲每次循環後,A[j]A[j]總是A[j..A.length]A[j..A.length]中最小的,所以退出循環後,A[i]A[i]將會是A[i..A.length]A[i..A.length]中最小的數字

  • 循環不變式(1(1~4)4):
      (1)每次循一次後,A[1..i]A[1..i]都是排好序的
    證明:
        初始化:循環的第一次迭代ii爲首元素,且循環至ii大於A.length1A.length-1,第一次判斷式爲真,開始執行循環
        保持:已經證明了每當執行完次(2(2~4)4)循環時,A[j]A[j]A[j..A.length]A[j..A.length]中最小的元素,得到當前循環每迭代循環一次,其A[1..i]A[1..i]將總是排序好的
        終止:當ii大於A.length1A.length-1終止,A[1..i]A[1..i]將是排序好的,也相當於說A[1..A.length1]A[1..A.length-1]是排序好的,最後一個元素不用排序,因爲它一定是A中最大元素,也理應在最後一位

  • 最壞情況運行時間爲Θ(n2)Θ(n^{2})

 BUBBLESORT(A)
 1   for i = 1 to A.length - 1				c1		n
 2       for j = A.length downto i + 1			c2   		①
 3           if A[j] < A[j - 1]				c3   		②
 4               exchange A[j] with A[j - 1]		c4   		②

   ①  j=2ntj\sum ^{n}_{j=2}t_{j}
   ②  j=2n(tj1)\sum ^{n}_{j=2}\left( t_{j}-1\right)

   該算法的運行時間(執行每條語句的運行時間之和)是:

   T(n)=C1n+C2j=2ntj+C3j=2n(tj1)+C4j=2n(tj1)T\left( n\right) =C_{1}n+C_{2}\sum ^{n}_{j=2}t_{j}+C_{3}\sum ^{n}_{j=2}\left( t_{j}-1\right)+C_{4}\sum ^{n}_{j=2}\left( t_{j}-1\right)

   其中我們注意到:

      j=1ntj\sum ^{n}_{j=1}t_{j} = (n(n+1)21)\left( \dfrac {n\left( n+1\right) }{2}-1\right)

      j=2n(tj1)\sum ^{n}_{j=2}\left( t_{j}-1\right) = n(n1)2\dfrac {n\left( n-1\right)}{2}

   最壞情況運行時間
   T(n)=C1n+C2(n(n+1)21)+C3(n(n1)2)+C4(n(n1)2)T\left( n\right) =C_{1}n+C_{2}\left( \dfrac {n\left( n+1\right) }{2}-1\right)+C_{3}\left( \dfrac {n\left( n-1\right)}{2}\right)+C_{4}\left( \dfrac {n\left( n-1\right)}{2}\right)

      =(C22+C32+C42)n2+(C1+C22C32C42)nC2=\left( \dfrac {C_{2}}{2}+\dfrac {C_{3}}{2}+\dfrac {C_{4}}{2}\right) n^{2}+\left(C_{1}+\dfrac {C_{2}}{2}-\dfrac{C_{3}}{2}-\dfrac{C_{4}}{2}\right)n-C_{2}

   我們可以表示爲:an2+bn+can^{2}+bn+c
   忽略掉低階項和最重要的項的常係數時,只剩下重要的項中的因子n2n^{2},得出運行時間爲Θ(n2)Θ\left(n^{2}\right)

   與插入算法相比,感覺半斤八兩吧

2-3

  • Θ(n)Θ(n)
  • 該算法的運行時間是Θ(n)Θ(n),與霍納規矩相比,霍納規矩的性能更好
Polynomial(A, n)     // A爲a0..an,A.length == n
1   if n == 0
2       return A[A.length - n]
3   return A[A.length - n] + x * Polynomial(A, n - 1)
  • 算法導論第二章思考題2-3((自己看))
  • It should be fairly obvious, but the invariant of the loop is a sum that equals a polynomial with the given coefficients.
    (這應該是很明顯的,但是循環不變式是一個等於給定係數的多項式的和。)

2-4

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章