c****r 发帖数: 576 | 1 给定一个字母序列,我想找到其中有多少重复的连续子序列,并且得到最长的重复序列
。比如序列
A L K S D E A E A R K S D E A E
可以看出重复序列很多,比如K S D ,K S D E等等,但K S D E A E重复了两遍,它是
重复序列里面最长的,我的目的就是得到它,并且得知它重复了两遍。
OK,最容易想到的方法大概是设置窗口扫描。比如我先取前三个字母ALK,然后在整条
序列里面扫描有没有重复的;如果没有,右移一位,扫描LKS;如果有,则给ALK延长一
位,扫描ALKS。。。重复以上过程,就能得到我想要的最长重复子序列。
我觉得可能有更有效率的方法,但一时想不出,恳请诸位如有好的想法,不吝指教,谢
谢。 | j**u 发帖数: 6059 | 2 这个在programming版曾经讨论过,你到哪里去找找。
【在 c****r 的大作中提到】 : 给定一个字母序列,我想找到其中有多少重复的连续子序列,并且得到最长的重复序列 : 。比如序列 : A L K S D E A E A R K S D E A E : 可以看出重复序列很多,比如K S D ,K S D E等等,但K S D E A E重复了两遍,它是 : 重复序列里面最长的,我的目的就是得到它,并且得知它重复了两遍。 : OK,最容易想到的方法大概是设置窗口扫描。比如我先取前三个字母ALK,然后在整条 : 序列里面扫描有没有重复的;如果没有,右移一位,扫描LKS;如果有,则给ALK延长一 : 位,扫描ALKS。。。重复以上过程,就能得到我想要的最长重复子序列。 : 我觉得可能有更有效率的方法,但一时想不出,恳请诸位如有好的想法,不吝指教,谢 : 谢。
| c****r 发帖数: 576 | 3 多谢。顺便问一个Matlab语句
>> seed = [seed,repmat(head2(1+length(seed)),(~isempty(strfind(head2(2+
length(seed):
length(head2)),[seed,head2(1+length(seed))]))),1)]
是否过于复杂?这是个递归语句,用于实现我帖子里的算法。写成函数+if - else结
构更好?
【在 j**u 的大作中提到】 : 这个在programming版曾经讨论过,你到哪里去找找。
|
|