動的計画法とLCS

LCSのPython実装:

1つの は/ usr / binに/ ENVパイソン!
2  - * -コーディング:UTF-8 - * - 
3つの インポートSYS
 4  
5  リロード(SYS)
 6(sys.setdefaultencoding ' UTF-8 ' 7  
8  
9  クラスLCS(オブジェクト):
 10      "" " ロング共通部分算法
 11      """ 
12      DEF  __init__ :(自己、STR1、STR2)
 13          = self.s1 STR1
 14          self.s2 = STR2
 15          self.lcs = [ ''  のための範囲(LEN(self.s2)+ 1)] のための J レンジ(LEN(self.s1)+ 1)] 別の方法
16  
17。     DEF (セルフ)get_lcs_len:
 18である         " "" 再帰的計算LCSの長さ
 。19          "" " 
20である         ため I はxrange(LEN(self.s1)+ 1 ):
 21である             ために J (。+ LEN(self.s2)1はxrange ):
 22である                 IF I == 0 または Jの== 0
 23は                      セルフ.lcs [I、J] = 0
 24                  ELIFの self.s1 [I - 1] == self.s2 [J - 1 ]:
 25                     self.lcs [I、J] = self.lcs [I - 1] [J - 1] + 1
 26                  27                      self.lcs [I、J] = MAX(self.lcs [I - 1] [J] 、self.lcs [I]、[J - 1 ])
 28          リターンself.lcs [LEN(self.s1)、LEN(self.s2)]
 29  
30      DEF get_lcs(自己):
 31          ""」递归计算LCS(直接获取LCS)
 32          ""」
33          のためのはxrange(LEN(self.s1)+ 1 ):
 34              用の J はxrange(LEN(self.s2)+ 1 ):
 35                  であれば、I == 0 又は jは== 0 :
 36                     self.lcs [I] [J] = '' 
37                  のelif self.s1 [I - 1] == self.s2 [J - 1 ]:
 38                      self.lcs [I] [J] = self.lcs [iが- 1] [J - 1] + self.s1 [I - 1 ]
 39                  40                      self.lcs [I] [J] = self.lcs [I - 1] [j]の場合 - (self.lcs [Iでlen 1] [J])> \
 41                              LEN(self.lcs [I] [J - 1])他の self.lcs [I] [J - 1 ]
 42          リターンself.lcs [LEN(self.s1)] [LEN (self.s2)]
 43  
44  
45  
46  なら __name__ == ' __main__' 47      、S1 = ' abcdefgw ' 
48      、S2 = ' bdfgegwe ' 
49      モデル= LCS(S1、S2)
 50      印刷 model.get_lcs()

 

おすすめ

転載: www.cnblogs.com/zhongmiaozhimen/p/11272296.html