【发布时间】:2011-09-02 19:16:24
【问题描述】:
我了解树通常如何用于修改持久数据结构(创建一个新节点并替换它的所有祖先)。
但是,如果我有一棵由 10,000 个节点组成的树并且我需要修改其中的 1000 个呢?我不想经历并创建 1000 个新根,我只需要一次修改所有内容所产生的一个新根。
例如: 让我们以一个持久二叉树为例。在单个更新节点的情况下,它会进行搜索,直到找到该节点,然后使用修改和旧子节点创建一个新节点,然后创建直到根的新祖先。
在批量更新的情况下,我们可以这样做: 您将一次更新其上的 1000 个节点,而不是仅更新单个节点。
在根节点,当前列表是完整列表。然后将该列表拆分为与左侧节点匹配的列表和与右侧节点匹配的列表。如果没有匹配的孩子之一,不要下降到它。然后下降到左侧节点(假设有匹配项),在其子节点之间拆分其搜索列表,然后继续。当您有一个节点和一个匹配项时,您可以更新它并返回,根据需要替换和更新祖先和其他分支。
即使修改了任意数量的节点,这也只会产生一个新的根。
【问题讨论】:
标签: data-structures immutability