十大算法之管窺算法

本文將通過一些實例的講解來作爲算法入門的一個階梯,更爲主要的是記錄我在學習算法過程中對算法的一些理解,希望能幫助到自己也能幫助到觀看到這篇博客的人,廢話不多說,馬上開始。

最大連續子數組問題:

給定一個數組A[0,…,n-1],求A的連續子數組,使得該子數組的和最大。
例如:
數組:1,-2,3,10,-4,7,2,-5
最大子數組:3,10,-4,7,2

分治法:

  1. 將數組從中間分開,那麼最大子數組要麼完全在左半邊數組,要麼完全在右半邊數組,要麼跨立在分界點上。
  2. 完全在左數組右數組遞歸解決
  3. 跨立在分界點上:實際上是左數組的最大後綴和右數組的最大前綴的和。因此,從分界點向前掃,向後掃即可。

分治法時間複雜度分析:

  1. 算法的遞推關係:T(n) = 2*T(n/2)+cn
  2. 若n = 2^k,則有
    T(n)=2T(n2)+cn=2(2T(n4)+cn2)+cn==2kT(1)+kcn=an+cnlog2n T\left ( n \right )=2\cdot T\left ( \frac{n}{2}\right )+c\cdot n =2\cdot \left ( 2\cdot T\left ( \frac{n}{4} \right )+c\cdot \frac{n}{2} \right )+c\cdot n =\cdot \cdot \cdot =2^{k}T\left ( 1 \right )+kc\cdot n=an+cn{log{2}}^{n}
  3. 2k<n<2k+12^{k}<n<2^{k+1},則T(2k)<T(n)<T(2k+1)T\left ( 2^{k} \right )<T\left ( n \right )<T\left (2 ^{k+1} \right )
  4. 則可得T(n)=O(nlogn)T\left ( n \right )=O\left ( nlogn \right )
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章