一种可以处理这些查询的算法

时间:2018-01-26 08:04:48

标签: algorithm multiset

查询类型1 : 在multiset中询问第k个频率较低(发生较少)的数字。如果有多个可能的答案,请返回最大答案。

对于multiset = {1,2,2,2,3,3}和k = 3,答案是2。

freq(1)= 1,freq(3)= 2,freq(2)= 3;所以第3次不太频繁就是2。

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

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

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

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

1 个答案:

答案 0 :(得分:2)

首先,我们可以使用哈希表并存储每个数字的频率。然后我们需要一个自平衡搜索树,其中包含一对(frequency(number), number)形式的密钥。

查询1.在O(log(n))中的自平衡搜索树中搜索第k个元素 查询2和3.更改O(1)中哈希表中的频率,然后更改O(log(n))中树(或一对删除/插入操作)中的更新键操作。