Branch and Bound Algorithm
分支限界演算法
分支限界演算法是另一種系統搜尋解空間的方法。
分支限界演算法也常把解空間組織成樹的結構(常撿的,子集樹和排列樹),一般採用廣度優先(BFS)或最小耗費來搜尋樹
主要思想
對一個擴充套件結點,一次生成其所有的子節點,將不可能產生可行解(或最優解)的結點捨去,其餘的記入活結點表;按照一定規則,從活結點表中取出下一個結點作為新的擴充套件結點,重複展開,直到得到可行解(或最優解)或活結點表為空
限界函式
限界函式可以在求解最優解問題時,用來加速搜尋
函式給出每個可行結點對應子樹能獲得的最大價值的上界,如果該上界沒有比當前的最優值更大,則說明該子樹不會產生問題的最優解,可以剪去
兩種常見的分支限界
先進先出(FIFO)
從活結點表中取出結點的順序與加入的順序相同,活結點表採用佇列實現
最小耗費或最大收益
每個活結點有一個對應的最小耗費(或最大收益),每次取出時選擇最優的結點進行展開
分支限界和回溯
①分支限界法的結果是求出滿足的一組可行解(或可行解中的一個最優解);回溯法的結果是求出所有滿足的可行解
②搜尋樹的方法不同,分支限界通常用廣度優先(BFS)或最小耗費;回溯通常用深度優先(DFS)
③擴充套件結點的展開方式不同,分支限界的結點只有一次成為活結點的機會
④分支限界演算法對空間的需求比回溯演算法大得多(活結點表),因此當記憶體容量有限時,使用回溯演算法常常更容易成功
相關文章
- Android Studio Git No tracked branch configured for branch branch_name or the branch doesn't existAndroidGit
- C++ lower_bound upper_boundC++
- Straightforward Lower BoundAIForward
- Branch Predictor Simulator
- Git新建branch分支Git
- Git branch分支實質Git
- Z-algorithmGo
- Adaboost Algorithm StepGo
- Expectation Maximization AlgorithmGo
- Algorithm assignment 1Go
- CA Data Classification algorithmGo
- Local dimming algorithm in matlabGoMatlab
- function和bound method的區別Function
- Git三大特色之Branch(分支)Git
- git show-branch命令詳解Git
- Renaming the default branch from master to main on GithubASTAIGithub
- [Algorithm] 2. Trailing ZerosGoAIROS
- WWDC 2018: Embracing Algorithm (1)Go
- 【Algorithm】樹結構整理Go
- Recursive Algorithm for Sliding Signal ProcessingGo
- Implement Leader Election Algorithm With GoGo
- Git之提示There is no tracking information for the current branch.GitORM
- our branch is based on ‘origin/lhl‘, but the upstream is gone.Go
- 演算法之路 - Way to Algorithm演算法Go
- [Algorithm] 1. A+B ProblemGo
- 【Algorithm】快排分割槽方法Go
- 【Algorithm】全排列演算法Go演算法
- LZ4 compression algorithm on FPGAGoFPGA
- An Algorithm Summary of Programming Collective Intelligence (4)GoIntel
- 22. Generate Parentheses (recursion algorithm)Go
- KMP(The Knuth-Morris-Pratt Algorithm)KMPGo
- Analyzing and Reproducing the EOS Out-of-Bound Write Vulnerability in nodeos
- A Univariate Bound of Area Under ROC 論文小結
- SVN cornerstone專案branch, tags, trunk記錄
- Git tag標籤與branch分支 區別Git
- git操作之四:git branch(本地倉庫)Git
- The prefix “mvc“ for element “mvc:default-servlet-handler“ is not bound.MVCServlet
- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)ApacheBATException