演算法分析與設計 回溯法實驗報告

2022-09-05 23:51:19 字數 2010 閱讀 1541

演算法導論課程設計成績

題    目:

回 溯 法    

學院班級: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...