LCS 遞迴與DP迭代

2021-10-14 12:04:12 字數 529 閱讀 6286

給定兩個字串,兩個字串的公共子串中最長的即為"最長公共子串" lcs
給定兩個字元a[0, n), b[0, m)

遞迴實現:比較兩個字串的末尾字元,總共有3種情況

1.遞迴基:m=0或 n=0,
其中乙個字元為空字元,直接返回空串即可。

2. 末字元 a[n-1] == b[m-1] == "x"
減而治之: lcs(a[0, n-1), b[0,m-1)) + 「x」

其中子問題:兩子串的lcs問題

平凡問題:子問題的解拼接「x」

3.末字元 a[n-1] != b[m-1],
減而治之:取 lcs( a(0, n-2), b(0, m-1)) 與 lcs( a(0, n-1), b(0, m-2))中的更長者

其中子問題:認為這兩個末字元其中乙個對lcs是沒有貢獻的,分別砍掉其中乙個子串的末字元,求解lcs

DP動態規劃 遞迴迭代

在刷leetcode的時候,因為對dp和遞迴不是很熟,對兩者界限也很模糊。所以看了一些概念以後來寫乙個日記 這是一類問題的定義,解決這類問題的核心在於找到遞推公式 f x f x 1 g n 得到遞推公式之後,如何計算遞推公式存在兩種方法 自頂向下和自底向上 自頂向下 能採用遞迴實現 int fib...

遞迴與迭代

遞迴與迭代都是基於控制結構 迭代用重複結構,而遞迴用選擇結構。遞迴與迭代都涉及重複 迭代顯式使用重複結構,而遞迴通過重複函式呼叫實現重複。遞迴與迭代都涉及終止測試 迭代在迴圈條件失敗時終止,遞迴在遇到基本情況時終止。使用計數器控制重複的迭代和遞迴都逐漸到達終止點 迭代一直修改計數器,直到計數器值使迴...

遞迴與迭代

1 遞迴 當函式用自身來定義時就稱為是遞迴 recursive 的。遞迴必須滿足四個基本法則 1 基本情形 必須給出基準情況,不用遞迴就能求出,用於終止遞迴運算 2 不斷推進 對於那些要被遞迴求解的情形,遞迴呼叫必須能夠朝著乙個基準情形推進 3 設計法則 假設所有的遞迴呼叫都能執行 4 合成效益法則...