给定一个长度为L的数字序列,需要计算出有多少个非递减和非递增的恰好具有指定长度的子序列。例如,如果我有一个长度为15的序列:
2, 4, 11, 13, 3, 5, 5, 6, 3, 3, 2, 4, 2, 14, 15
我可以看到非递增的子序列是:
13, 3 6, 3, 3, 2 4, 2
非递减的子序列是:
2, 4, 11, 13 3, 5, 5, 6 2, 4 2, 14, 15
因此,在这里我有:
- 2个长度为2的非递增子序列 - 1个长度为4的非递增子序列 - 2个长度为2的非递减子序列 - 1个长度为3的非递减子序列 - 2个长度为4的非递减子序列
由于在这种情况下非递减(或非递减)子序列的最大长度可以达到15,因此我考虑通过向量x表示非递减的频率,而向量y表示非递增的频率。
2, 4, 11, 13, 3, 5, 5, 6, 3, 3, 2, 4, 2, 14, 15
我可以看到非递增的子序列是:
13, 3 6, 3, 3, 2 4, 2
非递减的子序列是:
2, 4, 11, 13 3, 5, 5, 6 2, 4 2, 14, 15
因此,在这里我有:
- 2个长度为2的非递增子序列 - 1个长度为4的非递增子序列 - 2个长度为2的非递减子序列 - 1个长度为3的非递减子序列 - 2个长度为4的非递减子序列
由于在这种情况下非递减(或非递减)子序列的最大长度可以达到15,因此我考虑通过向量x表示非递减的频率,而向量y表示非递增的频率。
x = (0,2,0,1,0,0,0,0,0,0,0,0,0,0,0)
y = (0,1,1,2,0,0,0,0,0,0,0,0,0,0,0)
将这个问题扩展到长度为L的序列的一般情况,我想通过循环遍历序列,并计算确切长度的子序列的频率。如何做到这一点?我会创建长度为L的零向量,并在每次遇到长度为l的子序列时,在零矩阵的第l个元素上加1。
由于我的序列长度为数千个,我不会要求Matlab将它们都写出来,但我会要求它给我写出特定的频率。
这是一个好方法吗? 在Matlab中是否有某个函数可以完成这个任务?
x
将是x = (0,3,0,1,0,0,0,0,0,0,0,0,0,0,0)
。 - Robert Seifert