最长公共子链 算法导论python 实现

最长公共子链 算法导论python 实现,第1张

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)

#

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/917296.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存