时间:2021-05-22
最长公共子序列,LCS,动态规划实现。
#encoding: utf-8#author: xu jin, 4100213#date: Nov 01, 2012#Longest-Commom-Subsequence#to find a longest commom subsequence of two given character arrays by using LCS algorithm#example output:#The random character arrays are: ["b", "a", "c", "a", "a", "b", "d"] and ["a", "c", "a", "c", "a", "a", "b"]#The Longest-Commom-Subsequence is: a c a a bchars = ("a".."e").to_ax, y = [], []1.upto(rand(5) + 5) { |i| x << chars[rand(chars.size-1)] }1.upto(rand(5) + 5) { |i| y << chars[rand(chars.size-1)] }printf("The random character arrays are: %s and %s\n", x, y)c = Array.new(x.size + 1){Array.new(y.size + 1)}b = Array.new(x.size + 1){Array.new(y.size + 1)}def LCS_length(x, y ,c ,b) m, n = x.size, y.size (0..m).each{|i| c[i][0] = 0} (0..n).each{|j| c[0][j] = 0} for i in (1..m) do for j in(1..n) do if(x[i - 1] == y [j - 1]) c[i][j] = c[i - 1][j - 1] + 1; b[i][j] = 0 else if(c[i - 1][j] >= c[i][j - 1]) c[i][j] = c[i - 1][j] b[i][j] = 1 else c[i][j] = c[i][j - 1] b[i][j] = 2 end end end endenddef Print_LCS(x, b, i, j) return if(i == 0 || j == 0) if(b[i][j] == 0) Print_LCS(x, b, i-1, j-1) printf("%c ", x[i - 1]) elsif(b[i][j] == 1) Print_LCS(x, b, i-1, j) else Print_LCS(x, b, i, j-1) endendLCS_length(x, y, c ,b) print "The Longest-Commom-Subsequence is: "Print_LCS(x, b, x.size, y.size)声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
最长公共子序列python实现,最长公共子序列是动态规划基本题目,下面按照动态规划基本步骤解出来。1.找出最优解的性质,并刻划其结构特征序列a共有m个元素,序列
问题比较简单,给定一个字符串集合求解其中最长的公共前缀即可,这样的问题有点类似于最长公共子序列的问题,但是比求解最长最长公共子序列简单很多,因为是公共前缀,这样
本文实例讲述了Java算法之最长公共子序列问题(LCS)。分享给大家供大家参考,具体如下:问题描述:一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确
本文实例讲述了PHP实现求两个字符串最长公共子串的方法。分享给大家供大家参考,具体如下:前面一篇PHP实现求解最长公共子串问题的方法是基于java改进而来,这里
本文实例讲述了Python最长公共子串算法。分享给大家供大家参考。具体如下:#!/usr/bin/envpython#findanLCS(LongestComm