程式設計常用5大演算法(2)

2021-05-25 23:54:22 字數 1563 閱讀 1252

回溯法

回溯法是一種選優搜尋法,按選優條件向前搜尋,以達到目標。但當探索到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為「回溯點」。

1、回溯法的一般描述

可用回溯法求解的問題p,通常要能表達為:對於已知的由n元組(x1,x2,…,xn)組成的乙個狀態空間e=,給定關於n元組中的乙個分量的乙個約束集d,要求e中滿足d的全部約束條件的所有n元組。其中si是分量xi的定義域,且 |si| 有限,i=1,2,…,n。我們稱e中滿足d的全部約束條件的任一n元組為問題p的乙個解。

解問題p的最樸素的方法就是列舉法,即對e中的所有n元組逐一地檢測其是否滿足d的全部約束,若滿足,則為問題p的乙個解。但顯然,其計算量是相當大的。

我們發現,對於許多問題,所給定的約束集d具有完備性,即i元組(x1,x2,…,xi)滿足d中僅涉及到x1,x2,…,xi的所有約束意味著j(jj。因此,對於約束集d具有完備性的問題p,一旦檢測斷定某個j元組(x1,x2,…,xj)違反d中僅涉及x1,x2,…,xj的乙個約束,就可以肯定,以(x1,x2,…,xj)為字首的任何n元組(x1,x2,…,xj,xj+1,…,xn)都不會是問題p的解,因而就不必去搜尋它們、檢測它們。回溯法正是針對這類問題,利用這類問題的上述性質而提出來的比列舉法效率更高的演算法。

回溯法首先將問題p的n元組的狀態空間e表示成一棵高為n的帶權有序樹t,把在e中求問題p的所有解轉化為在t中搜尋問題p的所有解。樹t類似於檢索樹,它可以這樣構造:設si中的元素可排成xi(1) ,xi(2) ,…,xi(mi-1) ,|si| =mi,i=1,2,…,n。從根開始,讓t的第i層的每乙個結點都有mi個兒子。這mi個兒子到它們的雙親的邊,按從左到右的次序,分別帶權xi+1(1) ,xi+1(2) ,…,xi+1(mi) ,i=0,1,2,…,n-1。照這種構造方式,e中的乙個n元組(x1,x2,…,xn)對應於t中的乙個葉子結點,t的根到這個葉子結點的路徑上依次的n條邊的權分別為x1,x2,…,xn,反之亦然。另外,對於任意的0≤i≤n-1,e中n元組(x1,x2,…,xn)的乙個字首i元組(x1,x2,…,xi)對應於t中的乙個非葉子結點,t的根到這個非葉子結點的路徑上依次的i條邊的權分別為x1,x2,…,xi,反之亦然。特別,e中的任意乙個n元組的空前綴(),對應於t的根。

因而,在e中尋找問題p的乙個解等價於在t中搜尋乙個葉子結點,要求從t的根到該葉子結點的路徑上依次的n條邊相應帶的n個權x1,x2,…,xn滿足約束集d的全部約束。在t中搜尋所要求的葉子結點,很自然的一種方式是從根出發,按深度優先的策略逐步深入,即依次搜尋滿足約束條件的字首1元組(x1i)、字首2元組(x1,x2)、…,字首i元組(x1,x2,…,xi),…,直到i=n為止。

在回溯法中,上述引入的樹被稱為問題p的狀態空間樹;樹t上任意乙個結點被稱為問題p的狀態結點;樹t上的任意乙個葉子結點被稱為問題p的乙個解狀態結點;樹t上滿足約束集d的全部約束的任意乙個葉子結點被稱為問題p的乙個回答狀態結點,它對應於問題p的乙個解

用回溯法解題的一般步驟:

(1)針對所給問題,定義問題的解空間;

(2)確定易於搜尋的解空間結構;

(3)以深度優先方式搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋。

分支限界法

5大常用演算法 貪心法

一 基本概念 所謂貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法沒有固定的演算法框架,演算法設計的關鍵是貪心策略的選擇。必須注意的是,貪心演算法不是對所有問題都能得到整體最優解,選擇的貪心策略必須...

C 提高程式設計 5 STL 常用演算法(查詢演算法)

5.2 常用查詢演算法 5.1 find includeusing namespace std include include include 常用查詢容器 find void test1 查詢容器中 是否有5 這個元素 vector iterator pos find v.begin v.end ...

c c 常用演算法 5

1.樹的定義 樹 tree 是n n 0 個結點的有限集合t,若n 0時稱為空樹,否則 有且只有乙個特殊的稱為樹的根 root 結點 若n 1時,其餘的結點被分為m m 0 個互不相交的子集t1,t2,t3 tm,其中每個子集本身又是一棵樹,稱其為根的子樹 subtree 這是樹的遞迴定義,即用樹來...