在集合中查找重复值的最佳方法

时间:2009-04-28 17:01:30

标签: algorithm language-agnostic

查找集合中最常见的值的最佳方法是什么?我想使用一次通过算法,假设值来自1,2,3,4,...,m域?

如果我必须写一个算法来做那个,我该怎么做?

4 个答案:

答案 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)。