以文本方式查看主题 - 中文XML论坛 - 专业的XML技术讨论区 (http://bbs.xml.org.cn/index.asp) -- 『 算法理论与分析 』 (http://bbs.xml.org.cn/list.asp?boardid=60) ---- 问一个算法的题目!请高手指点! (http://bbs.xml.org.cn/dispbbs.asp?boardid=60&rootid=&id=16758) |
-- 作者:pczhang -- 发布时间:4/7/2005 10:52:00 PM -- 问一个算法的题目!请高手指点! 字符序列的子序列由删除该序列任意位置的任意个元素而得.序列x和y的最长公共子序列记为Lcs(x,y),是x和y的公共子序列,且长度最大.例如,adcbcb是x=abdcbcbb和y=adacbcb的最长公共子序列.设x长度为n,y长度为m,设计一算法计算x和y的最长公共子序列的长度,尽可能改进你的算法,使它的时间复杂性为O(n*m) |
-- 作者:pczhang -- 发布时间:4/7/2005 10:55:00 PM -- 晕!发现有人贴过了! 想请教一下具体的解法! 复杂度在O(n*m) 之内的? |
-- 作者:eyounx -- 发布时间:4/8/2005 10:28:00 AM -- LCS(a[1..m],b[1..n]) = a[1]==b[1] ? 1+LCS(a[2..m],b[2..n]) : max(LCS(a[1..m],b[2..n]),LCS(a[2..m],b[1..n]) ) dp之 |
-- 作者:xzjxu -- 发布时间:4/8/2005 11:09:00 AM -- 类似"卷积"一样的比较方法,就是O(mn)的 |
-- 作者:pczhang -- 发布时间:4/8/2005 11:59:00 AM -- thanks懂了! 就是动态规划啊!
|
-- 作者:eyounx -- 发布时间:4/8/2005 12:58:00 PM --
卷积?卷积是local的,LCS是全局的 |
-- 作者:xzjxu -- 发布时间:4/8/2005 4:43:00 PM --
卷积,就是个比喻 就是一个从头一个从尾开始到一个到尾一个到头的比较 |
-- 作者:eyounx -- 发布时间:4/8/2005 5:44:00 PM -- 不如写出来看看 |
-- 作者:xzjxu -- 发布时间:4/11/2005 7:22:00 PM --
如两个字串123456789和abcdefghijklm. 以下比较上下重叠的部分 开始: 123456789 abcdefghijklm 然后 123456789 abcdefghijklm ............................. 123456789 abcdefghijklm 比较重叠部分,记录最长相同的长度,即可! |
-- 作者:xzjxu -- 发布时间:4/11/2005 7:23:00 PM -- 呵呵,显示的效果,不一样了 |
-- 作者:eyounx -- 发布时间:4/11/2005 8:53:00 PM -- 写出来的意思是写算法出来,况且上面的完全看不懂 |
-- 作者:eyounx -- 发布时间:4/11/2005 8:55:00 PM -- 不过,好歹要拿两个有点公共部分的字符串来比吧,123456789和abcdefghijklm会有重叠的部分? |
-- 作者:xzjxu -- 发布时间:4/11/2005 9:39:00 PM --
呵呵,你能看懂就行了,写代码太麻烦 |
-- 作者:eyounx -- 发布时间:4/11/2005 9:51:00 PM -- 看不懂的说 |
-- 作者:Logician -- 发布时间:4/11/2005 9:52:00 PM --
eyounx的上一个帖子好像是说他没看懂。 |
-- 作者:xzjxu -- 发布时间:4/12/2005 1:38:00 PM -- 重看了一下楼主的题目,看来是我看错题目了,sorry |
-- 作者:xzjxu -- 发布时间:4/12/2005 2:45:00 PM -- 用VB写的 Private Function lcs(s1 As String, s2 As String) As Integer Dim L1 As Integer, L2 As Integer, t As Integer L1 = Len(s1): L2 = Len(s2) If s1 = "" Or s2 = "" Then lcs = 0 Exit Function End If lcs = 0 For i = 1 To L1 For j = 1 To L2 If Mid(s1, i, 1) = Mid(s2, j, 1) Then lcs = lcs(Right(s1, L1 - i), Right(s2, L2 - j)) + 1 Exit Function End If Next j Next i End Function |
-- 作者:xzjxu -- 发布时间:4/12/2005 5:10:00 PM -- 好象还有错误!
|
-- 作者:eyounx -- 发布时间:4/12/2005 5:35:00 PM -- 我用dp写一段,你比比看: dim dparray(1 to 1) as integer, L1 as integer, L2 as integer function LCS( stra as string, strb as string) as integer function LCS_Sub( stra as string, strb as string, indexa as integer, indexb as integer) as integer) 我手上没有basic编译器,可能有语法错误。 |
-- 作者:xzjxu -- 发布时间:4/12/2005 7:14:00 PM -- 你那个数组用的罗嗦 看下面的 Private Sub Form_Click() Dim s1 As String, s2 As String s1 = text1: s2 = text2 Print lcs(s1, s2) End Sub Private Function lcs(s1 As String, s2 As String) As Integer Dim L1 As Integer, L2 As Integer, L As Integer L1 = Len(s1): L2 = Len(s2) If s1 = "" Or s2 = "" Then lcs = 0 Else If Mid(s1, 1, 1) = Mid(s2, 1, 1) Then lcs = lcs(Right(s1, L1 - 1), Right(s2, L2 - 1)) + 1 Else L = lcs(Right(s1, L1 - 1), s2) lcs = lcs(s1, Right(s2, L2 - 1)) If lcs < L Then lcs = L End If End If End Function |
-- 作者:phoenixinter -- 发布时间:4/12/2005 7:45:00 PM -- 时间复杂度O(mn)就是trivial的dp 可以用memoization或者是bottom-up approach LCS[i,j]=1+LCS[i-1,j-1] if A[i]=B[j] =max(LCS[i-1,j],LCS[i,j-1]) o.w. |
-- 作者:eyounx -- 发布时间:4/12/2005 7:53:00 PM -- 你知道那个数组的作用吗? 你拿两个1000长度的字符串跑跑你的算法和我的算法,就知道区别了 |
-- 作者:Logician -- 发布时间:4/12/2005 7:54:00 PM -- 呵呵! 版大终于来了。:) |
-- 作者:eyounx -- 发布时间:4/12/2005 7:56:00 PM -- 嘿嘿,透露一下,版大的LCS的PAPER快要写好了 |
-- 作者:xzjxu -- 发布时间:4/12/2005 7:58:00 PM --
是,那个数组可以不需要重新计算,我也常用这种方法,呵呵,一时忘了 |
-- 作者:Logician -- 发布时间:4/12/2005 8:00:00 PM -- 牛啊.............. 写好后发给偶们瞻仰一下啊? |
-- 作者:phoenixinter -- 发布时间:4/12/2005 8:03:00 PM -- 刚才没有细细看…… 你说的数组是哪个数组啊? eyounx? |
-- 作者:phoenixinter -- 发布时间:4/12/2005 8:04:00 PM -- sigh 还是上ieee吧…… 在校内上woft好慢啊…………………… 5555 PS:所谓的LCS paper就是在灌水…… |
-- 作者:injuredwolf -- 发布时间:10/9/2005 9:39:00 AM -- 如果要求输出全部的LCS呢,一般的动态规划只能输出一个LCS. 复杂度不能高 |
-- 作者:lovelove -- 发布时间:5/7/2006 7:39:00 PM -- 用动态规划法拉!时间复杂度也是(n*m) |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
132.813ms |