【问题标题】:Counting items in a list of records efficiently有效地计算记录列表中的项目
【发布时间】:2011-10-07 22:18:07
【问题描述】:

给定一个记录列表,我试图计算每个作者写了多少条记录。显而易见的方法是使用地图,键是作者的姓名,值是递增的计数。但是有没有更有效的方法来做到这一点,而无需每次迭代都进行查找?

如果我事先知道作者,我可以为每个作者创建变量并在不查找的情况下递增它们,然后在完成读取输入后最终创建地图。但是我只知道数据中的几个作者。

提前致谢。

【问题讨论】:

    标签: java collections hash map


    【解决方案1】:

    您基于作者姓名与计数的映射的解决方案非常好(如果您使用 HashMap,它的总体平均时间复杂度为O(n))。

    如果我是你,我会使用这种方法,直到我可以证明它不合适(太慢、使用太多内存等),然后我才会尝试用可以解决出现问题的方法替换它。那一天很可能永远不会到来。

    【讨论】:

      【解决方案2】:

      使用 Java HashMap 进行查找的平均情况是 O(1),这意味着它不会显着增加您的运行时间。

      除非您真的试图从中挤出一切,否则您可能只是过度优化。

      【讨论】:

        【解决方案3】:

        如果作者的数量相对于记录的总数较少,哈希查找将是这种情况下最有效的技术。

        如果记录已经排序(或者你有某种 btree 索引,它也是排序结构),则可以使用更有效的算法。

        【讨论】:

          【解决方案4】:

          您可能会发现 TObjectIntHashMap 比 HashMap 更有效,但两者都相当有效。您应该能够在几毫秒内扫描 10 万条记录。如果这还不够快,您可以在添加/更新/删除记录时维护一个计数图,以便您只需查找即可。

          【讨论】:

            猜你喜欢
            • 2019-02-11
            • 2019-12-04
            • 1970-01-01
            • 1970-01-01
            • 2016-03-03
            • 2020-05-04
            • 2011-11-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多