筆記
我們所熟知的插入排序、歸併排序、快速排序等排序算法,它們的排序過程都依賴於比較元素間的大小,我們稱這些算法爲比較排序。本節討論比較排序算法的運行時間的下界。
給定一個輸入序列。爲簡化分析,假定所有輸入元素都是互異的。
比較排序可以抽象爲一棵決策樹。下圖決策樹展示了插入排序算法作用於包含3個元素的輸入序列的情況。決策樹是一棵完全二叉樹。每個非葉結點都以標記,表示一對元素和的比較過程。插入排序從根結點開始,根據結點的比較結果,逐層向下走。在一個非葉結點,如果比較之後確定兩個元素的大小關係爲,那麼進入左子樹;如果比較之後確定兩個元素的大小關係爲,那麼進入右子樹。當到達一個葉結點時,表示已經排好序。每一個葉結點都表示一個可能的排好序的序列。
對於一個有個元素的序列來說,可能的排好序的序列一共有種,對應的決策樹就有個葉結點。一個排序過程的運行時間取決於它所包含的比較次數。對於一個確定的排序過程,比較次數等於從決策樹的根結點到一個葉結點的路徑長度。因此,一個排序算法的最壞情況比較次數等於其決策樹的高度,即從根結點到最低層次葉結點的路徑長度。
考慮一棵高度爲、具有個葉結點的決策樹,它對應一個有個輸入元素的排序算法。因爲輸入數據的種可能的排列都是葉結點,所以有。由於在一棵高度爲的二叉樹中,葉結點的數目最多爲個,因此有。對該式取對數,得到。於是可以得到,在最壞情況下,任何比較排序算法都至少需要做次比較。
練習
8.1-1 在一棵比較排序算法的決策樹中,一個葉結點可能的最小深度是多少?
略
8.1-2 不用斯特林近似公式,給出的漸近緊確界。利用A.2節中介紹的技術來累加和。
解
爲單調遞增函數,根據A.2節結論,可以通過積分近似方法來累加和的漸近緊確界。
由上式可以得到,成立。
8.1-3 證明:對種長度爲的輸入中的至少一半,不存在能達到線性運行時間的比較排序算法。如果只要求對的輸入達到線性時間呢?呢?
解
一棵高度爲的決策樹最多有個葉結點。
對於一個含個元素的序列,如果可能的排列一共有種,那麼其決策樹的葉結點數目滿足。可以得到。因此對於至少種可能的排列,比較排序算法也不能達到線性運行時間。
如果可能的排列一共有種,,那麼其決策樹的葉結點數目滿足。可以得到。這種情況下,比較排序算法也不能達到線性運行時間。
如果可能的排列一共有種,,那麼其決策樹的葉結點數目滿足。可以得到。這種情況下,比較排序算法也不能達到線性運行時間。
8.1-4 假設現有一個包含個元素的待排序序列。該序列由個子序列組成,每個子序列包含個元素。一個給定子序列中的每個元素都小於其後繼子序列中的所有元素,且大於其前驅子序列中的每個元素。因此,對於這個長度爲的序列的排序轉化爲對個子序列中的個元素的排序。試證明:這個排序問題中所需比較次數的下界是。(提示:簡單地將每個子序列的下界進行合併是不嚴謹的。)
解
正如提示所言,我們不能簡單將每個子序列的下界進行合併。因爲這種做法引入了一個前提,那就是我們採用的排序算法必須是獨立地對每個子序列進行排序的,元素間的比較僅限於各子序列內部。而對於那些存在跨子序列比較的排序算法,這一做法並沒有考慮進來。因此這一做法是不嚴謹的。
我們還是需要將整個序列當做一個整體來考察。每個子序列都有種可能的排列,一共有個子序列,那麼整個序列一共有種可能的排列。假定針對該序列的排序算法的決策樹的高度爲,那麼滿足,兩邊取對數可得到