【问题标题】:Keep an object state in different runs在不同的运行中保持对象状态
【发布时间】:2016-04-19 13:48:25
【问题描述】:

thisthis 的帖子中,我描述了我想要开发的框架。

我想实现一个memoization 策略来加速一些函数的执行。

这个框架的一个重要特性应该是“记住”过去运行的计算值:假设我们编写一个程序,在其中执行字数统计函数f,输入为大文本t。在我们计算出r=f(t)(其中r 是结果)之后,我们遵循记忆逻辑,所以我们将(t,r) 存储在某个地方,假设是一个unordered_map 对象um。此后,程序终止。

在下一次执行同一程序时,不需要执行昂贵的f,因为um 已经包含(t,r),所以返回值r

所有这一切的问题是如何在不同的执行中“记住”um 状态。

重要提示: 显然,这是一个让您了解该框架可能应用的示例,但任何记忆应用程序都必须能够正常工作。

Write a c++ object to file 是这个问题/场景的唯一解决方案,还是有其他解决方案?

【问题讨论】:

  • 使用文件系统保存信息并在以后运行时读入。
  • 您能否更好地解释您的解决方案?考虑 IMPORTANT 部分,不要过分关注提供的示例(报告只是为了理解这种记忆)。
  • 好吧,您将不得不将数据存储在某个地方。您可以使用数据库、文件、某种云存储或其他东西,但数据必须永久存储在某个地方。

标签: c++ serialization


【解决方案1】:

数据必须存储在进程之外的某个地方,以便在进程终止后保留它。文件系统显然是存储数据的地方,但它也可以由另一个进程存储,例如数据库管理系统或外部缓存(例如https://memcached.org/)。

大多数后端选项将数据存储为字符流。您需要了解如何(de)serialize 数据。

【讨论】:

    【解决方案2】:

    旁注:你能保持程序运行吗?那么你就不需要将备忘录存储在磁盘上。

    无论您将备忘录存储在何处:

    如果这真的是为了字数统计,那么忘记记忆:你需要阅读整个文本来确定它是否与之前的文本相同。然后你就可以随便数单词了。

    如果不是字数统计,这只是一些更复杂计算的示例:您可以存储hash -> computed-value 备忘录,而不是存储text -> computed-value 备忘录。您可以根据自己的情况选择哈希:如果您需要确定它是相同的文本,请使用例如沙-1。如果您需要一个非常便宜的“哈希”(例如,当存储的计算值仅用作初始猜测时,无论如何都会得到改进),那么您可以只使用文本字符串中的字节数作为“哈希”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多