def lcs(x, y):
m = len(x)
n = len(y)
c = [[i for i in range(n +1)] for j in range(m+1)]
b = [[i for i in range(n+1)] for j in range(m +1)]
for i in range(m):
c[i][0]=0
for j in range(n):
c[0][j]=0
for i in c:
print(i)
for i in range(1,m+1):
for j in range(1,n+1):
if x[i-1]==y[j-1]:
c[i][j]=c[i-1][j-1]+1
b[i][j]="o"
elif c[i-1][j]>=c[i][j-1]:
c[i][j]=c[i-1][j]
b[i][j]="up"
else:
c[i][j]=c[i][j-1]
b[i][j]="l"
return c ,b
def print_lcs(b, x, i, j):
if i==0 or j==0 :
return
if b[i][j]=="o":
print_lcs(b,x,i-1,j-1 )
print(x[i-1],end="")
elif b[i][j]=="up":
print_lcs(b, x, i-1, j)
elif b[i][j]=="l":
print_lcs(b, x, i, j-1)
x ="ABCBDAB"
y ="BDCAB"
c,b=lcs(x,y)
print("b")
for i in b:
print(i)
print("b")
m = len(x)
n = len(y)
print_lcs(b,x,m,n)
#
最长公共子链 算法导论python 实现
最新推荐文章于 2024-09-06 10:38:06 发布