動的計画法による最長共通部分列
Abstract
Explanation
TODO まだ.
Implementation
Input
文字列$ S, T
Output
文字列$ S, Tの最長共通部分列$ C
Time complexity
$ O(|S| |T|)time.
code:python
def longest_common_subseq(S, T):
if not S and not T: return ''
len_S, len_T = len(S), len(T)
dp = [0 * (len_T + 1) for i in range(len_S + 1)] for i in range(len_S):
for j in range(len_T):
# backtrack
C = ''
i, j = len_S, len_T
while i and j:
i, j = i - 1, j - 1
else:
else: j -= 1
長さだけ欲しい場合は, 次のコードのほうが少し速い.
二つのリストを使いまわしている.
code:python
def longest_common_subseq(S, T):
if not S and not T: return 0
len_S, len_T = len(S), len(T)
for s in S:
for j in range(len_T):
if s == Tj: dpj+1 = prevj + 1 Verification
References