我想实现一个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是此问题/方案的唯一解决方案,还是还有另一个解决方案?
答案 0 :(得分:1)
数据必须存储在进程外的某个位置,以便在进程终止后保留数据。文件系统是存储数据的明显位置,但它也可以由另一个进程存储,例如数据库管理系统或外部缓存(例如https://memcached.org/)。
大多数后端选项将数据存储为字符流。您需要了解如何(de)serialize数据。
答案 1 :(得分:1)
旁注:你能保持程序运行吗?然后你不需要将备忘录存储在磁盘上。
无论您存储备忘录的位置如何:
如果这真的是为了字数而忘记了memoization:您需要阅读整个文本以查明它是否与之前的文本相同。然后,你可以随时计算这些单词。
如果不是单词计数,那只是一些更复杂计算的示例:您可以存储text -> computed-value
个备忘录,而不是存储hash -> computed-value
个备忘录。根据您的情况选择哈希:如果您需要确定它是相同的文本,那么请使用例如SHA-1。如果你需要一个非常便宜的哈希' (例如,当存储的计算值仅用作初始猜测时,无论如何都会改进)然后你可以使用文本字符串中的字节数作为' hash'。