我需要跟踪文本中单词的出现,并且这种情况需要按降序排列。我最初使用哈希映射数据结构,但是当我进一步研究时,我发现了“Trie”数据结构。
我认为“Trie”数据结构非常适合在灵活性和复杂性方面跟踪事件。但是还有一个要求,我需要按降序对事件进行排序。所以基本上首先遍历“Trie”深度搜索。
实施明智这有点棘手,所以我想知道我是否走在正确的轨道上。 任何形式的意见都会很棒。在这种情况下,最好的数据结构是什么?
注意:排序顺序在出现时下降,因此如果“A”出现5次而“B”出现2次,则排序顺序应为“A”,“B”。同样出现的两个单词将按字母顺序排序。
由于
答案 0 :(得分:1)
如果字的前缀是可重复的,特里树将是最节省内存的解决方案,遗憾的是仍然是O(N)悲观。您需要使用附加信息(单词计数器)来丰富标准的trie-tree类。
如果您正在寻找悲观的最佳解决方案,那么multimap是一个更好的解决方案:
O(1)插入时间(如果您的字母有很多字母,则不在树中)
O(N)内存和运行时间
但是,您需要对同一事件计数桶中的单词进行排序,如果有多个具有相同出现次数的单词,则排序成为主导操作,并且trie-tree方法与多图方法相同。
答案 1 :(得分:1)
trie
的主要属性是合并传入数据以节省空间,因此如果要使用任何数据单元的属性,则无法从{{1}中受益内置属性。因此,您可以考虑是否要节省空间,使用trie
,但要获得最常用的单词,不知何故,您需要使用其他算法(例如,一旦收集了数据就遍历trie
并且准备另一张桌子)。
我的想法可能是trie
,因为关键字可能是一个可能的候选人
答案 2 :(得分:0)
您可以使用三元组,但插入时间很长,但是当您只对前5个最常出现的单词感兴趣时,可以跳过排序算法。