arrays - 设计一个使用散列并支持比较的数据结构

标签 arrays algorithm sorting data-structures hash

我正在寻求设计支持以下算法的帮助:

initiation(M) Given Set of M unique natural number initialize the data structure in O(f(n)) f is some polynomial function lookUP(x) given a natural number find if x in S in O(1). find Kth(k) return the kth largest number in S in O(1).

当我尝试使用哈希来支持 O(1) 操作时,这个问题对我来说似乎很简单,但后来我想起哈希表不支持元素之间的比较,我知道我可以在 O(n^ 2) 我完成了。

对于 f(n) 是否有更快的解决方案作为多项式 O(f(n)) init?

最佳答案

I know i can sort the array in O(n^2) and i finish.

排序可以在 O(nlogn) 中更快地完成,其中 n 是问题的大小。这种算法的一个例子是 Quicksort .


数据结构可以是一个数组,您可以在其中以 O(nlogn) 的成本对其进行排序。然后你可以在 O(1) 时间内为最大的第 k 个元素建立索引。

但是,为了搜索任何 x,您将不得不使用二分查找,其成本为 O(logn)。

但是您的元素是独一无二的。因此,您可以使用索引数组,例如,如果您的输入是 [1, 2, 3, 5],那么您的 bool 索引数组将是 [1, 1, 1, 0, 1],其中 0 表示该索引中的数字不存在于您的输入中。这样您就可以在 O(1) 时间内查找每个 x。

但是现在找到最大的第k个元素需要到第k个索引,检查那个槽,如果它是空的,然后检查下一个槽,直到找到一个1,这意味着这个槽的编号存在于我们的输入中。这将花费 O(m),其中 m 是到达第 k 个索引后您将遇到的空槽数,平均而言,它应该很小,并且可以假设为常数,产生 O 的时间复杂度(1).

关于arrays - 设计一个使用散列并支持比较的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44409836/

相关文章:

带数组的 Javascript 模块模式

java - 如何设置 Java 数组长度

algorithm - 快速傅立叶变换中数据间隔的影响

mysql - 如何使用自定义 MySQL 函数对第二列进行条件排序?

r - 如何创建抛硬币R的功能

javascript - 无法检查从 json 编码的 php 数组准备的 javascript json 中的对象值

arrays - 如何将 numpy 数组转换为 Zarr 数组

javascript - 在 JavaScript 中对日期字符串数组进行排序的最佳方法

java - 在现有的 HashMap 中添加一个元素

当没有数据类型可以容纳完整数字时,将十六进制转换为十进制