計算機演算法設計與分析 動態規劃演算法

2021-09-24 19:34:41 字數 3437 閱讀 1183

一、實驗目的與要求

1、熟悉矩陣連乘問題的演算法;

2、初步掌握動態規劃演算法;

二、實驗題目

給定n個矩陣{a1,a2,…,an},其中ai與ai+1是可乘的,i=1,2…,n-1。確定計算矩陣連乘積的計算次序,使得依此次序計算矩陣連乘積需要的數乘次數最少。

三、實現思想

設計算a[i:j],1≤i≤j≤n,所需要的最少數乘次數m[i,j],則原問題的最優值為m[1,n]。

當i=j時,a[i:j]=ai,因此,m[i][i]=0,i=1,2,…,n

當i四、實現**

#includeusing namespace std;

void matrixchain(int *p,int n,int m[100],int s[100])

五、實驗結果

一、實驗目的與要求

1、熟悉最長公共子串行問題的演算法;

2、初步掌握動態規劃演算法;

二、實驗題

若給定序列x=,則另一串行z=,是x的子串行是指存在乙個嚴格遞增下標序列使得對於所有j=1,2,…,k有:zj=xij。例如,序列z=是序列x=的子串行,相應的遞增下標序列為。

給定2個序列x和y,當另一串行z既是x的子串行又是y的子串行時,稱z是序列x和y的公共子串行。

給定2個序列x=和y=,找出x和y的最長公共子串行。

三、實現思想

最長公共子串行問題有最優子結構性質和子問題重疊性質,c[i][j]記錄集合a從1到i,和集合b從1到j的最長公共子串行的長度。a[i]=b[j],則最長子序列的最後乙個元素必為a[i]/b[j]。a[i]!=b[j]&&a[i]!=z[k],則最長子序列由集合a從1到i-1和集合b從1到j決定,集合b同理。

四、實現**

一、實驗目的與要求

1、熟悉最長最大欄位和問題的演算法;

2、進一步掌握動態規劃演算法;

二、實驗題

若給定n個整數組成的序列a1,a2,a3,……an,求該序列形如ai+ai+1+……+an的最大值。

三、實現思想

最大欄位和的思想簡單,這裡主要寫動態規劃的思想。

從頭開始,元素乙個乙個不斷加,和為負,直接捨棄;和為正,比較記錄最大元素的變數max,將較大的值賦給變數max

四、實現**

/* //直接邏輯實現

//時間複雜度為o(n^3)

#includeusing namespace std;

int main()

cout

int main()

} cout

int main()

else

b=a[i];

} cout五、實驗結果

一、實驗目的與要求

1、熟悉凸多邊形三角剖分問題的演算法;

2、進一步掌握動態規劃演算法;

二、實驗題

按照逆時針順序給定n凸多邊形的n個頂點座標,現在連線凸多邊形內部的頂點,使得凸多邊形分割為若干三角形,注意連線不可相交。每條線的權值為兩點之間的距離,所有連線的權值和為當前方案的權值,現在需要你計算所有方案中最小權值和。

輸入:輸入第一行包括乙個整數n,第2~n+1行,每行兩個整數x,y,代表乙個座標點,以空格間隔。

輸出:輸出一行1個浮點數代表最小權值,保留小數點後三位。

****** input:

40 0

1 01 1

0 1****** output:

1.414

三、實現思想

思想跟矩陣連乘問題完全相同。

尋找某點與基準邊構成乙個三角形,並將多邊形分割成兩個多邊形(與三角形都是最優子結構),再在剩下來的多邊形中繼續分割。

w函式計算的分割後三角形的三邊長之和,最終t中最大值儲存的是兩倍的弦長和邊長,因此最終的弦長需要減掉邊長,並除2.

四、實現**

#includeusing namespace std;

double t[100][100],s[100][100];

struct port

k[10];

double w(int a,int b,int c)

double bianchang(int n)

cout<

一、實驗要求與目的

1、 掌握動態規劃演算法求解問題的一般特徵和步驟。

2、 使用動態規劃法程式設計,求解影象壓縮問題。

二、實驗題目

問題描述:設某數字影象有n個畫素點,畫素點灰度值序列記為p[n],0 =< p[n] <= 255,則乙個畫素需要8位儲存。現在考慮將這n個畫素分成m個連續子段,每個子段儲存位數設為相同,這樣儲存,每個段需要額外的開銷記錄段長和段內儲存位數,為了減小段長記錄的開銷,規定段長最大為256位,現在給定畫素序列p[n],求儲存空間的最優值及最優解。

輸入第一行乙個整數n表示畫素點的個數。

輸入第二行n個整數p[i]表示各點畫素值。

輸出一行乙個整數,代表最優值。

****** input:

51 3 3 251 214

****** output:

44三、實現思想

演算法對畫素值組成的序列,從後向前分組,總共嘗試256次,找到其中最大的元素位數bmax和最小的最優序列元素位數之和s[i]。

四、實現**

計算機演算法設計與分析解題心得

先觀察問題的結構 解的形式,再設計演算法 能分解成子問題,是非常有效的資訊 優化問題時,下界很重要。給乙個問題,從最簡單的case入手 觀察input的關鍵結構,看能否分 能否combine 觀察output,不要堅持追求optimal,追求sub optimal。sample.手動執行最基本的演算...

演算法設計與分析 動態規劃

最大子段和問題 給定由n個整數 包含負整數 組成的序列a1,a2,an,求該序列子段和的最大值。i.當所有整數均為負值時定義其最大子段和為0。所求的最優值為 i.例如,當 a1,a2,a7,a8 1,3,7,8,4,12,10,6 時,最大子段和為 bj是1到j位置的最大子段和 由bj的定義易知,當...

演算法設計與分析 動態規劃

分治技術的問題 子問題是相互獨立的 如果子問題不是相互獨立的,分治演算法將重複計算公共子空間,效率很低 提高效率的方法 從規模最小的子問題開始計算 用恰當資料結構儲存子問題的解,供以後查詢 確保每個子問題只求解一次 優化問題 給定一組約束條件和乙個代價函式,在解空間中搜尋具有最小或最大代價的優化解 ...