【发布时间】:2018-05-13 02:10:00
【问题描述】:
我在 PostgreSQL 中有一个巨大的表,我需要获取前 K 个元素。
有没有办法在 O(N logK) 中选择前 K 个条目?
最明显的例子:
SELECT *
FROM table
ORDER BY col
LIMIT k
会给我们类似的 O(N logN) 解决方案
sorted(arr)[:k] # in python
有没有使用堆的 SQL 方法?
就像这个例子:
from heapq import nsmallest
nsmallest(k, arr)
使用最小堆的 O(N logK) 是多少?
【问题讨论】:
-
我不知道在 PostgreSQL 中表达这一点的方法。但是,如果您事先在 col 上创建一个 INDEX,那么您将基本上免费获得 ORDER BY,运行时间仅为 O(k)。当然,这只有在您有大量包含 col 的相同形式的查询时才有意义。
-
问题是存在浮动列,我们可以添加任意数量的行(我们可以添加值低于或高于当前最小/最大元素的行)
-
对不起,我不明白。您可以在具有浮点(数字)值的列上创建索引(例如,btree)。当您插入新行时,索引将负责排序(缺点是插入成本略高)。
标签: python algorithm postgresql sorting heap