最长公共子序列(不要求连续)
来源:学生作业帮 编辑:神马作文网作业帮 分类:数学作业 时间:2024/11/12 22:39:51
最长公共子序列(不要求连续)
求长度,时间复杂度O(n+m)
求长度,时间复杂度O(n+m)
得到字符串m1,m2后,有一个为空则子列为空.
如果都不为空,开始下面的步骤.
求得两列的长度分别为n1,n2.
动态生n2行n1列矩阵(二维数组).
取m2中每个元素(记位置为i)与m1中元素(记位置为j)逐个比较,如果相等则为矩阵中相应行列坐标的元素赋值为1,否则为0(可用循环嵌套完成).
比如m1(abc0cbad) m2(cba1abc)两串的话,可以得到如图所示矩阵.
然后,不难看出,要进行如下步骤.
定义max,用来记录最大子列中元素个数.
定义数组l[n2],用来记录最大子列的首字符地址(因为可能有不同最大子列,故用数组,而不是单个变量).
判断矩阵中每一个元素,是否为1,如果是则记下此时行地址到l数组,然后判断相对于这个元素的下一行下一列的元素是否为1,如果是则继续判断,一直到为0.记下此次判断(即一个while循环)中“1”的个数n,存入变量max.
对于矩阵中的每一个元素都这么判断,如果判断中n的值大于max那么把n付给max,同时把这个子列的首地址付给l[0],l[0]后面的元素全赋值为-1.如果,某次判断得到的n与max相同,即有相同最大子列,那么把它的首地址存入l数组的下一个位置.
当这个矩阵的每一个元素都判断完毕后,会得到max,和数组l,然后用循环做如下输出过程: 依次以l数组中的每个元素为首地址,输出m2字符串中以相应序号开头的max个字符,那么完成所有最大子列的输出.
昨天失眠了,一直到今天凌晨3点多,脑袋浑浑噩噩的,本想帮你敲代码,可是脑力不支了,估计敲出来也乱,还有问题的话,再讨论452032545
如果都不为空,开始下面的步骤.
求得两列的长度分别为n1,n2.
动态生n2行n1列矩阵(二维数组).
取m2中每个元素(记位置为i)与m1中元素(记位置为j)逐个比较,如果相等则为矩阵中相应行列坐标的元素赋值为1,否则为0(可用循环嵌套完成).
比如m1(abc0cbad) m2(cba1abc)两串的话,可以得到如图所示矩阵.
然后,不难看出,要进行如下步骤.
定义max,用来记录最大子列中元素个数.
定义数组l[n2],用来记录最大子列的首字符地址(因为可能有不同最大子列,故用数组,而不是单个变量).
判断矩阵中每一个元素,是否为1,如果是则记下此时行地址到l数组,然后判断相对于这个元素的下一行下一列的元素是否为1,如果是则继续判断,一直到为0.记下此次判断(即一个while循环)中“1”的个数n,存入变量max.
对于矩阵中的每一个元素都这么判断,如果判断中n的值大于max那么把n付给max,同时把这个子列的首地址付给l[0],l[0]后面的元素全赋值为-1.如果,某次判断得到的n与max相同,即有相同最大子列,那么把它的首地址存入l数组的下一个位置.
当这个矩阵的每一个元素都判断完毕后,会得到max,和数组l,然后用循环做如下输出过程: 依次以l数组中的每个元素为首地址,输出m2字符串中以相应序号开头的max个字符,那么完成所有最大子列的输出.
昨天失眠了,一直到今天凌晨3点多,脑袋浑浑噩噩的,本想帮你敲代码,可是脑力不支了,估计敲出来也乱,还有问题的话,再讨论452032545
C语言:给定一个整形数组b[n],b中连续相等元素构成的子序列称为平台.编写程序,求出b中最长平台的长度.
给定一个整数数组b[n],b中连续的相等元素构成的子序列称为平台.试设计算法,求出b中最长平台的长度.
输入一个由10个整数组成的序列,其中序列中任意连续三个整数都互不相同,求该序列中所有递增或递减子序列的个数.
C语言编程 求思路求一个字符串中的最长子串(串:连续的相同字符构成)例如:aabbbaacddf 则找出 bbb
用matlab求一个序列的所有子序列
c 语言求序列中所有递增或递减子序列的个数并输出子序列
C++编程,求一个数列的最大不上升子序列,输出该序列
杭电acm 1159,公共子序列问题,我的思路漏掉什么了啊?老是wrong answer
已知DNA序列,求氨基酸序列是什么
求名词解释:-10序列和-35序列
英语翻译DNA序列中含有内含子序列
mrna序列中包含内含子序列信息吗?