最长公共子序列(LCS)问题 python

来源:互联网 发布:安畅网络 编辑:程序博客网 时间:2024/05/26 08:43
#!/usr/bin/env python# -*- coding: utf-8 -*def lcs(arr1, arr2):      m = len(arr1)      n = len(arr2)      c = [[0 for k in range(n + 1)] for k in range(m + 1)]      b = [[-1 for k in range(n)] for k in range(m)]      for i in range(1, m + 1):          for j in range(1, n + 1):              if arr1[i - 1] == arr2[j - 1]:                  c[i][j] = c[i - 1][j - 1] + 1                  b[i - 1][j - 1] = '↖'               elif c[i - 1][j] >= c[i][j - 1]:                  c[i][j] = c[i - 1][j]                  b[i - 1][j - 1] = '↑'               else:                  c[i][j] = c[i][j - 1]                  b[i - 1][j - 1] = '←'       rlcs = []      get_lcs_arr(b, arr1, len(arr1) - 1, len(arr2) - 1, rlcs)      return c[m][n], rlcs    def get_lcs_arr(b, X, i, j, arr):      if i < 0 or j < 0:          return      if b[i][j] == '↖':          get_lcs_arr(b, X, i - 1, j - 1, arr)          arr.append(X[i])      elif b[i][j] == '↑':          get_lcs_arr(b, X, i - 1, j, arr)      else:          get_lcs_arr(b, X, i, j - 1, arr)  



0 0
原创粉丝点击