给定文本中 search/insert/print/delete 主题标签的哈希表或二叉树?

Hashtable or Binary Tree to search/insert/print/delete hashtags in a given text?

我对这个任务最好的数据结构是什么有一些疑问。 我有多个带有#hashtags 的文本,我想检测该文本的标签并将其插入良好的数据结构中。

小例子:

hey #my #name is blah #my name blah blah

那我有

#my #name #my

#my 2
#name 1

我正在考虑使用哈希表,这样我就可以插入和查找具有 O(1) 的哈希标签。问题是。如果我想打印所有按主题标签重复排序的主题标签(然后按字母顺序打破平局),我必须使用 O(N log N) 来完成。此外,如果我想找到具有最大重复次数的主题标签,我必须使用 O(N) 来完成。

另一方面,我有一个二叉树。我使用 O(log N) 进行插入和查找,这比 HashTable 更糟糕,但我按顺序打印 O(N),并且 O(log N) 找到最大值(O(1) with Binary Heap?) .

哪种数据结构给我最快的解决方案?二叉树因为给我更好的平均复杂度?二进制堆?还有更好的数据结构吗?

but I get O(N) printing in order, and O(log N) findind the max (O(1) with Binary Heap?)

如果您在计算主题标签的重复次数时使用二叉树作为主要数据结构,则需要按相关词的字母顺序对其进行排序,这样不会帮助您打印 "sorted by hashtag repetitions".而且,您可以在填充哈希 table 时简单地计算最大值 - 无需执行其他操作 post 插入。

解决方案:有一个从hashtag到count的hash map。每次增加重复计数时,如果它比您之前看到的任何值都大,请记住 max_count 值。

然后创建一个 max_count(如果您的语言使用基于 0 的索引则为 +1)可变大小数组的数组,并迭代散列 table 将主题标签附加到与其匹配的数组索引中频率计数。然后打印结果,迭代外部频率数组,在每个索引处对主题标签的可变长度数组进行排序,然后打印它们。