淺談啟發式合並


淺談啟發式合並

本篇隨筆簡單淺談一下啟發式合並。


啟發式合並的概念

顧名思義,啟發式合並解決的是合並類的問題。

現在給一個最基本的合並問題。

我們要把\(N\)個集合,總共\(M\)個元素合並成一個大集合。

很容易得出,最壞的情況下需要合並\(N\)次,每次合並\(M\)個元素,也就是\(O(MN)\)的時間復雜度。

(一個集合有所有元素,然后傻呵的一直把這個最大的往空集里合並,合並了\(N\)次)

然后我們想,這種合並策略山P就山P在把最大的往小的里合並。

同樣的問題,如果我們把小的往大的里合,是不是就快很多?

看看這個思路,是不是很像拍腦門臨時得出來的?

是不是很受啟發?

好了,它就叫啟發式合並。

其思路是:每次把較小集合往較大集合里合並。

其原理是,因為是較小集合往較大集合里合,於是較小集合的元素個數被擴充了至少一倍,也就是變成了原來的二倍多,這樣的話,我們就能保證,最壞的合並次數是\(O(\log N)\)


啟發式合並的應用

在剛剛講過的概念中,我們可以得知啟發式合並是對數據結構的一種合並,比如多棵樹、集合、線性數據結構等等。

當然我們最常見的還是並查集的啟發式合並優化。

在此不過多贅述,具體的應用請讀者通過具體題目自行體會。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM