找到加权排名的算法?

Algorithm to find weighted ranking?

我想根据不同的参数找出一个人的排名,每个参数分配给它们的权重不同。

例如假设如果有 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。那么我怎么能找到他所在的10,000人中的人x的排名

如果需要更多详细信息,请告诉我。

感谢即时帮助。

首先,计算所有人的加权分数。 即,

P[i] = Wa * a[i] + Wb * b[i] + Wc * c[i];

然后按值对所有 P[i] 进行排序。

您可以定义和使用自定义比较函数来轻松获得排名。

    for (int i = 0; i < n; i++) rank[i] = i;
    sort (rank, rank + n, [P](int i, int j) {
        return P[i] < P[j];
    });

如果是动态插入和获取排名操作,则必须使用order-statistics tree。 然后你可以得到两个操作的O(logn)的性能结果。

详情请参考codeforces and this article