algorithm - 可以处理这些查询的算法

标签 algorithm multiset

查询类型 1: 询问多重集中第 k 个频率较低(出现次数较少)的数字。当有多个可能的答案时,返回最大的一个。

对于多重集 = {1, 2, 2, 2, 3, 3} 且 k = 3,答案为 2。

频率(1) = 1,频率(3) = 2,频率(2) = 3;所以第三个较低的频率是 2。

查询类型 2: 将整数 x 添加到多重集。

查询类型 3: 从多重集中删除整数 x。

查询类型 1 是最常见的查询。

我需要一种能够处理这些查询的算法,其复杂度优于或等于每个查询的 O(sqrt N),其中 N 是多重集的当前大小。

最佳答案

首先,我们可以使用一个哈希表来存储每个数字的频率。然后我们需要一个自平衡搜索树,其键的形式为一对(频率(数字),数字)

查询 1. 在自平衡搜索树中搜索第 k 个元素,时间复杂度为 O(log(n))
查询 2 和 3。在 O(1) 中更改哈希表中的频率,然后在 O(log( n)).

关于algorithm - 可以处理这些查询的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48457625/

相关文章:

java - 使用堆栈获取逻辑子表达式

sql - 在带有嵌套表列 sql oracle 的表中查找不相交的集合

c# - .Net 是否有任何 multiset 的实现?

python - 计算单词列表中的字母频率,不包括同一个单词中的重复项

c# - 在 C# 中,在算法中使用递归函数是一种好习惯吗?

algorithm - 彼此不是上限的 f(n) 和 g(n)

java - 需要帮助逆向工程算法

list - 当不需要保留顺序时,可以编码为更少的位吗?

algorithm - 是否有一种算法可以生成多重集的所有唯一循环排列?

c++ - 需要帮助来修复我的代码以执行特定的逻辑