如何按指定条件分割父向量ts为子向量?能否生成更多唯一子向量?
问题解答
不能生成比这10个更多的满足所有条件的子向量,原因如下:
- 你的父向量是长度为10的循环序列(允许首尾循环取数),子向量长度固定为3。要求子向量间有恒定重叠数,等价于相邻子向量的滑动步长是固定值(步长 = 子向量长度 - 重叠元素数)。
- 在循环序列中,以固定步长滑动取长度为l的子向量,能生成的唯一子向量数量等于
n / gcd(n, k),其中n是父向量长度,k是滑动步长,gcd是最大公约数:- 当步长k和n互质时(比如例子中的步长1,gcd(10,1)=1),能生成的唯一子向量数量就是n=10,这是该场景下的最大值。
- 如果选择其他步长(比如步长2,gcd(10,2)=2),生成的唯一子向量数量会小于10(比如5个),既无法满足“数量大于length(ts)”的要求,还会出现重复的子向量组合。
- 循环序列中每个起始位置对应一个唯一的连续子向量,总共只有10个不同的起始位置,因此最多只能得到10个唯一的连续循环子向量,和你给出的例子数量一致。
- 若尝试非连续元素组成的子向量,即便满足恒定重叠数,也无法生成更多唯一组合——因为父向量的元素是唯一的,所有长度为3的有序子向量中,符合“恒定滑动重叠”规则的最大数量就是10,超出这个数量必然会出现重复的元素组合。
内容的提问来源于stack exchange,提问作者Daniel James
相关产品推荐
相关产品推荐

