在不同的运行中保持对象状态

时间:2016-04-19 13:48:26

标签: c++ serialization

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

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

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

在下一次执行同一个程序时,由于f已包含um,因此(t,r)已包含r,因此执行um的代价非常高,因此值 self.presentViewController(UIViewController, animated: Bool) 归还。

所有这一切的问题在于如何记住" viewDidAppear:处于不同的执行状态。

重要: 显然,这是一个让您了解此框架的可能应用的示例,但任何memoization应用程序也必须正常工作。

Write a c++ object to file是此问题/方案的唯一解决方案,还是还有另一个解决方案?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

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

无论您存储备忘录的位置如何:

如果这真的是为了字数而忘记了memoization:您需要阅读整个文本以查明它是否与之前的文本相同。然后,你可以随时计算这些单词。

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