You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何确定R中由重复小向量生成的大向量的原长度与重复次数?

从重复生成的大向量中还原原小向量的长度和重复次数

核心思路

要找出原小向量的长度,本质是找最小的正整数k:把大向量前k个元素重复若干次后,能完全匹配整个大向量。找到这个k后,重复次数就是大向量总长度除以k的结果。

R语言实现代码

# 定义函数:输入大向量,返回原小向量长度和重复次数
find_small_v_info <- function(big_v) {
  total_len <- length(big_v)
  # 遍历可能的小向量长度,最多到总长度的一半(对应至少重复2次的情况)
  for (k in 1:floor(total_len/2)) {
    # 总长度必须能被k整除,否则无法形成整数次重复
    if (total_len %% k != 0) next
    # 验证前k个元素重复后是否与原大向量完全一致
    if (all(rep(big_v[1:k], total_len/k) == big_v)) {
      return(list(原小向量长度 = k, 重复次数 = total_len/k))
    }
  }
  # 若未找到重复模式,说明大向量本身就是原小向量,仅重复1次
  return(list(原小向量长度 = total_len, 重复次数 = 1))
}

# 测试示例
small_v <- c("as","d2","GI","Worm")
big_v <- rep(small_v, 3)
find_small_v_info(big_v)
# 输出结果:$原小向量长度 [1] 4; $重复次数 [1] 3

逻辑说明

  • 先获取大向量总长度,缩小遍历范围;
  • 跳过无法整除总长度的k值,因为重复次数必然是整数;
  • 从最小的k开始验证,保证找到的是唯一的原小向量(原向量元素唯一,不存在更小的重复单元);
  • 若遍历完所有可能都无匹配,则大向量本身就是原小向量,仅重复1次。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:30:38