1. 程式人生 > >五大常用演算法:分支限界法

五大常用演算法:分支限界法

一、基本描述

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

- 分支搜尋演算法

所謂“分支”就是採用廣度優先的策略,一次搜尋E-節點的所有分支,也就是所有相鄰節點,拋棄不滿足約束條件的節點,其餘節點加入活節點表。然後從表中選擇一個節點作為下一個E-節點,繼續搜尋。

選擇下一個E-節點的方式不同,則會有幾種不同的分支搜尋方式。
1. FIFO 搜尋
2. LIFO 搜尋
3. 優先佇列式搜尋

二、分支限界法的一般過程

由於求解目標不同,導致分支限界法與回溯法在解空間樹 T 上的搜尋方式也不相同。回溯法以深度優先的方式搜尋解空間樹T,而分支限界法則以廣度優先或以最小耗費優先的方式搜尋解空間樹T。

分支限界法的搜尋策略是:在擴充套件節點處,先生成其所有的兒子節點(分支),然後再從當前的活節點表中選擇下一個擴充套件節點,為了有效地選擇下一擴充套件節點,以加速搜尋的程序,在每一活節點處,計算一個函式值(限界),並根據這些已計算出的函式值,從當前活節點表中選擇一個最有利的的節點作為擴充套件節點,使搜尋朝著解空間樹上最優解的分支推進,以便儘快地找出一個最優解。

分支限界法常以廣度優先或以最小耗費(最大效益)優先的方式搜尋問題的解空間樹。問題的解空間樹是表示問題解空間的一棵有序樹,常見的有子集樹和排列樹,在搜尋問題的解空間樹時,分支限界法與回溯法對當前擴充套件節點所使用的擴充套件方式不同。在分支限界法中,每一個活節點只有一次機會稱為擴充套件節點。活節點一旦成為擴充套件節點,就一次性產生其所有兒子節點。在這些兒子節點中,那些導致不可行解或導致非最優解的兒子節點被捨棄,其餘兒子節點被加入活節點表中。此後,從活節點表中取下一節點成為當前擴充套件節點,並重覆上述節點擴充套件過程。這個過程一直持續到找到所有求的解或活節點表為空時為止。

三、回溯法和分支限界法的一些區別

有一些問題其實無論用回溯法還是分支限界法都可以得到很好的解決,但是另外一些則不然。也許我們需要具體一些的分析——到底何時使用分支限界而何時使用回溯法呢?

回溯法和分支限界法的一些區別:

  1. 方法對解空間樹的搜尋方式
  2. 儲存節點的常用資料結構
  3. 節點儲存特性常用應用
  4. 回溯法深度優先搜尋堆疊活節點的所有可行子節點被遍歷後才被從棧中彈出,找出滿足約束條件的所有解
  5. 分支限界法廣度優先或最小消耗優先搜尋隊列 ,優先佇列每個節點只有一次成為活節點的機會找出滿足約束條件的一個解或特定意義下的最優解

相關推薦

五大常用演算法分支限界

一、基本描述 類似於回溯法,也是一種在問題的解空間樹 T 上搜索問題解的演算法,但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是則是找出滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使

常用演算法分支限界

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

五大常用演算法之五分支限界

分支限界法 一、基本描述     類似於回溯法,也是一種在問題的解空間樹T上搜索問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是找出T中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解

五大常用演算法之五分支限界(轉)

轉載自:http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741378.html 一、基本描述     類似於回溯法,也是一種在問題的解空間樹T上搜索問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標

五大常用演算法思想之五分支限界

分支限界法 一、基本描述     類似於回溯法,也是一種在問題的解空間樹T上搜索問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是找出T中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解

五大常用演算法分支定界

看了五大常用演算法之一這篇博文,感覺理解了很多,可是純粹都是理論,缺少一些示例,所以準備綜合一篇博文,以幫助自己記憶,原文: http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741378.html 一、基本描述

演算法入門——分支限界

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

Java語言描述分支限界之01揹包問題

問題描述: 已知:有一個容量為V的揹包和N件物品,第i件物品的重量是weight[i],收益是value[i]。 限制:每種物品只有一件,可以選擇放或者不放 問題:在不超過揹包容量的情況下,最多能獲得多少價值或收益。 /*   * 本程式碼實現了運用優先佇列式分支限界法解

五大常用演算法一文搞懂分治演算法

>原創公眾號:bigsai >文章收錄在 [bigsai-algorithm](https://github.com/javasmall/bigsai-algorithm) ## 前言 分治演算法(divide and conquer)是五大常用演算法(分治演算法、動態規劃演算法、貪心演算法

六中常用演算法設計窮舉、分治法、動態規劃、貪心、回溯分支限界

演算法設計之六種常用演算法設計方法 1.直接遍歷態(窮舉法)        程式執行狀態是可以遍歷的,遍歷演算法執行每一個狀態,最終會找到一個最優的可行解;適用於解決極小規模或者複雜度線性增長,而線

常用演算法分治演算法、動態規劃演算法、貪心演算法、回溯分支限界

1、概念     回溯演算法實際上一個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就“回溯”返回,嘗試別的路徑。    回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再

五大常用演算法(五)分支限界

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

五大常用演算法——分支限界

分支限界法 一、基本描述     類似於回溯法,也是一種在問題的解空間樹T上搜索問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是找出T中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條

五大常用演算法之五--分支限界

一、基本描述 類似於回溯法,也是一種在問題的解空間樹T上搜索問題解的演算法。 但在一般情況下,分支限界法與回溯法的求解目標不同。 回溯法的求解目標是找出T中滿足約束條件的所有解 分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束

分支限界單源最短路徑--dijkstra演算法

單源最短路徑–dijkstra演算法 前面已經多次介紹過dijkstra演算法是貪心演算法,是動態規劃,實際上可以從分支限界的角度來理解; 分支限界法 分支限界法,實際上就是回溯法,一般意義的回溯法是基於深度優先搜尋,也可以配合限界函式剪枝,通常分支限界法基於寬度優先搜尋,通過佇

資料結構與演算法- 五大常用演算法總結(分治法,回溯,分治限界,貪心演算法,動態規劃法)

1.分治法(Recurrence and Divide-Conquer)        對於一個規模為n的問題,若該問題可以容易解決(比如說規模n較小)則直接解決,否則將其分解為k個規模較小的子問題,這些子問題互相獨立且與原問題形式相同,遞迴地解決這些子問

五大常用演算法——分治法,動態規劃,回溯分支界限,貪心演算法

分治演算法 一、基本概念    在電腦科學中,分治法是一種很重要的演算法。字面上的解釋是“分而治之”,就是把一個複雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。這個技巧是很多高效

五大常用演算法——分支限界演算法詳解及經典例題

import static org.junit.Assert.*; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; import javax.management.Query; import o

【轉載】五大常用演算法之四回溯

本文轉自:http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741376.html 1、概念       回溯演算法實際上一個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就

五大常用演算法——分支界限

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