五大經常使用算法之五:分支限界法 五大經常使用算法之五:分支限界法

1、基本描述

    相似於回溯法,也是一種在問題的解空間樹T上搜索問題解的算法。但在通常狀況下,分支限界法與回溯法的求解目標不一樣。回溯法的求解目標是找出T中知足約束條件的全部解,而分支限界法的求解目標則是找出知足約束條件的一個解,或是在知足約束條件的解中找出使某一目標函數值達到極大或極小的解,即在某種意義下的最優解html

(1)分支搜索算法

    所謂「分支」就是採用廣度優先的策略,依次搜索E-結點的全部分支,也就是全部相鄰結點,拋棄不知足約束條件的結點,其他結點加入活結點表。而後從表中選擇一個結點做爲下一個E-結點,繼續搜索。算法

     選擇下一個E-結點的方式不一樣,則會有幾種不一樣的分支搜索方式。數據結構

   1)FIFO搜索函數

   2)LIFO搜索post

   3)優先隊列式搜索url

2)分支限界搜索算法 

2、分支限界法的通常過程

    因爲求解目標不一樣,致使分支限界法與回溯法在解空間樹T上的搜索方式也不相同。回溯法以深度優先的方式搜索解空間樹T,而分支限界法則以廣度優先或以最小耗費優先的方式搜索解空間樹Tspa

    分支限界法的搜索策略是: 在擴展結點處,先生成其全部的兒子結點(分支),而後再從當前的活結點表中選擇下一個擴展對點。爲了有效地選擇下一擴展結點,以加速搜索的進程,在每一活 結點處,計算一個函數值(限界),並根據這些已計算出的函數值,從當前活結點表中選擇一個最有利的結點做爲擴展結點,使搜索朝着解空間樹上有最優解的分支 推動,以便儘快地找出一個最優解。htm

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

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

    有一些問題其實不管用回溯法仍是分支限界法均可以獲得很好的解決,可是另一些則否則。也許咱們須要具體一些的分析——到底什麼時候使用分支限界而什麼時候使用回溯呢?隊列

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

   方法對解空間樹的搜索方式       存儲結點的經常使用數據結構      結點存儲特性經常使用應用

  回溯法深度優先搜索堆棧活結點的全部可行子結點被遍歷後才被從棧中彈出找出知足約束條件的全部解

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

(以上內容轉自五大經常使用算法之五:分支限界法

相關文章
相關標籤/搜索