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

如何实现向量随机重排且相同元素连续出现次数最多不超过2次

实现思路
  • 拒绝采样方案:直接对原始向量做全随机重排,校验结果是否符合连续重复次数约束,不符合就重新生成,直到拿到合规结果。实现逻辑极简,你当前10个1、10个2的场景下,生成无效排列的概率很低,性能完全够用。
  • 增量构造方案:逐位生成结果,每次从剩余未使用的元素中随机挑选,校验该元素和当前结果末尾的连续重复次数是否超过阈值,符合要求就放入结果、扣除对应元素的剩余计数,否则重新挑选。适合元素种类多、计数差距大的场景,不会生成无效全排列浪费算力。
Matlab 实现代码(拒绝采样版,适配你的场景)
% 初始化参数
vec = [ones(1,10), 2 * ones(1,10)];
atmost = 2;

while true
    % 生成随机排列
    rand_vec = vec(randperm(length(vec)));
    % 计算当前排列的最大连续重复次数
    diff_val = diff(rand_vec);
    % 统计连续相同元素的最大长度
    run_len = max(accumarray(cumsum([1, diff_val ~= 0])', 1));
    if run_len <= atmost
        vec = rand_vec;
        break;
    end
end

% 输出验证
disp(vec)
注意事项

使用前请先确认约束存在可行解,否则代码会进入死循环。解的判定规则为:数量最多的一类元素的总个数,不超过 (数量最少的一类元素总个数 + 1) * 最大允许连续次数,你当前的场景两类元素数量均为10,阈值为2,完全符合解的要求,可放心使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:15:03