我试着创建一个程序,比较一个节点的子序列与一个节点序列,看看子序列出现在每个序列中的频率约80%的正确性。为了做到这一点,我把下面的函数:
code = c(c("A", "B", "C", "D", "E"))
subs = c("A", "C","D")
n = length(code)
m = length(subs)
mat = matrix(0, n+1, m+1)
for(i in 1:(n+1)){
for(j in 1:(m+1)){
previ = i - 1
prevj = j - 1
if(previ!=0 & prevj!=0){
if(code[[previ]] == subs[[prevj]]){
mat[i,j] = mat[previ,prevj] + 1
}
else{
mat[i,j] = max(mat[previ,j], mat[i,prevj])
}
}
}
}
print(mat)
return(mat[n+1,m+1])
但是当我处理的数据集比较大的时候,它的速度非常慢。有没有一种方法可以优化这个循环代码,或者不用循环就可以进行分析?
1条答案
按热度按时间iszxjhcz1#
如果你只关心精确匹配:
code
和subs
转换为如下字符串:(类似于subs_string)
如果要允许一定量的偏差,您可以:
codestring
分割成frame_size
长度的连续段(例如,当查找3个字母的模式时,长度为4):输出: