分支限界法與回溯法的區別
阿新 • • 發佈:2019-02-13
分支限界法類似於回溯法,也是一種在問題的解空間樹T上搜索問題解的演算法。但在一般情況下,分支限界法與回溯法的求解目標不同。回溯法的求解目標是找出T中滿足約束條件的所有解,而分支限界法的求解目標則是找出滿足約束條件的一個解,或是在滿足約束條件的解中找出使某一目標函式值達到極大或極小的解,即在某種意義下的最優解。
方法 | 對解空間樹的搜尋方式 | 儲存結點的常用資料結構 | 結點儲存特性 | 常用應用 |
回溯法 | 深度優先搜尋 | 堆疊 | 活結點的所有可行子結點被遍歷後才被從棧中彈出 | 找出滿足約束條件的所有解 |
分支限界法 | 廣度優先或最小消耗優先搜尋 | 佇列、優先佇列 | 每個結點只有一次成為活結點的機會 | 找出滿足約束條件的一個解或特定意義下的最優解 |
struct Position//描述一個位置的結構 { int posx,posy; }; struct SnakeNode//描述分支限界法佇列中一個結點的結構 { Position square;//方格位置資訊list<Position> snakeBody(snakeLength);//描述蛇身的佇列,每一個格的蛇仍用Position描述 }; |