閱讀 commit b5c56e0 提及之三篇論文並思考 merge sort 與其變形之優劣勢,並嘗試提示洞見與可能的改進。該 commit 提及的論文分別如下
表示排序 個元素最少需要做幾次比較,這項指標對排序演算法的效能影響最大。 Divide-and-conquer 演算法幾乎都存在週期性現象, merge sort 也不例外。該論文首先定義 這三個參數表示 top-down mergesort 在 best case, worst case 與 average case 所需要的比較次數。 還可以因為其週期性性質而歸納出以下公式
其中 ,因此上式展開後可得
不過我不理解此處為何能清楚展現 mergesort 的週期特性,同時對於 best case 來說
即是 的 population count ,這篇論文主要是想要推導出對於 bottom-up mergesort 的 closed form 公式,也就是 。
Bottom-up mergesort 和 top-down mergesort 差別在於 splitting 的方法, bottom-up mergsort 採用的是 "power-of-two" splitting ,而 top-down mergesort 則是採用 "half-and-half" splitting ,這也造成呼叫合併的次數會不同,把 mergesort 視覺化可以發現 merging process 看起來像一棵樹,而 bottom-up mergesort 在第 層 ( 0-index ,最底層是 0 ) 有 個進行完整合併的節點,也就是將 個元素與 個元素進行合併,另外若 則會多一個 incomplete merge 來合併 個元素與 個元素,總結來說對於 個元素的 bottom-up mergesort 總共需要 個 complete merge 與 個 incomplete merge 。假設合併 元素所需的比較次數表示為
並且 的機率為
因此 的期望值為
其中
首先推導 best case 也就是 , best cases 發生在每個合併過程都是最佳也就是 時,因此對於 complete merge 來說總比較次數是 ,因為 complete merge 在第 層進行 次 的合併, 。然後進行 次 incomplete merge ,總共會是 。
同時根據 Trollope-Delange formula 可以得出
因此可以推導出以下 (看不出如何推導的)
將 做圖可看出他的週期特性。
worst case 則是每次合併都使用到 次比較,可以推得 為
其中 為 trailing zeros ,其中 linear term 是 做圖後也可看出他的週期特性。
Average case 則是透過加總每個合併的比較次數期望值,同樣可以在 linear term 發現週期特性。
兩者在 best case 當中比較次數會相同,但 worst case 和 average case 皆是 top-down mergesort 比較次數更少,並且可以證明 top-down mergesort 的 splitting strategy 使得它在 worst case 和 average case 上都表現得比其他 mergesort 變形更好。只有當 為二的指數時, 兩種演算法在 worst case 上的表現才會相同。
建構一個 queue 並且當中的元素都是排序好的鍵結串列,一開始每個節點都是一個串列, queue-mergesort 的演算法如下
每次把 queue head 的前兩個元素取出並進行合併,把合併後的鍵結串列放入 queue tail ,不斷進行直到 queue 當中只有一個元素也就是剩一個鍵結串列。特別注意到在任何時間點, queue 當中鍵結串列的長度都是單調遞增的。
此論文嘗試證明 queue-mergesort 是 optimal mergesort ,而 optimal mergesort 的定義代表在排序任何數量 個元素的情況下,該 mergesort 在 worst case 下的比較次數是最少,就代表該 mergesort 是 optimal mergesort 。
任何 mergesort 的過程都可以畫成一顆樹狀結構圖, top-down mergesort 每次把 個元素拆成兩個集合大小分別是 和 , bottom-up mergesort 則是把每個元素當成單一鍵結串列來看待並兩兩合併,每個 leaf node 的權重是 1 代表只有一個元素,每個 internal node 的權重是 同時也代表該節點代表的鍵結串列的元素數量,我們知道進行 的合併 worst case 需要 次比較,因此對於 internal node 來說 worst case 需要 次比較,把整顆二元樹的內部節點權重加總即是該 mergesort 在 worst case 的比較次數總數
同時定義整棵樹的權重 ,因此可以定義 optimal mergesort 代表 。
如何證明 queue mergesort 是 optimal mergesort 呢?我們需要了解兩種特性
不難看出 queue mergesort 就是所有 leaf node 權重皆為一的 Huffman encoding ,因此 queue mergesort 可以建構出一顆有最小 external path length 的 binary tree ,也證明了 queue mergesort 是 optimal mergesort 。
不同版本 Merge Sort 的比較次數可以利用以下遞迴式來表達
其中 代表合併的成本,並且 隨著不同的實作有不同的可能
特別注意在 balanced power-of-2 rule 當中只有選擇 是平衡的,它是一個介於 和 之間的二的冪次方數。雖然 Queue Mergesort 剛好符合 Heap recurrence 也就是 的解,並且實作上不需要事先知道要排序的 input size ,非常適合用在鍵結串列上,但我們付出的代價是它並非 stable sort 。
以下分析中會使用的符號如下
Lemma 1. The cost of QM is described by the heap recurrence
證明方法和 Huffman code 過程一樣,設定在第 i 次迴圈時 queue 當中元素大小為 ,一開始 ,最後 。
每個迴圈過程 會轉變為 ,並且 , ,並保有以下 loop invariance
Lemma 2. The solution of of the heap recurrence with is
證明:
原本的 heap recurrence 可以寫為
透過歸納法可得
最後把 帶入即可得證。
Lemma 3. Assume that satisfies the heap recurrence. Then iff and
Lemma 4. If satisfies the heap recurrence and , then
以上兩個定理可以歸納出 power-of-2 rule 的一個優點,假設 且 ,則 ,但如果把這組合併的 cost 套用在 half-half rule 上,則
如此一來我們可以推論,若合併的時間複雜度是 ,此時若我們可以把輸入大小 擴展到二的冪,則整體時間複雜度可以維持限性。
假設有兩個排序好的序列,元素數量分別是 ,則合併它們的代價如下
Worst case
假設 Queue mergesort 在 worst case 的總比較次數會是 且 ,
。我們可以推得
而 是一個連續的週期性函數,週期為 1
平均值是 ,並且透過推導可得 ,可以推斷若 dividing rule 滿足 ,則它是 worst case optimal 。所以 Top-down Mergesort 和 Queue Mergesort 是 optimal mergesorts 的邊界。
此處看不懂為何這樣的 diving rule 就是 worst case optimal
Best case
假設 Best case 的成本是 ,合併成本 為以下
則是可推得
可得 ,其中 代表 的二進位表示法的 sum-of-digits ,推得以下。
Average case
假設 n 個元素的 種排列方式出現的機率完全相同,用 代表隨機排列下 Queue Mergesort 所需的比較次數
Theorem 1. The average number of comparisons used by QM to sort a random permutation of n elements
滿足
其中 , 在 之間震盪
假設 是 的 probability generating function ,則 滿足
假設 是 two-way linear merge algorithm for mergin two sorted files of sizes ,且 是它的 probability generating function ,則
Theorem 3. The distribution function of the random variable is asymptotically normal
其中 ,所以 並非特別的數字。
Invariance principle
假設 滿足上述遞迴式,且 ,則 iff 且
對於將 floor function 替換成 ceil function ,同樣的結論也適用,而此時 。
Lemma 8. if then the solution to the recurrence satisfies
Average case
我們要找到滿足下列遞迴式並使其最小化的 index
目標是找到 j 使得 最小化,結果會是 是最佳解,也就是發生在 top-down mergesort 時。
Variance
我們可以透過證明 ,代表 queue mergesort 的 variance 是 asymptotically minimal 。