给定一个记录列表,我试图计算每个作者写的记录数。显而易见的方法是使用地图,其中键是作者的名称,值是递增的计数。但有没有更有效的方法来做到这一点,而不是每次迭代都进行查找?
如果我事先了解作者,我可以为每个作者创建变量并在没有查找的情况下递增它们,然后在我读完输入后最终创建地图。但是我只知道数据中的一些作者。
提前致谢。
答案 0 :(得分:2)
您的解决方案基于作者姓名到计数的地图是非常好的(如果您使用HashMap,它的总体平均时间复杂度为O(n)
)。
如果我是你,我会使用这种方法,直到我能证明它不合适(太慢,使用太多内存等),然后才会尝试用解决出现问题的东西替换它。很有可能,那一天永远不会到来。
答案 1 :(得分:0)
使用Java HashMap查找的平均情况将是O(1),这意味着它不会大幅增加您的运行时间。
除非你真的试图从中挤出一切,否则你可能只是过度优化了。
答案 2 :(得分:0)
如果作者数量相对较少,则与记录总数相比,哈希查找将是这种情况下最有效的技术。
如果记录已经排序(或者您有某种btree索引,也是排序结构),则可以使用更多情感算法。
答案 3 :(得分:0)
您可能会发现TObjectIntHashMap比HashMap更有效,但两者都相当有效。您应该能够在几毫秒内扫描100K记录。如果这还不够快,您可以在添加/更新/删除记录时维护计数图,这样您就可以查看它。