演算法 分支限界法

2021-09-23 22:43:57 字數 1081 閱讀 1379

在當前節點(擴充套件節點)處,先生成其所有的兒子節點(分支),然後再從當前的活節點(當前節點的子節點)表中選擇下乙個擴充套件節點。為了有效地選擇下乙個擴充套件節點,加速搜尋的程序,在每乙個活節點處,計算乙個函式值(限界),並根據函式值,從當前活節點表中選擇乙個最有利的節點作為擴充套件節點,使搜尋朝著解空間上有最優解的分支推進,以便盡快地找出乙個最優解。分支限界法解決了大量離散最優化的問題。

1.佇列式(fifo)分支限界法

佇列式分支限界法將活節點表組織成乙個佇列,並將佇列的先進先出原則選取下乙個節點為當前擴充套件節點。

2.優先佇列式分支限界法

優先佇列式分支限界法將活節點表組織成乙個優先佇列,並將優先佇列中規定的節點優先順序選取優先順序最高的下乙個節點成為當前擴充套件節點。如果選擇這種選擇方式,往往將資料排成最大堆或者最小堆來實現。

有一批共n個貨櫃要裝上2艘載重量分別為c1,c2的輪船,其中貨櫃i的重量為wi,且要求確定是否有乙個合理的裝載方案可將這n個貨櫃裝上這2艘輪船。

可證明,採用如下策略可以得到乙個最優裝載方案:先盡可能的將第一艘船裝滿,其次將剩餘的貨櫃裝到第二艘船上。

**如下:

//分支限界法解裝載問題

//子函式,將當前活節點加入佇列

templatevoid enqueue(queue&q, type wt, type &bestw, int i, int n)

else q.add(wt) ; //非葉結點

}//裝載問題先盡量將第一艘船裝滿

//佇列式分支限界法,返回最優載重量

templatetype maxloading(type w,type c,int n)}}

演算法maxloading的計算時間和空間複雜度為o(2^n).

上述演算法可以改進,設r為剩餘貨櫃的重量,當ew+r<=bestw的時候,可以將右子樹剪去。因為最優值不可能出現在下面了。

改進**如下:

分支限界法解決了大量離散最優化問題。

參考資料計算機演算法設計與分析/王曉東編著。-3版。-北京:電子工業出版社,2007.5

演算法入門 分支限界法

用淺顯的話說就是一開始就大致性地找好方向 拿本人來說,專業選擇的軟體工程 然後從軟體工程細分到移動開發 然後又分到遊戲開發 然後又分到前端遊戲開發。或者也可以這樣,當你需要在乙個學生管理系統的資料夾手動查詢id為1208的學生資訊,這時候,你就要提前為每個資料夾寫好相關的策略 比如我要查詢學生的相關...

分支限界法

分支限界法 類似於回溯法,也是一種在問題的解空間樹t上搜尋問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法 的求解目標是找出t中滿足約束條件的 所有解,而分支限界法的求解目標則是找出滿足約束條件的乙個解,或是在滿足約束條件的解中找出使某一目標函式值達到極大或極小的解,即在某種...

分支限界法

分支限界法 類似於回溯法,也是一種在問題的解空間樹t上搜尋問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法 的求解目標是找出t中滿足約束條件的 所有解,而分支限界法的求解目標則是找出滿足約束條件的乙個解,或是在滿足約束條件的解中找出使某一目標函式值達到極大或極小的解,即在某種...