解空間的演算法
『壹』 解空間的維數和向量空間的維數演算法一樣嗎
維數計算方法都是一樣的,不過兩個題目表達的不是同一個意思。
向量組span的空間維數是向量組中最大線性無關的向量個數,你可以認為是向量組對應矩陣的秩;而線性方程組解空間的維數指的是對應基礎解系中所含的最大線性無關的向量個數,換句話說,這時候要判斷的是span出解空間的向量組中的最大線性無關的向量個數,而不是拿系數矩陣列向量span出的空間維數判斷,一個是零空間/核空間,一個是列空間/值域,表達的根本不是一個意思。
線性代數中,向量空間的維數和解空間維數沒有區別。解空間也是向量空間,是針對線性方程組而言的解空間,維數就是基礎解系中線性無關的向量數。
而向量的維數指的向量分量的個數。用大白話來講就是描述一個向量需要用到好幾個元素,有幾個元素這個向量就有幾維。比如最直觀的三維向量,分別用x、y、z描述,所以這個向量就是三維的。
『貳』 分支限界法
分支限界法是一種在解空間樹中搜索最優解的演算法。基本思想是結合廣度優先遍歷(BFS)或最佳優先搜索方式,並利用部分最優解的信息進行剪枝,以提升搜索效率。在每個活結點處,計算一個函數值(優先值),然後根據這些函數值選擇最有利的節點進行擴展,從而加速搜索過程,找出最優解。與回溯法相比,分支限界法專注於盡快找到一個滿足約束條件的解,而回溯法則嘗試找出滿足所有約束條件的所有解。分支限界法採用寬度優先或最佳優先搜索方式,而回溯法則採用深度優先搜索。在擴展結點時,分支限界法會一次性產生所有兒子結點,與回溯法不同。由於分支限界法要求較大的存儲空間,當內存有限時,回溯法可能有更高的成功可能性。
分支限界法的求解步驟包括:定義解空間、確定解空間的樹結構、按照BFS等方法搜索、刪除不可能導出最優解的結點、將剩餘結點加入活動表(隊列)中、選擇結點進行擴展,直到活動表為空。活結點的擴展方式有兩種:先進先出隊列(FIFO)和優先隊列。在優先隊列中,可以根據耗費或收益的大小來選擇擴展結點,以加速搜索過程。
分支限界法在實際應用中有多種示例,如判斷重量是否超過背包容量來確定是否為死節點。此外,分支限界法也常用於解決8謎問題、裝載問題等。在裝載問題中,解空間樹描述了各種裝載方案,通過分支限界法搜索,最終找到最優裝載方案。
『叄』 五大基本演算法——回溯法
回溯法是一種選優搜索法(試探法)。
基本思想:將問題P的狀態空間E表示成一棵高為n的帶全有序樹T,把求解問題簡化為搜索樹T。搜索過程採用 深度優先搜索 。搜索到某一結點時判斷該結點是否包含原問題的解,如果包含則繼續往下搜索,如果不包含則向祖先回溯。
通俗來說,就是利用一個樹結構來表示解空間,然後從樹的根開始深度優先遍歷該樹,到不滿足要求的葉子結點時向上回溯繼續遍歷。
幾個結點:
擴展結點:一個正在產生子結點的結點稱為擴展結點
活結點:一個自身已生成但未全部生成子結點的結點
死結點:一個所有子結點已全部生成的結點
1、分析問題,定義問題解空間。
2、根據解空間,確定解空間結構,得 搜索樹 。
3、從根節點開始深度優先搜索解空間(利用 剪枝 避免無效搜索)。
4、遞歸搜索,直到找到所要求的的解。
1、子集樹
當問題是:從n個元素的集合S中找出滿足某種性質的子集時,用子集樹。
子集樹必然是一個二叉樹。常見問題:0/1背包問題、裝載問題。
遍歷子集樹時間復雜度:O(2^n)
2、排列樹
當問題是:確定n個元素滿足某種排列時,用排列數。常見問題:TSP旅行商問題,N皇後問題。
遍歷排列樹時間復雜度:O(n!)
通俗地講,結合Java集合的概念,選擇哪種樹其實就是看最後所得結果是放入一個List(有序)里,還是放入一個Set(無序)里。
剪枝函數能極大提高搜索效率,遍歷解空間樹時,對於不滿足條件的分支進行剪枝,因為這些分支一定不會在最後所求解中。
常見剪枝函數:
約束函數(對解加入約束條件)、限界函數(對解進行上界或下界的限定)
滿足約束函數的解才是可行解。
1、0/1背包問題
2、TSP旅行商問題
3、最優裝載問題
4、N-皇後問題
具體問題可網路詳細內容。