(2)算法學習-分治法

(2)算法學習-分治法

分治法:就是將一個大問題分割成許多小問題,持續分割知道小問題容易求解。分治法分爲三個步驟:1.divide,把原問題分割成小問題,2.Conquer,解決小問題,3.Combine,運用小問題的解答整理出原問題的解答。


合併排序法:


1.divide,將數列平分爲兩組,迭代平分,直到分成只有一個數字或兩個數字停止分割。

2.Conquer,解決小問題,當分成只有一個數字或兩個數字時,進行比較排序。

3.Combine,合併這也是最重要的一部分,將兩部分排好序的數列進行合併,合併過程如下。

     


快速排序法:任選去一個數字當樞紐元,將比樞紐元小的數字放左邊,比樞紐元大德放右邊,然後對兩邊繼續進行快速排序。



漢諾塔:

大盤子在下面,小盤子在上面,需要將第一根柱子上的盤子移動到第三根柱子上,可以分爲三個步驟:


1.將上面的n1個盤子移動到第二根柱子上。

2.將最大的盤子移到第三根柱子上。

3.將上面n-1個盤子移動到第三根柱子上。

如此變成了如何將n-1個盤子移動到第二根柱子上的問題+n-1個盤子從第二根柱子移動到第三根柱子上的問題。這與漢諾塔原問題是類似的,所以可以使用分治法,不斷迭代得到移動方案。


快速選擇算法:運用快速排序算法的思路如下:




   分解並在解決之前合併法 divide and marriage before conquest

   一種分治法的變形,其特點是將分解出的子問題在解決之前合併。

   管道傳輸分治法 pipelined divide and conquer

一種分治法的變形,它利用某種稱爲管道的數據結構在遞歸調用結束前將其中的某些結果返回。此方法經常用來減少算法的深度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章