Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 保留旧数据结构的术语重写替换_Algorithm_Data Structures_Tree - Fatal编程技术网

Algorithm 保留旧数据结构的术语重写替换

Algorithm 保留旧数据结构的术语重写替换,algorithm,data-structures,tree,Algorithm,Data Structures,Tree,我有一个问题,你有一个树数据结构的一些符号表达式,然后我需要扩展某些部分的树使用重写规则,以获得最终的扩展数据结构 我可以想出一些方法来做到这一点。第一种方法,只需将旧节点替换为新的扩展节点。但这里的问题是,您失去了跟踪/调试原始数据结构的能力 然后我考虑第二种方法,我只是遍历旧的树,构造一个新的树,用扩展的节点,并在两者之间创建一个映射。这样做似乎相当昂贵,因为您实际上是在复制一个潜在的大型结构并对其进行扩展,同时将两者都保留在内存中 因此,我想知道是否有第三种方法或其他方法,您可以以某种方式

我有一个问题,你有一个树数据结构的一些符号表达式,然后我需要扩展某些部分的树使用重写规则,以获得最终的扩展数据结构

我可以想出一些方法来做到这一点。第一种方法,只需将旧节点替换为新的扩展节点。但这里的问题是,您失去了跟踪/调试原始数据结构的能力

然后我考虑第二种方法,我只是遍历旧的树,构造一个新的树,用扩展的节点,并在两者之间创建一个映射。这样做似乎相当昂贵,因为您实际上是在复制一个潜在的大型结构并对其进行扩展,同时将两者都保留在内存中


因此,我想知道是否有第三种方法或其他方法,您可以以某种方式创建从旧到新的映射,同时尽可能多地重用新旧数据结构(同时也创建如#2所示的映射)。这样做可能吗?它是如何做到的?

那么为什么没有hibrid解决方案呢?使用指向“原始”节点的
previousVersion
指针扩展每个节点,并且仅在进行替换时使用该属性。这意味着未受影响的节点仍然只存储一次(使用空指针),而受影响的节点实际上是新节点,并返回到其旧版本。函数式程序员经常考虑这类事情,通常在函数式数据结构的上下文中,但有时会考虑(例如)需要更深入了解结构共享的编译器。没有更具体的细节很难回答。