1. 程式人生 > >比較演算法排序時間複雜度證明過程

比較演算法排序時間複雜度證明過程

比較演算法排序

證明過程

  1. 通過排序樹,我們將陣列的比較過程分解(兩數相比得到的結果將為二叉樹)
    則所有的葉節點的排列順序為可能的排列順序(若有nn個元素,則排列個數為n!n!
    則決策樹的規模為指數級。(論文中出現的虛擬碼雖然及其難懂但長度較為固定)
  2. 則最差情況為我們所需即Ω\Omega,即為證二叉排序樹的高度即O(nlgn)O(n\lg n)1
  1. 設我們當前的二叉樹高度為hh,則葉節點的個數最多有2h2^h個即:
    leaves2h\mathcal{leaves} \le 2^h
  2. 由1可知,我們所得樹的葉子節點為n!n! ,則有:
    n!
    2hn! \le 2^h
  3. 由於兩邊均大於00,兩邊取對數則有:
    logn!h\log n! \le h
  4. 根據斯特林公式2得:

log2πn(ne)nh\log\sqrt{2 \pi n}(\frac{n}{e})^n \le h

  1. 整理得:
    n(lognloge)hn (\log n - \log e)\le h
  2. nn為無窮大時 logelog2πn\log e,\log \sqrt{2\pi n}為常數則:
    h=Ω(nlogn)h= \Omega(n\log n)

故,諸如QuickSort等比較排序得最佳時間複雜度為Θ(nlogn)\Theta(n\log n)

  1. 二叉樹為O(nlogn)O(n \log n),同理 aa叉樹為O(nlogan)O(n \log_an) ↩︎

  2. 詳見百度百科:斯特林公式(等式右邊可以直接取最高階因子(ne)n(\frac{n}{e})^n↩︎