查找列表中项目等级的最有效方法是什么?

时间:2016-03-22 20:58:54

标签: algorithm sorting ranking

我有一张带有 k 列和 i 项目的表格,其中100> k > 20和20000> i > 10000

我需要按每个项目的每一列获取 rank ,然后处理该值,通过朴素算法表示按列排序并查找已排序列表中的项目。

函数 rank 返回有序列表中项目的位置。

到目前为止它看起来像: 排序 n * log(n) k -times => K *(N *的log(n))
查找 n ^ 2 k -times => K *(N ^ 2)

那只是一个等级()。

这对我正在构建的应用程序来说真的是不可接受的,所以我需要更好地了解如何计算或估计排名。

2 个答案:

答案 0 :(得分:0)

您可以为每列生成索引0到i-1的数组,然后根据列中的项目对索引进行排序。然后使用以下命令将排序后的索引转换为等级:

    for (j = 0; j < i; j++)
        rank[sorted_index[j]] = j;

您可能想要创建排名矩阵。

答案 1 :(得分:-1)

首先,查看排序列表中的元素是log(n)。如果你寻找一个超过O(n)复杂度的项目,那就有问题了。

其次,您可以将元素x映射到一对(x,initialIndexBeforeSorting)。因此,在对列表进行排序后,您可以进入O(1)您的“反向查找”(您浏览已排序的列,对于每个项目x,找回它的位置并更新他的排名)。 O(n logn + n)代替O(n logn + n logn)。