【问题标题】:Using a hashmap instead of a table for memoization使用 hashmap 而不是 table 进行记忆
【发布时间】:2018-01-05 21:24:05
【问题描述】:

在一些动态编程问题中,我注意到我的缓存表非常稀疏。换句话说,如果我将一个表定义为DP[i][j], i<=10^6, j<=10^2,则只使用了该表的一小部分,其余部分为-1

所以我的问题是,通常的做法是使用 hashmap 来存储 (i, j) 对及其 DP 值并在平均 O(1) 时间内访问它们,而不是将它们存储在稀疏表中以节省内存?

【问题讨论】:

  • 是的,这是一种常见的做法。

标签: recursion dynamic-programming backtracking


【解决方案1】:

首先,是的,您可以使用 hashmap 代替数组来解决动态编程问题。但是使用哈希图有一些限制和好处。

当您为这种特殊情况(动态编程)使用哈希图时,它会降低内存复杂性,但同时会增加代码的常数因子。这意味着如果您可以在数组的帮助下执行 10^{8} 次操作/秒,那么在使用 hashmap 时您将能够执行大约 10^{7} 次操作/秒,因为它的常数因子尽管具有相同的复杂性算法。

因此,如果可以声明这么多大小的数组,请使用数组,否则使用哈希图。

【讨论】:

    【解决方案2】:

    是的,使用 hashmap 绝对是一种常见的做法。特别是在稀疏的情况下。

    甚至有可能超越这一点...对于更大的问题,近似动态规划借鉴了函数逼近等工具。

    【讨论】:

      猜你喜欢
      • 2016-02-11
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      相关资源
      最近更新 更多