avatar
问一个简单问题的算法# Computation - 科学计算
c*r
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。。。重复以上过程,就能得到我想要的最长重复子序列。
我觉得可能有更有效率的方法,但一时想不出,恳请诸位如有好的想法,不吝指教,谢
谢。
avatar
j*u
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。。。重复以上过程,就能得到我想要的最长重复子序列。
: 我觉得可能有更有效率的方法,但一时想不出,恳请诸位如有好的想法,不吝指教,谢
: 谢。

avatar
c*r
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版曾经讨论过,你到哪里去找找。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。