【发布时间】:2016-03-22 20:58:54
【问题描述】:
我有一个包含 k 列和 i 项的表格,其中 100 > k > 20 和 20000 > i em> > 10000.
我需要按每个项目的每一列获取 rank,然后处理该值,这在朴素算法中意味着按列排序并在排序列表中查找项目。
函数rank返回项目在有序列表中的位置。
到目前为止,它看起来像:
排序 n*log(n) k-次 => k*(n*log(n))
查找 n^2 k-times => k*(n^2)
这只是一个rank()。
这对于我正在构建的应用程序来说确实是不可接受的,所以我需要更好地了解如何计算或近似排名。
【问题讨论】:
-
对于每一行,您将计算几个等级(每列一个),您打算如何对项目进行排序?
-
你不能以最佳排序方式存储数据,即插入到排序集合中,然后你就只有查找成本。
-
如果表或多或少是静态的,您可以使用某种索引,就像 DBMS 所做的那样,即按每列预先计算和存储排序顺序。
-
其实在排序列表中查找应该是logn
-
我看到的第一个优化 - 一旦您对列表进行排序,您就可以为每个项目分配排名,无需任何查找,所以它只有 N