上一章:貪心算法和回溯法 http://www.cnblogs.com/suxi-blog/articles/6239595.html
1.回溯法是深度優先策略遍歷問題的解空間樹,在遍歷過程中,應用約束條件、目標函數等剪枝函數實行剪枝。分支限界法按照廣度優先策略便利問題的解空間樹,對於已經處理過的每個節點根據限界函數估算目標函數的可能取值,從中選取使目標函數取得極值的節點先進行廣度優先搜索,從而不斷的調整搜索的方向,盡快的找到問題的解。分支限界法適用於求解最優問題。
2.分支限界法首先的確定一個合理的限界函數,並根據限界函數確定函數的界【down,up】(對於求解最小的問題,根據限界函數確定目標函數的下界down,目標函數的上界可以使用某種啟發方式得到,如貪心算法。而對於球最大問題這兩個就對調一下就行了),然后就按照廣度優先策略遍歷問題的解空間樹,在分支節點上,依次搜索該節點的所有孩子節點,分別估算這些孩子節點的目標函數的可能取值(對於最小問題,估算節點的下界;對於最大問題就估算節點的上界),如果某孩子節點的目標函數可能取得值超出目標函數的界,則廢棄;否則將其加入待處理節點表中(下面就簡稱為PT表),然后從表中選取使目標函數取得極值的節點成為當前擴展點。重復上述過程,直到找到最優解。
3.與回溯法相比,分支限界法可以根據限界函數不斷調整搜索的方向,選擇最優可能取得最優解的子樹優先進行搜索,從而盡快的找到問題的解。
分支限界法的一般過程:
(1)根據限界函數確定目標函數的界【down,up】
(2)將待處理節點表PT初始化為空
(3)對根節點的每個孩子節點x執行下列操作
a.估算節點x的目標函數的value
b.若(value>down),則將節點x加入表PT中
(4)循環直到某個葉子節點的目標函數值在表PT中最大
a.i=表PT中最大節點
b.對節點i的每個孩子節點x執行下列操作
估算節點x的目標函數值value;
若(value>down),則將節點x加入表PT中
若(節點x是葉子節點且節點x的value值在表PT中最大),則節點x為對應的解輸出,算法結束
若(節點x是葉子節點但節點x的value在表PT中不是最大),則令down=value,並且將表PT所有小於value的節點刪除。
(對於求最小也相同的步驟)
4.應用分支限界法的關鍵的問題是:
(1)如何確定合適的限界函數
(2)如何組織待處理節點表:表PT可以采用堆的形式,也可以采用優先隊列的形式存儲。
(3)如何確定最優解中的各個分量
a.對每個擴展節點保存根結點到該節點
b.在搜索過程中構建搜索經過的樹結構,在求最優解時,從葉子節點不斷回溯到根節點,以確定最優解中的各個分量。
-------------------------------------------------------------------------------------------------------------------------
暫時算法我就做到這里,后面會繼續進一步更新,畢竟還在學習中。
