排序的 Trie 数据结构



我需要跟踪文本中单词的出现,并且需要按降序排列。我最初使用哈希图数据结构,但是当我进一步研究时,我发现了"Trie"数据结构。

我认为"Trie"数据结构非常适合在灵活性和复杂性方面跟踪事件的发生。但是还有一个要求,我需要按降序对出现进行排序。所以基本上是深入搜索"Trie"。

实施方面,这有点棘手,所以我想知道我是否在正确的轨道上。任何一种意见都会很棒。在这种情况下,最好的数据结构是什么?

注意:排序顺序是按出现次数递减的,因此如果"A"出现 5 次,"B"出现 2 次,排序顺序应为"A"、"B"。此外,两个出现次数相同的单词将按字母顺序排序。

谢谢

如果单词的前缀是可重复的,trie 树将是内存效率最高的解决方案,不幸的是,悲观地仍然是 O(N)。您需要使用其他信息 - 单词计数器来丰富标准的 trie-tree 类。

如果您正在寻找悲观的最佳解决方案,multimap 是更好的解决方案:

  • O(1) 插入时间(如果你有很多字母的字母表,则不在 trie 树中)

  • O(N) 内存和运行时间

尽管如此,您仍然需要对同一出现次数存储桶中的单词进行排序,如果有许多单词具有相同的出现次数,则排序将成为主导操作,并且三树方法与多映射方法相同。

trie的主要属性是合并传入的数据以节省空间,因此,如果要使用任何数据单元单独的任何属性,则无法从内置属性trie中受益。因此,您可以考虑是否要节省空间,请使用 trie ,但要获得最常用的单词,您需要以某种方式使用其他算法(例如在收集数据后遍历trie并准备另一个表)。

我的想法可能与单词的频率priority queue,因为键可能是一个可能的候选者

您可以使用三元 trie,但插入时间很昂贵,但当您只对前 5 个最常出现的单词感兴趣时,您可以跳过排序算法。

最新更新