【发布时间】:2018-09-10 06:14:42
【问题描述】:
在书中找到k个最常用的单词(单词可以动态添加)的常见问题通常使用trie和heap的组合来解决。
但是,我认为即使使用 TreeSet 也应该足够了,并且在插入和检索的 log(n) 性能方面更简洁。
树集将包含一个自定义对象:
class MyObj implements Comparable{
String value;
int count;
public int incrementCount(){count++;}
//override equals and hashcode to make this object unique by string 'value'
//override compareTo to compare count
}
每当我们在树集中插入对象时,我们首先检查该元素是否已经存在于树集中,如果是,则我们获取 obj 并增加该对象的计数变量。
每当我们想要找到最大的 k 个单词时,我们只需遍历树集的前 k 个元素
您对上述方法有何看法?我觉得这种方法更容易编码和理解,并且与 trie 和 heap 方法的时间复杂度相匹配,以获得 k 个最大元素
编辑:如答案之一所述,插入 myobj 后递增计数变量不会重新排序树集/树图。因此,在增加计数后,我还需要删除并重新插入树集/树图中的对象
【问题讨论】:
标签: java data-structures time-complexity trie treeset