P3541.第2题-多查询检索结果评估器
题目内容
在信息检索与推荐系统中,NDCG@k 是衡量模型返回结果相关性的常用指标。
请你实现一个确定性的 NDCG 计算器:对若干条查询 (query) 的检索结果,输出各查询 NDCG@k 的平均值,保留 6 位小数。
DCG@k=∑r=1klog2(r+1)2relr−1
其中 relr 为第 r 名结果的相关等级(非负整数)。

若某查询对应的 labels/scores 长度小于 k ,则按该查询的实际条数进行 DCG 和 IDCG 计算。
输入描述
单行 JSON,包含以下字段:
{
"k": 3, // 评估的截断位置 k (1 ≤ k ≤ 100)
"queries": [
{
"labels": [3, 2, 1, 0], // 实际相关等级 (0-3)
"scores": [0.9, 0.8, 0.7, 0.6] // 系统打分(越大排序越靠前)
},
...
]
}
- labels、scores 长度相等;不会出现空数组
- labels 元素均为整数 ≥0;scores 可为任意实数
- queries 数量 ≥1
输出描述
仅输出一行,表示所有查询 NDCG@k 的平均值,四舍五入保留 6 位小数。
补充说明
- 为确保通过测试用例,仅使用 numpy/pandas/scikit−learn 等标准库
- 多个文档 scores 相同时,默认原始索引升序即可
样例1
输入
{"k":3,"queries":[{"labels":[3,2,1],"scores":[0.9,0.8,0.7]},{"labels":[2,1,0],"scores":[0.9,0.8,0.7]}]}
输出
1.000000