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

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

轉載自:http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741378.html

一、基本描述

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

   (1)分支搜尋演算法

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

     選擇下一個E-結點的方式不同,則會有幾種不同的分支搜尋方式。

   1)FIFO搜尋

   2)LIFO搜尋

   3)優先佇列式搜尋

(2)分支限界搜尋演算法 

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

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

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

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

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

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

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

   方法對解空間樹的搜尋方式       儲存結點的常用資料結構      結點儲存特性常用應用

  回溯法深度優先搜尋堆疊活結點的所有可行子結點被遍歷後才被從棧中彈出找出滿足約束條件的所有解

  分支限界法廣度優先或最小消耗優先搜尋隊列、優先佇列每個結點只有一次成為活結點的機會找出滿足約束條件的一個解或特定意義下的最優解

相關推薦

五大常用演算法分支限界

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

五大常用演算法分支限界

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

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

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

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

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

五大常用演算法 動態規劃演算法1

非常有必要看一看:一、基本概念    動態規劃過程是:每次決策依賴於當前狀態,又隨即引起狀態的轉移。一個決策序列就是在變化的狀態中產生出來的,所以,這種多階段最優化決策解決問題的過程就稱為動態規劃。二、

五大常用演算法回溯演算法

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

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

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

Godot3遊戲引擎入門上下左右移動動畫

一、前言 本篇是上一節文章:Godot3遊戲引擎入門之五:上下左右移動動畫(上)的繼續。上一篇使用動畫和程式碼實現了玩家的上下左右移動功能,接下來我們解決一個問題:給遊戲新增碰撞體,讓玩家在有限的地圖中移動。 注意:我目前使用的是 Godot 3.1 預覽版,與

敏捷開發績效管理敏捷開發生產率故事點估算

這是敏捷開發績效管理的第五篇。(之一,之二,之三,之四,之五,之六,之七)度量敏捷開發的生產率一直是個難題,確切說度量任何開發方法的生產率都是一個難題,但它實際上有答案,這個答案是本文的主要內容。度量敏捷生產率的目的真正難以回答的是度量生產率的目的是什麼?很多人都認為是考核績

51微控制器入門數碼管顯示動態

本文旨在介紹微控制器入門的基礎知識,為初接觸或即將接觸單片的新手提供一個入門指導。本文章會陸續推出,隔幾天一個章節。所使用微控制器為ATMEL公司的AT89C52,軟體為PROTEUS和KEIL;只提供原理圖和KEIL環境下的註釋,希望對廣大即將接觸微控制器的人有所幫助,

Oracle數據庫中心雙活ASM vs VPLEX

復用 讀寫 並且 壓力測試 發出 我們 config 影響 計算節點 雙活方案對比:ASM vs V-PLEX 作者:王文傑 Oracle公司 Principle system analyst Oracle高級服務部 Oracle數據庫中心的災備的演變,經歷了多年的

五大常用演算法分支限界

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

五大常用演算法分支定界

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

[回溯演算法] 五大常用演算法回溯

演算法入門6:回溯法一. 回溯法 – 深度優先搜素                       1. 簡單概述       回溯法思路的簡單描述是:把問題的解空間轉化成了圖或者樹的結構表示,然後使用深度優先搜尋策略進行遍歷,遍歷的過程中記錄和尋找所有可行解或者最優解。基本思想

演算法課堂實驗報告——python回溯分支限界旅行商TSP問題

python實現回溯法與分支限界 一、開發環境 開發工具:jupyter notebook 並使用vscode,cmd命令列工具協助程式設計測試演算法,並使用codeblocks輔助編寫C++程式 程式語言:python3.6 二、實驗目標 1. 請用回溯法求對稱的旅

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

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

五大常用演算法分治法

五大常用演算法之 分治法 分治法的設計思想是,將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。 分治策略是:對於一個規模為n的問題,若該問題可以容易地解決(比如說規模n較小)則直接解決,否則將其分解為k個規模較小的子問題,這些子問題互相獨立

信息摘要算HMAC算分析與實現

UC str 就是 n) auth 如果 輸出 返回 digest MAC(Message Authentication Code,消息認證碼算法)是含有密鑰散列函數算法,兼容了MD和SHA算法的特性,並在此基礎上加上了密鑰。因此MAC算法也經常被稱作HMAC算法。 1、H

回溯深度優先剪枝和分支限界寬度優先剪枝對比01揹包問題

限界函式: CurValue + rest <= BestValue 回溯法(深度優先)剪枝 # 遞迴方式 class pack_01_back_prune_test: def __init__(self,N,V,C,W): self

演算法工程師修仙推薦系統實踐

第一章 好的推薦系統 什麼是推薦系統 隨著資訊科技和網際網路的發展,人們逐漸從資訊匱乏的時代走入了資訊過載(information overload)的時代。在這個時代,無論是資訊消費者還是資訊生產者都遇到了很大的挑戰:作為資訊消費者,如何從大量資訊中找到自己感興趣的