最佳歸並樹
歸並樹的神秘性質


讀寫磁盤需要2*(6+8+14+16)
每個初始歸並段看作一個葉子結點,歸並段的長度作為結點權值,則上面這顆歸並樹的帶權路徑長度WPL=2 * 1+(5+1+6+2) * 3 = 44 =讀磁盤的次數 = 寫磁盤的次數
WPL:結點值*到根節點的路徑長度
重要結論:歸並過程中的磁盤I/O次數 = 歸並樹的WPL * 2
可以想到:如果要追求歸並過程中的磁盤IO次數最小,就要使歸並樹WPL最小——哈夫曼樹
構造2路歸並的最佳歸並樹

一開始把每一個結點都看成一個個獨立的樹,接下來在這幾顆樹中挑選權值最小的兩棵樹,讓他們稱為兄弟。新的結點的權值是這兩個孩子結點的權值之和。還剩下4顆樹

。。。如此操作。。。

\[最佳歸並樹WPL_{min} = (1+2)*4+2*3+5*2+6*1=34 \]
讀磁盤次數 = 寫磁盤次數 = 34次
總的磁盤I/O次數 = 68
多路歸並的情況


顯然不是最佳的歸並樹
多路歸並的最佳歸並樹
原理和2路歸並類似,選擇權值最小的3個結點讓他們成為兄弟


\[WPL_{min} = (2+3+6)*3 + (9+12+17+24+18)*2 + 30*1 = 223 \]
歸並過程中 磁盤的I/O總次數 = 446次
如果減少一個歸並段

要做3路歸並

不正確!!!!
最后一次歸並是2路歸並
正確的做法
對於k叉歸並,若初始歸並段的數量無法構成嚴格的k叉歸並樹,則需要補充幾個長度為0的”虛段“,在進行k叉哈夫曼樹的構造。



添加虛段的數量
對於k叉歸並,若初始歸並段的數量無法構成嚴格的k叉歸並樹,則需要補充幾個長度為0的”虛段“,在進行k叉哈夫曼樹的構造。
k叉的最佳歸並樹一定是一棵嚴格的k叉樹,即樹中只包含度為k、度為0的結點。


知識回顧

