算法學(xué)習(xí)之分治法

分治法,顧名思義就是分而治之,即把問題拆解為性質(zhì)相同的小問題再處理。

做了一些題后發(fā)現(xiàn),分治法除了分治,名字里還少了一步,那就是合,也就是怎樣通過小問題的答案得到拆分之前大問題的答案。

分治法的時間復(fù)雜度:分治法并沒有像二分法一樣每次丟掉一半無用的解,它只是做了分離,而分離的兩部分都是需要處理的,所以分治法的時間復(fù)雜度是O(n)。特例情況是當(dāng)分離的兩部分繼續(xù)分治處理出現(xiàn)重復(fù)計算的情況時,就會比O(n)大了!所以請確保你的分治盡量不要出現(xiàn)重疊計算的情況。

那么什么問題適合用分治的思想解決呢?二叉樹!二叉樹這種左右子樹的結(jié)構(gòu)天生就非常適合分治,所以它的大部分問題都能用分治解決,碰到一個問題你只需要問問左子樹你怎么處理,右子樹你怎么辦,得到左右子樹的答案后,你再想想最后的答案是個啥~除了二叉樹,快速排序歸并排序這兩個著名的排序算法也是分治的思想。下面就舉幾個解題的例子來加深一下對分治法的學(xué)習(xí)。

1、前序遍歷二叉樹


Paste_Image.png

2、求二叉樹的最大路徑和
給一棵二叉樹,找出從根節(jié)點出發(fā)的路徑中,和最大的一條。
這條路徑可以在任何二叉樹中的節(jié)點結(jié)束,但是必須包含至少一個點。


Paste_Image.png

3、求最近公共祖先
給定一棵二叉樹,找到兩個節(jié)點的最近公共父節(jié)點(LCA),給出的兩個節(jié)點都在樹中存在。


Paste_Image.png

4、快速排序
這里我就偷個懶,直接貼出百度百科上給的php標(biāo)準(zhǔn)答案~


Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容