我有一张带有 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)
那只是一个等级()。
这对我正在构建的应用程序来说真的是不可接受的,所以我需要更好地了解如何计算或估计排名。
答案 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)。