演算法導論課程設計成績
題 目:
回 溯 法
學院班級:1613013
學 號:16130130216
姓 名:庫 妍
主講教師:張立勇
日 期:2019.5.30
一、0/1 knapsack problem
1、實驗題目
運用回溯法實現實驗3中的0/1揹包問題
2、使用的演算法
回溯法3、演算法分析與設計
利用回溯法試設計乙個演算法求出0-1揹包問題的解,也就是求出乙個解向量xi (即對n個物品放或不放的一種的方案) 其中, (xi = 0 或1,xi = 0表示物體i不放入揹包,xi =1表示把物體i放入揹包)。在遞迴函式backtrack中:
當i>n時,演算法搜尋至葉子結點,得到乙個新的物品裝包方案。此時演算法適時更新當前的最優價值。
當i4、專案測試(功能與效能)
因為物品只有選與不選2個決策,而總共有n個物品,所以時間複雜度為o(2^n)。因為遞迴棧最多達到n層,而且儲存所有物品的資訊也只需要常數個一維陣列,所以最終的空間複雜度為o(n)。
5、實驗總結
0/1揹包屬於找最優解問題,用回溯法需要構造解的子集樹。對於每乙個物品i,對於該物品只有選與不選2個決策,總共有n個物品,可以順序依次考慮每個物品,這樣就形成了一棵解空間樹:基本思想就是遍歷這棵樹,以列舉所有情況,最後進行判斷,如果重量不超過揹包容量,且價值最大的話,該方案就是最後的答案。
二、8-queen problem
1、實驗題目
用回溯法實現8-queen問題。
2、使用的演算法
回溯法3、演算法分析與設計
(1)使用乙個一維陣列表示皇后的位置,其中陣列的下標表示皇后所在的行,陣列元素的值表示皇后所在的列。
(2)假設前n-1行的皇后已經按照規則排列好,那麼可以使用回溯法逐個試出第n行皇后的合法位置, 所有皇后的初始位置都是第0列, 那麼逐個嘗試就是從0試到n-1,如果達到n,仍未找到合法位置, 那麼就置當前行的皇后的位置為初始位置0,然後回退一行,且該行的皇后的位置加1,繼續嘗試, 如果目前處於第0行,還要再回退,說明此問題已再無解。
(3)如果當前行的皇后的位置還是在0到n-1的合法範圍內,那麼首先要判斷該行的皇后是否與前幾行的皇后互相衝突,如果衝突,該行的皇后的位置加1,繼續嘗試,如果不衝突,判斷下一行的皇后, 如果已經是最後一行,說明已經找到乙個解,輸出這個解,然後最後一行的皇后的位置加1,繼續嘗試下乙個解。
4、專案測試(功能與效能)
5、實驗總結
理解回溯法解題思路:
(1)針對所給問題,定義問題的解空間;
(2)確定易於搜尋的解空間結構;
(3)以深度優先方式搜尋解空間,並在搜尋過程中用剪枝函式避免無效搜尋。
演算法分析與設計實驗報告四 回溯法實驗
一 實驗目的 掌握回溯演算法思想 掌握回溯遞迴原理 了解回溯法典型問題 二 實驗內容 編寫乙個簡單的程式,解決8皇后問題。數字全排列問題 任意給出從1到n的n個連續的自然數,求出這n個自然數的各種全排列。如n 3時,共有以下6種排列方式 123,132,213,231,312,321。注意 數字不能...
演算法設計與分析 實驗報告
演算法設計與分析 實驗報告 題目一 矩陣相乘 題目二 最長公共子串行 題目一 矩陣相乘 一 問題描述 給定n個矩陣 a1,a2,an 其中這n個矩陣是可相乘的,i 1,2,n 1。算出這n個矩陣的相乘積a1a2 an。補充 如果兩個矩陣a和b是可相乘的,那麼a的列數要和b的行數是相同的,否則,這兩個...
演算法分析實驗報告02
演算法分析 斐波那契數列 第1,2兩個數為1,1.從第3個數開始,該數是其前面兩個數之和。利用遞迴設計演算法計算第20個斐波那契數。include using namespace std intfibonacci int n intmain 1.演算法分析 10!10 9 8 7 6 5 4 3 2...