小红正在调试一个智能学习助手。这个系统会先从知识库里召回一批候选示例,再从中挑出若干条最适合展示给用户的结果。
如果系统只按“和当前问题有多相关”来排序,往往会返回许多内容非常接近的示例。为了让结果既相关又有区分度,小红决定使用最大边际相关性(MMR)策略做二次重排。
现在一共有 N 个候选文档。第 i 个文档有一个互不相同的文档编号 ID,还给出了它和当前查询的相关性分数 rel[i]。此外,系统还知道任意两个候选文档之间的相似度 sim[i][j]。
小红会维护一个已经选中的文档集合 S,初始时它为空。随后重复执行 K 轮,每一轮都要在还没被选过的文档里,计算当前的 MMR 分数:
MMR(i) = λ * rel[i] - (1 - λ) * max(sim[i][j]),其中 j 来自集合 S。
如果当前 S 为空,那么上式中的最大相似度部分按 0 处理。
每一轮都选出当前 MMR 分数最高的那个文档加入集合 S,并把它的文档编号按顺序记入答案中。如果有多个文档在这一轮的 MMR 分数完全相同,则选择文档编号较小的那个。
请你输出这 K 轮依次选中的文档编号。
