查找集合中最常见的值的最佳方法是什么?我想使用一次通过算法,假设值来自1,2,3,4,...,m域?
如果我必须写一个算法来做那个,我该怎么做?
答案 0 :(得分:2)
SELECT value, COUNT(*) frequency
FROM table
GROUP BY value
ORDER BY COUNT(*) DESC
答案 1 :(得分:1)
将它们存储在哈希表中,计算每个存储的次数(O(n))。
然后遍历桶(O(n))。
答案 2 :(得分:0)
SELECT value
FROM table
GROUP BY
value
ORDER BY
COUNT(*) desc
LIMIT 1
答案 3 :(得分:0)
根据定义,集合仅包含唯一值。因此,答案应该是集合本身,可以在恒定时间内“计算”。 : - )
严重的是,假设您实际上正在使用堆,列表,向量或其他允许重复的数据结构,可能解决问题的最快方法是Mike Dunlavey的答案,即使用哈希表。还有一些技术可以使用你可以使用的树,它们使用相继更精确的估计。我认为这种方法可能是O(n log n)(不如哈希表解决方案),但如果允许某些统计错误,它可能会低至O(log n)。