日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

lcs算法c语言代码,动态规划算法-LCS

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 lcs算法c语言代码,动态规划算法-LCS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本講我們來探討動態規劃算法中一個常見的問題最長公共子序列即LCS(Long Common Sequence)。

首先我們來看一下問題描述:

有兩個序列X和Y,其中

X = {x1, x2, ..., xm}

Y = {y1, y2, ..., yn}

求X和Y的最長公共子序列長度。

例如:X={1, 3, 5, 9, 10}? Y={1, 4, 9, 10},則X和Y的最長公共子序列的長度為3,其中一個序列為{1,9,10}。

解題思路:

步驟1:用函數的形式來表示結果。

設f(x,y) = z,該函數表示X序列的長度為x, Y序列的長度為y,則XY序列的最長公共子序列長度為z。

所以題目要求解的便是f(m,n)的值。

步驟2:分析遞推情況。

接下來我們來分析一般情況即f(i,j)的求解。

f(i,j)表示有兩個序列

X = x1, x2, ..., xi

Y = y1, y2, ..., yj

如何求這兩個子序列的最長公共子序列的長度。

所謂的遞推關系分析其實就是分析f(i)與f(i-1)、f(i-2)...或f(0)等之間的關系,由于本題是二元函數關系,故就是分析f(i,j)與f(i-1,j-1)、f(i-1,j)、 f(i, j-1)等之間的關系。

首先我們來看一下f(i,j)與f(i-1, j-1)之間的關系。

f(i,j)表示的是規模分別為i和j的兩個序列的最長公共子序列的長度,而f(i-1, j-1)表示的是規模分別為i-1和j-1的兩個子序列的最長公共子序列的長度。

這兩者之間有什么聯系呢?

假設我們現在已經知道f(i-1, j-1)的最長公共子序列的長度,現在要求f(i,j)函數的值,你該如何求解?

當兩個序列的最后一個元素相等時,此時f(i,j)的值應該就是f(i-1, j-1) 的值加上1,即

f(i,j) = f(i-1, j-1) + 1, 這種情況比較好理解。

當兩個序列的最后一個元素不等時,則我們需要考慮f(i-1, j)和f(i, j-1)的最大值,即max{f(i-1, j), f(i, j-1)}。

綜上,我們可以得出下面的遞推關系式:

步驟3:算法實現

算法實現我們將開辟新的文章來講解,敬請期待。

總結:

無論什么樣的動態規劃題目我們基本都可以按照上面的思路來求解,步驟一其實就是問題的分解,尋找合適的自變量來控制問題的規模,步驟二的遞推關系分析也有一定的規律可循,后面將開辟新的文章來分析。

總結

以上是生活随笔為你收集整理的lcs算法c语言代码,动态规划算法-LCS的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。