我有一些疑问,这项任务的最佳数据结构是什么。 我有#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)二进制堆?)。 p>
哪种数据结构能为我提供最快的解决方案? Binary Tree是否会给我一个更好的平均复杂度?二进制堆?有更好的数据结构吗?
答案 0 :(得分:0)
但按顺序打印O(N),O(log N)找到最大值(O(1)二进制堆?)
如果在计算主题标签的重复时使用二叉树作为主数据结构,则需要按相关字词的字母顺序对其进行排序,这样就无法帮助您打印“按标签重复排序” 。并且,您可以在填充哈希表时轻松计算最大值 - 插入后无需再执行其他操作。
解决方案:从哈希标签中获取哈希映射以进行计数。每次增加重复次数时,如果它比你之前看到的要大,那么请记住max_count值。
然后创建一个max_count数组(如果您的语言使用基于0的索引,则为+1)可变大小的数组,并迭代哈希表,将哈希标记附加到与其频率计数匹配的数组索引中。然后打印结果,迭代外部频率数组,在每个索引处对可变长度的主题标签数组进行排序,然后打印它们。