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

生成无重复配对的随机多轮参与者配对方案(非循环赛制)

非循环赛制的无重复随机配对方案(伪代码)

核心逻辑

针对偶数名参与者,生成n轮无重复配对的核心思路是:通过随机打乱参与者顺序避开循环赛的固定轮转模式,同时用集合记录已使用的配对组合,确保每一轮的配对都是全新的,且所有参与者在每轮都能两两配对。

伪代码实现

// 初始化:参与者列表(确保长度为偶数)
participants = [p1, p2, p3, ..., pm]  // m为偶数
used_pairs = set()  // 存储已出现过的配对(无序组合,如(a,b)和(b,a)视为同一组)
max_possible_rounds = (m - 1)  // 最大可生成轮数:每个参与者最多和其他m-1人配对一次
target_rounds = n  // 需满足 target_rounds ≤ max_possible_rounds

// 生成target_rounds轮配对
for round_num from 1 to target_rounds:
    // 随机打乱参与者顺序,避免循环赛固定模式
    shuffled_participants = 拷贝并随机打乱participants
    current_round_pairs = []
    temp_used = set()  // 临时记录本轮已选配对,防止本轮内重复
    
    // 逐个完成本轮配对
    while len(shuffled_participants) > 0:
        first_person = shuffled_participants.pop()
        // 从剩余参与者中找到未与first_person配对过的对象
        for index from 0 to len(shuffled_participants)-1:
            second_person = shuffled_participants[index]
            // 生成有序配对,统一存储格式避免重复计数
            normalized_pair = tuple(sorted([first_person, second_person]))
            
            if normalized_pair not in used_pairs and normalized_pair not in temp_used:
                current_round_pairs.append(normalized_pair)
                temp_used.add(normalized_pair)
                shuffled_participants.pop(index)
                break
    
    // 将本轮配对加入全局已使用集合
    used_pairs.update(temp_used)
    // 输出本轮结果
    print(f"第 {round_num} 轮配对: {current_round_pairs}")

关键说明

  • 随机化处理:每轮先打乱参与者顺序,彻底避开循环赛的固定轮转逻辑,满足“看似随机”的要求
  • 配对去重:用有序元组存储配对,确保(a,b)和(b,a)被判定为同一组合,不会重复使用
  • 轮数限制:最多生成m-1轮(m为参与者数量),因为每个参与者最多能和其他m-1人各配对一次

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:00:52