【发布时间】:2022-01-24 04:27:08
【问题描述】:
我想根据不同的参数找到一个人的排名,每个参数都有不同的权重。
例如假设如果有 a、b 和 c 三个项目,这些项目的值可以在 0 到 10,00,000 之间。分配给它们的权重 a = 0.3,b=0.2,c=0.1。假设有 10,000 人拥有这些不同数量的物品。假设一个人 X 有物品 a=2200, b = 4000, c= 1280。那么我怎么能找到人 x 在他所在的 10,000 人中的排名。
如果需要更多详细信息,请告诉我。
感谢您的即时帮助。
【问题讨论】:
-
你最终还是需要所有的行列吗?还是只需要少数人的排名?
-
@TomerW 我需要算法才能找到任何人的排名。
-
如果你最终需要所有等级,只需循环它们并计算 People.Foreach(p: R = AwA+BwB+C*wC)
-
@TomerW 是对的,但是人数可以扩展到任何数字,因此循环它们会降低性能,所以我想如何找到随机选择的人的排名。
-
首先,计算所有人的权重值,并将其存储在一个数组中。然后对数组进行排序。现在你有一个根据体重排序的人的排名列表。现在对于每个随机查询计算人的权重,然后使用二进制搜索从排序数组中找到权重的上限位置,上限位置是该人的排名。这里预处理需要
O(n)次,每个查询需要O(logN)次。
标签: algorithm performance sorting ranking weighted