Algorithm 可以处理这些查询的算法

Algorithm 可以处理这些查询的算法,algorithm,multiset,Algorithm,Multiset,查询类型1: 询问multiset中第k个不太频繁(不太频繁)的数字。当有多个可能的答案时,返回最大的一个 对于multiset={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: 询问multiset中第k个不太频繁(不太频繁)的数字。当有多个可能的答案时,返回最大的一个

对于multiset={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。在
O(log(n))
中的自平衡搜索树中搜索第k个元素

问题2和3。在
O(1)
中更改哈希表中的频率,然后在
O(log(n))
中更新树中的键操作(或一对删除/插入操作)

O(lgN)
时间中,平衡二元搜索树覆盖情况2和3。不确定查找第k个最小元素的性能。我最关心的是单词集的误用。根据定义,集合不包含重复项(至少,当与本问题剩余部分设置所期望的严格类型一起使用时),我的意思是多集合,谢谢。是的,当然,但这不是一个数据结构,这是OP想要的IMHO。如果我错了,那么瞧@gsamaras,实际上他需要两个索引:一个是频率的有序索引,一个是值的无序索引。我假设所有的多索引数据结构都由几个不太复杂的数据结构组成,看起来没有这样的数据结构。这将完成我的工作后,小修改。