【问题标题】:does caching reduce the running time in java?缓存会减少java中的运行时间吗?
【发布时间】:2018-02-27 17:49:00
【问题描述】:

例如,我现在需要实现的称为提交历史记录。这要求我对每个方法都使用比 O(n) 更好的数据结构,有人告诉我使用

HashMap<studentId, TreeMap<Date, studentScore>>

因为,

getBestGrade 方法:在 O(1) 中找到学生的所有提交,然后在 O(N) 中找到最佳提交(您可以通过缓存最佳分数来改进它)。

所以我的问题是,我将如何为 getBestGrade 使用缓存? 我在想的是,首先为树图创建一个类,并在其中添加 put、remove 和 getBestGrade 方法。比我在另一堂课上叫它回来。

另外,缓存的使用如何降低时间复杂度(big-O)?

请帮忙...谢谢。

【问题讨论】:

  • 通过单独的 Map 将学生 ID 映射到最大分数,您将实现一个原始缓存,需要 O(1) 才能获得学生的最佳提交。
  • 那么,我认为做缓存的方向是正确的吗?
  • 例如,在主类中,假设它被称为Assignment,我声明了maps的map(hash-map包含tree-map),命名为'map'。然后我为树形图创建了一个名为 StudentScore 的子类,然后在其中添加方法(put、remove、GetBestGrade)。最后,在主类中,对于 getBestGrade 方法,我这样写,StudentScoreSet t = map.get(studnetId);返回 t.GetBestGrade();
  • 如果您使用的是树形图,您可以致电lastKey 以获得最高分
  • 执行 lastKey 需要缓存吗?

标签: java caching data-structures big-o


【解决方案1】:

它被称为记忆方法(技术)。在 Java 8 中,有针对此问题的新功能,here 是链接。 这取决于您缓存旧数据的重复操作的频率。当然,您应该管理缓存大小。它可能会为您提供一些优势,但也可能会扼杀您的记忆。 Here 就是一个例子。

顺便说一句,这是存储数据的好方法。使用给定的 studentId 和 Date 键,访问将花费 O(1)。

HashMap<studentId, TreeMap<Date, studentScore>>

【讨论】:

    猜你喜欢
    • 2020-08-11
    • 1970-01-01
    • 2021-10-27
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 2014-07-02
    • 2020-06-13
    相关资源
    最近更新 更多