如何用R找到所有线性子序列

时间:2017-05-01 16:30:26

标签: r algorithm subsequence

我正在寻找一个R函数或代码,它可以从长度为n的序列给出一个长度为k的所有线性子序列的列表,其中k-线性子序列被定义为X形式的序列(ai + b)a> 0且b> = 0。让我们假设给出了这个序列(序列中数字的位置i在括号中给出):

5(1)3(2)8(3)9(4)2(5)

因此,n = 5并且我对所有3线性子序列(k = 3)感兴趣。因此,我想通过我的R函数获得结果

5(1)3(2)8(3)

3(2)8(3)9(4)

8(3)9(4)2(5)

5(1)8(3)2(5)

不幸的是,我不知道从哪里开始。因此,任何帮助将不胜感激。非常感谢提前!

1 个答案:

答案 0 :(得分:4)

假设:

n <- 5
k <- 3

1)然后试试这个:

filter_linear <- function(x) if (sd(diff(x)) == 0) x else NA
na.omit(t(combn(n, k, filter_linear)))

给出(1,2,3),(1,3,5)等输出矩阵的行:

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    1    3    5
[3,]    2    3    4
[4,]    3    4    5
attr(,"na.action")
[1] 2 3 4 6 8 9
attr(,"class")
[1] "omit"

2)变体如下:

is_linear <- function(x) sd(diff(x)) == 0
Filter(is_linear, as.data.frame(combn(n, k)))

在输出data.frame:

的列中给出结果
  V1 V5 V7 V10
1  1  1  2   3
2  2  3  3   4
3  3  5  4   5