- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
首先让我声明这不是作业问题。我正在尝试设计一个缓存,其逐出策略取决于缓存中出现次数最多的条目。在软件方面,假设我们有一个包含不同元素的数组,我们只想找到出现次数最多的元素。例如:{1,2,2,5,7,3,2,3} 应该返回 2。由于我使用的是硬件,简单的 O(n^2) 解决方案将需要巨大的硬件开销。使用哈希表的更聪明的解决方案适用于软件,因为哈希表的大小可以改变,但在硬件中,我将有一个固定大小的哈希表,可能不会那么大,所以冲突会导致错误的决定。我的问题是,在软件中,我们能否在O(n) 时间复杂度和O(1) 空间内解决上述问题?
最佳答案
不可能有O(n)
时间,O(1)
空间的解决方案,至少对于一般情况是这样。
作为amit points out ,通过解决这个问题,我们找到了 element distinctness problem 的解决方案(确定列表中的所有元素是否不同)已被证明在不使用元素索引计算机内存时花费 Θ(n log n)
时间。如果我们要使用元素来索引计算机的内存,给定一个无限范围的值,这至少需要 Θ(n)
空间。考虑到将这个问题简化为那个问题,那个问题的界限对这个问题强制执行相同的界限。
但是,实际上,如果除了通常用于存储每个元素的类型具有固定大小(例如 32 位整数)之外没有其他原因,范围将主要是有界的。如果是这种情况,这将允许 O(n)
时间,O(1)
空间解决方案,尽管由于涉及大常数因子(因为时间和空间复杂度将取决于值的范围)。
2个选项:
Keeping an array of the number of occurrences of each element (the array index being the element), outputting the most frequent.
如果您有一个有限范围的值,这种方法将是 O(1)
空间(和 O(n)
时间)。但从技术上讲,哈希表方法也是如此,因此这里的常数因子可能太大而无法接受。
相关选项是radix sort (有一个就地变体,类似于快速排序)和 bucket sort .
Repeatedly partitioning the data based on a selected pivot (through swapping) and recursing on the partitions.
排序后我们可以遍历数组,跟踪连续元素的最大数量。
这将花费 O(n log n)
时间和 O(1)
空间。
关于java - 确定在 O(n) 时间和 O(1) 空间内出现次数最多的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23261128/
你好,我有一张 table : from | to | item | count ------- Jack | Danie| food | 10 Danie| Maria| food | 2 Ja
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎偏离主题,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或 include a mini
我正在尝试解决以下面试问题 Given two arrays firstDay and lastDay representing the intervals in days of possible m
这个问题已经有答案了: Explanation of a output of a C program involving fork() (2 个回答) 已关闭 9 年前。 这是我从我的研究所去年的试卷
如何在 html 页面上重复一个 div X 次,可以说我想设置方差来声明重复次数。重复这个部分 5 次,我假设它是用 JS 的。 black BLUE WHITE strip 我
我目前使用类中的函数将数据插入数据库,如果每行成功插入(从 csv 文件),则会记录一条消息(logMessage 函数),以显示哪一行成功或失败。但是我想要已导入数据库的成功执行的计数。我遇到了一些
这个问题可能看起来非常基础,但我很难弄清楚如何做。我有一个整数,我需要使用 for 循环来循环整数次。 首先,我尝试了—— fn main() { let number = 10; // An
我正在准备 CS 125 期末考试,其中(简要地)介绍了 Big O Notation。 鉴于: Mergesort 的最佳运行时间为 O(N lg(N)),最坏运行时间为 O(N lg (N)) 有
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我正在构建一个简单的程序来计算骰子实验中数字的频率,但我尝试扩展它并将最大 throw 次数增加到巨大的数字,通过反复试验,我发现最大限制为519253。 使用这个最大值,我也无法创建任何新数组,它会
这是一道面试题 There is an airline company that wants to provide new updates to all of its flight attendant
我正在尝试以一种可以节省我无数小时的繁琐数据输入的方式实现 Excel 自动化。这是我的问题。 我们需要为所有库存打印条形码,其中包括 4,000 种型号,每种型号都有特定数量。 Shopify是我们
我想根据给定的预定义级别(从级别 1 到级别 6)分离代码中的所有内容,现在我的 JSON 读取 $scope.myJson=[{ id: 1, level: 1, name: "any
我创建了一个菜单,它使用一些 CSS 和 jquery 在悬停时显示其子菜单。事情是,如果用户在菜单项上多次悬停,它会有点滑稽。这是网址:http://91.202.168.37/~ibi/ ,这是
假设我对每小时的事件数进行了如下统计: np.random.seed(42) idx = pd.date_range('2017-01-01', '2017-01-14', freq='1H') df
我想确保我正确理解了这个概念: 在 Hadoop 权威指南中指出:“设计文件系统的目标始终是减少与要传输的数据量相比的查找次数。”在此声明中,作者指的是 Hadoop 逻辑 block 的“seeks
我有一个用 C++11 编写的程序,我想计算 std::vector 的 move 和复制(构造和赋值)次数。对象。有办法吗? 最好的问候 最佳答案 否。 std::vector<>的执行没有办法做到
我们组织的帐户空间不足,我们一直在尝试剔除一些较旧的存储库。问题在于一些较旧的存储库可能仍然是事件服务的依赖项(即使它们多年未更新)。 我知道我们可以跟踪克隆,但据我所知,我们看不到直接下载/pull
我是一名优秀的程序员,十分优秀!