[英]Java - Most suitable data structure for finding the most frequent element
我的程序包含输出文本(字符串)的算法。 最终,我想打印出出现次数最多的单词。 但是在执行此操作之前,我需要将其存储在数据结构中。 所以我想知道哪种数据结构是最好的(简单而有效的)存储字符串,然后能够获得最频繁的元素? 我不想使用任何库。 谢谢
我不认为任何数据结构都能做到这一点,但是我将按照以下方式进行操作。
保持每个单词的Map<String, Integer>
到遇到该单词的次数,并在更新地图时跟踪与存储的最大数字相对应的字符串。 例如:
String maxWord = null;
Integer maxCount = -1;
Map<String, Integer> wordCount = new HashMap<String, Integer>();
for (String str : getMyProgramOutput()) {
if (!wordCount.containsKey(str)) { wordCount.put(str, 0); }
int count = wordCount.get(str) + 1;
if (count > maxCount) {
maxWord = str;
maxCount = count;
}
wordCount.put(str, count);
}
创建一个Map<String, Integer>
。 每次您输入String
增量时,都会使用Integer
(您可能必须创建自己的MutableInteger
类。完成搜索后(或保持运行计数))
为什么不建立一个最大堆,每个节点中都有String
和integer_occurrence
? 要获得最常用的单词,请获取堆的根
您可能要考虑在数据库中使用字典。 因为通常必须将此类数据保留在物理介质中,以防止系统重新启动后丢失。 在这种情况下,字典是有帮助的。 您只需要做的就是建立字典表和其他表来存储频率和位置等信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.