排序Trie数据结构

时间:2013-11-04 15:45:18

标签: algorithm data-structures trie word-count

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

我认为“Trie”数据结构非常适合在灵活性和复杂性方面跟踪事件。但是还有一个要求,我需要按降序对事件进行排序。所以基本上首先遍历“Trie”深度搜索。

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

注意:排序顺序在出现时下降,因此如果“A”出现5次而“B”出现2次,则排序顺序应为“A”,“B”。同样出现的两个单词将按字母顺序排序。

由于

3 个答案:

答案 0 :(得分:1)

如果字的前缀是可重复的特里树将是最节省内存的解决方案,遗憾的是仍然是O(N)悲观。您需要使用附加信息(单词计数器)来丰富标准的trie-tree类。

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

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

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

但是,您需要对同一事件计数桶中的单词进行排序,如果有多个具有相同出现次数的单词,则排序成为主导操作,并且trie-tree方法与多图方法相同。

答案 1 :(得分:1)

trie的主要属性是合并传入数据以节省空间,因此如果要使用任何数据单元的属性,则无法从{{1}中受益内置属性。因此,您可以考虑是否要节省空间,使用trie,但要获得最常用的单词,不知何故,您需要使用其他算法(例如,一旦收集了数据就遍历trie并且准备另一张桌子)。

我的想法可能是trie,因为关键字可能是一个可能的候选人

答案 2 :(得分:0)

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