您好,登錄后才能下訂單哦!
(1)、問題描述:給出2個序列,x是從1到m,y是從1到n,找出x和y的最長公共子序列?
x:A B C B D A B
y:B D C A B A
則:最長公共子序列長度為4,BDAB BCAB BCBA均為LCS(最長公共子序列);
模型實現圖:
(2)、問題解決
代碼實現了最長公共子序列的長度
#include<stdio.h> #define N 10 int LCS(int *a, int count1, int *b, int count2); int LCS(int *a, int count1, int *b, int count2){ int table[N][N] = {0}; int i; int j; for(i = 0; i < count1; i++){ for(j = 0; j < count2; j++){ if(a[i] == b[j]){ table[i+1][j+1] = table[i][j]+1; }else{ table[i+1][j+1] = table[i+1][j] > table[i][j+1] ? table[i+1][j] : table[i][j+1]; } } } return table[count1][count2]; } void main(void){ int a[] = {1, 2, 3, 4, 5, 6}; int b[] = {2, 3, 5, 6, 7}; int count1 = sizeof(a)/sizeof(int); int count2 = sizeof(b)/sizeof(int); int number; number = LCS(a, count1, b, count2); printf("%d\n", number); }
結果截圖
(3)、動態規劃的特征:
特征一(最優子結構的性質):一個問題的最優解包含了子問題的最優解;
特征二:重疊子問題,一個遞歸的過程包含很少的獨立子問題被反復計算了多次;
時間復雜度:O(m*n);
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。