我不知道问这个问题的正确术语,所以我会用很多单词来描述它,请耐心等待。
背景,正好在同一页上:程序通常包含缓存-时间/内存的权衡。程序员的一个常见错误是在更改其上游源/先例之一后忘记更新缓存的值。但是数据流或FRP编程范例可以避免此类错误。如果我们有许多纯函数,并在有向依存关系图中将它们连接在一起,则节点可以缓存并重用其输出值,直到任何函数的输入发生变化。该系统体系结构在《基于数据流的环境中的缓存》一文中进行了描述,并且使用命令式语言或多或少地类似于记忆。
问题:当函数的输入之一确实发生变化时,我们仍然必须整体执行该函数,丢弃其缓存的输出并从头开始重新计算。在许多情况下,这对我来说似乎是浪费。考虑一个简单的示例,该示例生成一个“前5名”列表。输入数据是任何内容的未排序列表。它作为输入传递给输出排序列表的函数。依次输入到仅接受前5个项目的功能。用伪代码:
input = [5, 20, 7, 2, 4, 9, 6, 13, 1, 45]
intermediate = sort(input)
final_output = substring(intermediate, 0, 5)
排序函数的复杂度为O(N log N)。但是请考虑在应用程序中使用此流程,在该应用程序中,输入仅通过添加1个元素而仅稍有变化。与其每次都从头开始重新排序,不如使用O(N)函数,它通过在正确位置插入新元素来更新旧的缓存排序列表,将更快。这只是一个示例-许多“从头开始”功能都具有这种“增量更新”功能。另外,也许新添加的元素甚至不会出现在final_output中,因为它位于第5位之后。
我的直觉表明,有可能以某种方式将这样的“增量更新”功能与现有的“从头开始”功能并排添加到数据流系统中。当然,从头开始重新计算所有内容必须始终具有与进行一系列增量更新相同的结果。系统应具有这样的特性:如果每个单独的原始FromScratch增量对总是给出相同的结果,然后由他们建造的大型复合功能也应该会自动给出相同的结果。
问题:是否可能有一个系统/体系结构/范式/元算法既可以支持FromScratch函数也可以支持它们的增量对等函数,并为提高效率而合作并组成大量流程?如果没有,为什么?如果有人已经研究了该范式并发布了它,那么它被称为什么,我能否简要了解它的工作原理?