回溯法是一種選優搜尋法,按照選優條件進行深度優先搜尋(簡單來講就是遍歷)。當搜尋進行到某一步時,發現原先選擇並不是最優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術稱為回溯法,而滿足回溯條件的某個狀態點稱為「回溯點」。
回溯法是從初始狀態出發,按照深度優先搜尋得到方式,根據產生子節點的條件約束,搜尋問題的解。當發現當前結點不滿足求解條件時,就回溯,嘗試其他路徑。回溯法是一種「能進則進,進不了則換,換不了則退」的搜尋方法。
(1)解空間:假設圖中每乙個點都有可能是我們要的解,這些解就組成了解空間,我們現在要根據問題的約束條件,在解空間中尋找最優解。
(2)解空間的組織結構:
乙個解空間通常由很多可能解組成,我們不可能毫無章法,盲目搜尋效率很低。我們可以以一定的組織形式表示出來,然後去尋找最優解:這種組織結構就是解空間樹:
解空間樹只是解空間的形象表示,有利於解題時對搜尋過程形象的理解,而不是真正生成一棵樹
(3)搜尋解空間:
隱約束指對能否得到問題的可行解或最優解做出的約束。
如果不滿足隱約束,就說明得不到問題的可行解或者是最優解。那就沒有必要再沿著該結點的分治繼續進行搜尋了,相當於把這個分支都剪掉了。因此隱函式也成為剪枝函式,實質上不是剪掉該分支,而是不再搜尋該分支。
例如:3個物品的0-1揹包問題,如果前2個物品放入後背包超重了,那麼就沒有必要再考慮第三個物品是否要放入揹包了。相當於是剪枝了:
隱函式:也稱剪枝函式,包括約束函式和限界函式。對於能否得到問題的可行解的約束稱為約束函式,對於能否獲得最優解的約束稱為限界函式。有了剪枝函式,我們就可以「剪掉」得不到的可行解或者是最優解的分支,避免無效搜尋,提高搜尋效率。剪枝函式設計的好,搜尋效率就高。
解空間的大小和剪枝函式的好壞都直接影響搜尋效率。
在搜尋解空間時,下面幾個術語需要說明:
C 基礎知識整理 基礎知識(7) 方法的隱藏
繼承和抽象類中提到過,子類與父類的方法間有這些關係 子類直接使用父類方法 但是必須父類方法是public或protected型別 子類的方法覆蓋父類方法 override 子類的方法過載父類方法 overload 看下面這種情況 public class yschool public string ...
C 基礎知識整理 基礎知識(2) 類
類,是物件導向語言的基礎。類的三大特性 封裝 繼承 多型。最基本的特性就是封裝性。程式設計師用程式描述世界,將世界的所有事物都看成物件,怎麼描述這個物件?那就是類了。也就是用類來封裝物件。用書上的話說,類是具有相同屬性和行為的物件的抽象。寶馬汽車 別克汽車 五菱之光汽車.基本具有相同的屬性和行為,所...
C 基礎知識整理 基礎知識(2) 類
類,是物件導向語言的基礎。類的三大特性 封裝 繼承 多型。最基本的特性就是封裝性。程式設計師用程式描述世界,將世界的所有事物都看成物件,怎麼描述這個物件?那就是類了。也就是用類來封裝物件。用書上的話說,類是具有相同屬性和行為的物件的抽象。寶馬汽車 別克汽車 五菱之光汽車.基本具有相同的屬性和行為,所...