国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python最長公共子串算法實例

2019-11-25 17:58:31
字體:
供稿:網(wǎng)友

本文實例講述了Python最長公共子串算法。分享給大家供大家參考。具體如下:

#!/usr/bin/env python # find an LCS (Longest Common Subsequence). # *public domain*  def find_lcs_len(s1, s2):  m = [ [ 0 for x in s2 ] for y in s1 ]  for p1 in range(len(s1)):   for p2 in range(len(s2)):    if s1[p1] == s2[p2]:     if p1 == 0 or p2 == 0:      m[p1][p2] = 1    else:      m[p1][p2] = m[p1-1][p2-1]+1   elif m[p1-1][p2] < m[p1][p2-1]:     m[p1][p2] = m[p1][p2-1]    else:               # m[p1][p2-1] < m[p1-1][p2]     m[p1][p2] = m[p1-1][p2]  return m[-1][-1]  def find_lcs(s1, s2):  # length table: every element is set to zero.  m = [ [ 0 for x in s2 ] for y in s1 ]  # direction table: 1st bit for p1, 2nd bit for p2.  d = [ [ None for x in s2 ] for y in s1 ]  # we don't have to care about the boundery check.  # a negative index always gives an intact zero.  for p1 in range(len(s1)):   for p2 in range(len(s2)):    if s1[p1] == s2[p2]:     if p1 == 0 or p2 == 0:      m[p1][p2] = 1    else:      m[p1][p2] = m[p1-1][p2-1]+1    d[p1][p2] = 3          # 11: decr. p1 and p2    elif m[p1-1][p2] < m[p1][p2-1]:     m[p1][p2] = m[p1][p2-1]     d[p1][p2] = 2          # 10: decr. p2 only    else:               # m[p1][p2-1] < m[p1-1][p2]     m[p1][p2] = m[p1-1][p2]     d[p1][p2] = 1          # 01: decr. p1 only  (p1, p2) = (len(s1)-1, len(s2)-1)  # now we traverse the table in reverse order.  s = []  while 1:   print p1,p2   c = d[p1][p2]   if c == 3: s.append(s1[p1])   if not ((p1 or p2) and m[p1][p2]): break  if c & 2: p2 -= 1  if c & 1: p1 -= 1 s.reverse()  return ''.join(s)  if __name__ == '__main__':  print find_lcs('abcoisjf','axbaoeijf')  print find_lcs_len('abcoisjf','axbaoeijf')

希望本文所述對大家的Python程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 平谷区| 仙居县| 都昌县| 乌拉特后旗| 邢台市| 治多县| 利辛县| 海门市| 遂平县| 乌兰浩特市| 红河县| 府谷县| 区。| 肥乡县| 金阳县| 平江县| 永定县| 大安市| 大兴区| 柳州市| 泌阳县| 申扎县| 习水县| 东乌珠穆沁旗| 棋牌| 株洲县| 曲阳县| 英山县| 韩城市| 开鲁县| 茶陵县| 金川县| 资源县| 易门县| 栾城县| 新余市| 镇沅| 竹溪县| 鸡东县| 吴忠市| 临江市|