You need to enable JavaScript to run this app. 如何实现最早启动滑动窗口完成后的组ID分配?
优惠活动
大模型
产品
解决方案
定价
更多

如何实现最早启动滑动窗口完成后的组ID分配?

按规则生成游程分组的实现方法

该分组逻辑不需要逐元素遍历判断覆盖状态,只需按未覆盖起始位置跳步推进即可,核心逻辑与给定的分配规则完全对齐。

可直接运行的R代码

首先定义示例使用的游程长度向量:

xx <- c(3L, 2L, 1L, 4L, 4L, 3L, 3L, 1L, 2L, 1L, 2L, 3L, 4L, 3L, 2L, 1L)

分组计算代码:

# 初始化结果存储向量、当前未覆盖的起始索引、组号计数器
res <- integer(length(xx))
pos <- 1L
grp <- 0L
vec_len <- length(xx)

while(pos <= vec_len) {
  grp <- grp + 1L
  # 按当前位置的游程值,确定本次窗口的覆盖范围
  window_end <- pos + xx[pos] - 1L
  # 给窗口范围内的所有位置分配当前组号
  res[pos:window_end] <- grp
  # 直接跳转到下一个未覆盖的起始位置,无需逐位判断
  pos <- window_end + 1L
}

运行结果校验

运行上述代码后,输出的结果与预期值完全匹配:

res
# [1] 1 1 1 2 2 2 2 3 4 4 5 5 6 6 6 6

逐段对应分配过程:

  • 从索引1出发,窗口长度3,覆盖1-3位,分配组号1
  • 跳至索引4,窗口长度4,覆盖4-7位,分配组号2
  • 跳至索引8,窗口长度1,覆盖8位,分配组号3
  • 跳至索引9,窗口长度2,覆盖9-10位,分配组号4
  • 跳至索引11,窗口长度2,覆盖11-12位,分配组号5
  • 跳至索引13,窗口长度4,覆盖13-16位,分配组号6

注:该实现不需要额外的标记位记录元素是否被覆盖,通过连续跳步就能保证所有位置被正确分配,计算效率不会随向量长度提升出现额外损耗。

内容的提问来源于stack exchange,提问作者AnilGoyal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 13:45:00