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

带约束的多列表组合按稀有度梯度分布筛选算法咨询

解决方案

核心思路是通过权重规则给所有组合打分,按分数优先级筛选或采样,天然满足「数值越小的元素出现频次越低」的稀有度分层要求。

具体实现步骤

  • 步骤1:设计权重计算规则
    要实现数值越大优先级越高,直接将组合的总权重设为三个维度元素的加权和即可,默认权重系数都为1,需要调整某个维度的影响时修改对应系数就行。
    以你举的2元素小例子验证:组合(2,2,2)总权重为2+2+2=6,(1,2,2)和(2,2,1)总权重都是5,正好匹配你手动筛选的优先级顺序。
  • 步骤2:选择筛选方案
    两种方案可以根据需求选:
    1. 硬取高权重组合:适合需要严格保证大数值元素优先出现的场景
    2. 带权重随机采样:适合需要更平滑的线性频次梯度、小数值元素也有少量出现的场景

Python 实现代码

from itertools import product
import random
from collections import Counter

# 生成所有唯一组合,输入列表无重复元素时可以去掉set
A = [1,2,3,4,5]
B = [1,2,3,4,5]
C = [1,2,3,4,5]
all_combs = list(set(product(A,B,C)))

# 自定义权重计算函数,可调整各维度的权重系数
def calc_weight(comb):
    a, b, c = comb
    weight_a, weight_b, weight_c = 1, 1, 1
    return a * weight_a + b * weight_b + c * weight_c

# 方案1:硬取权重最高的前N个
N = 50
all_combs_sorted = sorted(all_combs, key=lambda x: calc_weight(x), reverse=True)
selected = all_combs_sorted[:N]

# 方案2:带权重采样,分布更平滑
# weights = [calc_weight(comb) for comb in all_combs]
# selected = set()
# # 采样直到凑够N个不重复的组合
# while len(selected) < N:
#     selected.add(random.choices(all_combs, weights=weights, k=1)[0])
# selected = list(selected)

# 验证各维度频次梯度
a_counts = Counter(comb[0] for comb in selected)
b_counts = Counter(comb[1] for comb in selected)
c_counts = Counter(comb[2] for comb in selected)
print("A维度频次:", sorted(a_counts.items()))
print("B维度频次:", sorted(b_counts.items()))
print("C维度频次:", sorted(c_counts.items()))

方案优势

  • 计算效率高,权重计算为O(1)单组合,排序/采样的时间复杂度适配百万级组合场景,完全支持大数据量筛选
  • 灵活度高,修改权重函数即可调整梯度陡峭程度、各维度的重要性
  • 完全匹配需求,小体量场景下的筛选结果和你手动选择的逻辑完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 14:39:03