给定两个向量:'pattern' 和 'trail'。问题:“轨迹”中“模式”出现的频率如何?
例子:
pattern <- c(1,2,3)
trail <- c(7,1,4,2,9,2,3)
正确解:2(即 1,2,3 和 1,2,3;“2”在中间出现两次)。
我试过了:
getPerformance <- function(pattern,trail) {
tmp <- 0
for(i in 1:length(pattern)) {
for(j in 1:length(trail)) {
if(pattern[i]==trail[j]) {
if(i<length(pattern)) {
sum(pattern[i:length(pattern)])
}
tmp <- 1 * getPerformance(pattern[i:length(pattern)],trail[j:length(trail)])
}
}
}
return(tmp)
}
但是这个函数不会终止。当然,欢迎使用非递归解决方案。谢谢你的帮助!
最佳答案
n_subseq = function(trail, pattern) {
# generate all subsets of the elements of `trail` in `pattern`
# of `length(pattern)`
# preserving order (as combn does)
# that are all equal to `pattern`
sum(combn(
x = trail[trail %in% pattern],
m = length(pattern),
FUN = function(x) all(x == pattern)
))
}
n_subseq(trail = c(7, 1, 4, 2, 9, 2, 3), pattern = 1:3)
# [1] 2
n_subseq(c(1, 2, 2, 3, 3), 1:3)
# [1] 4
关于r - 向量中特定序列的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55009592/