【发布时间】:2014-04-24 06:13:11
【问题描述】:
首先让我说这不是一个家庭作业问题。我正在尝试设计一个缓存,其驱逐策略取决于缓存中出现最多的条目。用软件术语来说,假设我们有一个包含不同元素的数组,我们只想找到出现次数最多的元素。例如:{1,2,2,5,7,3,2,3} 应该返回 2。由于我正在使用硬件,因此简单的 O(n^2) 解决方案将需要巨大的硬件开销。使用哈希表的更聪明的解决方案适用于软件,因为哈希表的大小可以改变,但在硬件中,我将有一个固定大小的哈希表,可能不会那么大,所以冲突会导致错误的决定。我的问题是,在软件中,我们可以在 O(n) 时间复杂度和 O(1) 空间中解决上述问题吗?
【问题讨论】:
-
你对可以出现的元素有最大限制吗?
-
@Aniket 它很大,因为它是物理地址的一部分,大约 20 位
-
数组中元素的最大数量是否有限制?
-
@NikunjBanka 是的,限制是缓存大小。它很大但有限
-
是否允许对数组进行变异 - 例如对其进行排序?另外,既然它是一个缓存,那么不精确的启发式方法是否可行?