最长公共子序列(不要求连续)求长度,时间复杂度O(n+m)

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/30 04:52:52
最长公共子序列(不要求连续)求长度,时间复杂度O(n+m)

最长公共子序列(不要求连续)求长度,时间复杂度O(n+m)
最长公共子序列(不要求连续)
求长度,时间复杂度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

最长公共子序列(不要求连续)求长度,时间复杂度O(n+m) 求两个数列的所有公共子序列.算法设计 求两个数列的所有公共子序列 注意 不是最长公共子序列.时间复杂度越小越好一共就20个财富值,或提供下思路. 一道动态规划的题c/c++;给一段由数字组成的序列,从中至多删除一段连续的子序列,使得左右拼起来的序列的最长连续上升子序列的长度最大,求这个最大长度.求解如何做. 求最长上升子序列长度的N log N算法的Pascal代码最好是完整版的…… 给定一个整数数组b[n],b中连续的相等元素构成的子序列称为平台.试设计算法,求出b中最长平台的长度. C语言:给定一个整形数组b[n],b中连续相等元素构成的子序列称为平台.编写程序,求出b中最长平台的长度. 动态规划算法找出两个序列的最长公共子序列 用C加加 最好详细说明 什么动物连续不睡觉时间最长? 什么动物连续不睡觉时间最长? pascal一段数列删除连续一段是剩下出现最长上升子序列 最长公共子序列算法最近想做文件比较(比较两个二进制文件之间的差异,如0 1 2 4 3 5 6和0 1 2 3 4 5比较,结果是0 1 2 +3 4 -3 5 -6),就要取最长公共子序列(没有+也没有-的部分0 1 2 4 5).动态规划O 用matlab求一个序列的所有子序列只要求出所有子序列,对子序列没有其他要求.这个程序应该怎么写?某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在 内含子属于非编码区?如题?如果不是,那为什么说真核生物的编码区不连续呢?只是编码序列(即外显子)不连续啊.非编码区和非编码序列有区别吗 最长公共子序列 Tyvj P1050 Pascal程序,描述 Description一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串.如A=“cdaad,顺次选1,3,5个字符就构成子串cad,现给定两个字符串,求它们的最长 c 语言求序列中所有递增或递减子序列的个数并输出子序列【试题描述】输入一个由10个整数组成的序列,其中序列中任意连续三个整数都互不相同,求该序列中所有递增或递减子序列的个数.【 设哈希函数H(key)=key%13,用公共溢出区法处理冲突,试在长度为18的散列地址空间中对关键字序列(71,28,46,14,2,20,85,58)构造哈希表,要求画出哈希表存储结构示意图,并求等概率下查找成功时的平 求等腰直角三角形的斜边长度,顶角为直角,已知底边长度,求斜边长度.要求提供简单明了的计算公式.可能我说的不太清楚,解释下,一个等腰直角三角形,已知最长边的长度,求另外两条边 对持续时间为2.048秒的连续信号f进行1024个等距采样,求采样所得序列的频谱周期和若要求不产生频率混叠,则对f有什么要求