Python实现各类数据结构和算法---动态规划之最长公共子序列
来源:互联网 发布:爱因斯坦大脑 知乎 编辑:程序博客网 时间:2024/06/06 19:37
根据《算法导论》中动态规划一章介绍的最长公共子序列原理,python实现,原理及伪代码书籍详见p223-225
#coding:utf-8'''Created on 2014-3-19@author: admin'''def LCS_Lenth(x,y): m=len(x)+1 #数组x,y从0开始,书籍上,从1开始,故加1 n=len(y)+1 #----------------------初始化矩阵---------------- c=[[0 for j in xrange(0,n)] for i in xrange(0,m)] b=[[0 for j in xrange(0,n)] for i in xrange(0,m)] #用0、1、2分别表示向上、向斜上方、向左,不能b=c,若是那样的话,则b,c同值同改变 #------------------------------------------- for i in xrange(1,m): #m=8,i从1到7 for j in xrange(1,n): #n=7,j从1到6 if x[i-1]==y[j-1]: #x,y从标号0开始,故这里比较的话,从i-1,j-1走起 c[i][j]=c[i-1][j-1]+1 b[i][j]=1 #向斜上 else: if c[i-1][j]>=c[i][j-1]: c[i][j]=c[i-1][j] b[i][j]=0 else: c[i][j]=c[i][j-1] b[i][j]=2 return b,cdef print_LCS(b,x,i,j): if i==0 and j==0: return if b[i][j]==1: print_LCS(b,x,i-1,j-1) print x[i-1], #这里同理,要输出x[i-1] elif b[i][j]==0: print_LCS(b,x,i-1,j) else: print_LCS(b,x,i,j-1)x='ABCBDAB'y='BDCABA'b,c=LCS_Lenth(x,y)print '方向变化:',bprint '矩阵值:',cprint '最长公共子序列为:'print_LCS(b, x, len(x), len(y))
0 0
- Python实现各类数据结构和算法---动态规划之最长公共子序列
- Python 动态规划算法求解最长公共子序列
- 动态规划实现最长公共子序列(LCS)算法
- 动态规划之最长公共子序列算法
- 算法知识之最长公共子序列问题(动态规划)
- 【算法导论】动态规划之最长公共子序列
- 算法导论之动态规划:最长公共子序列
- 动态规划之最长公共子序列(算法导论)
- 动态规划算法之最长公共子序列问题
- 算法动态规划之最长公共子序列
- 算法导论之动态规划:最长公共子序列
- 算法之最长公共子序列(动态规划)
- 算法学习之动态规划--最长公共子序列
- 动态规划算法之最长公共子序列问题
- 【算法】 动态规划 最长公共子序列
- 动态规划之最长公共子序列和最长公共字串,最大子序列和
- 动态规划之最长公共子序列---java实现
- 动态规划之最长公共子序列问题 C++实现
- java第一周作业,java欢迎您
- (32)二、八、十以及十六进制之间的转换
- 1051. Pop Sequence
- UID-CSS Hack
- 面试题整理
- Python实现各类数据结构和算法---动态规划之最长公共子序列
- 项目中学的的基础的知识
- linux C/C++开发环境搭建指南
- 机器视觉的一些链接
- Linux Shell编程入门
- 当感觉自己写的代码表达不够清晰,有些bad smell时应该怎么做?
- 吐槽poj1062(不是解题报告,没有代码,仅仅吐糟)
- java第三周作业,P45 -3
- leveldb研究系列七——FilterPolicy