Algorithm 不可变语言如何高效地实现set、concat、equals等?

Algorithm 不可变语言如何高效地实现set、concat、equals等?,algorithm,optimization,data-structures,compiler-construction,immutability,Algorithm,Optimization,Data Structures,Compiler Construction,Immutability,某些数组操作,如set、equals和concat如果需要在内存上进行完整的结构复制,则它们的速度会相当慢(主要是O(n))。我知道Clojure等不可变语言使用了一些技巧来避免这些操作的复杂性。这些技巧是什么?因为保证了持久数据结构,所以Clojure中使用了“结构共享”。这意味着,例如,如果使用cons/conj将旧数据结构添加到列表/向量,则新旧数据结构将共享 在幕后,数据存储在具有高分支因子的浅树中 Rich Hickey自己讨论了基本结构及其优化并不是说这是一个dup,而是看看答案,因

某些数组操作,如
set
equals
concat
如果需要在内存上进行完整的结构复制,则它们的速度会相当慢(主要是O(n))。我知道Clojure等不可变语言使用了一些技巧来避免这些操作的复杂性。这些技巧是什么?

因为保证了持久数据结构,所以Clojure中使用了“结构共享”。这意味着,例如,如果使用cons/conj将旧数据结构添加到列表/向量,则新旧数据结构将共享

在幕后,数据存储在具有高分支因子的浅树中


Rich Hickey自己讨论了基本结构及其优化

并不是说这是一个dup,而是看看答案,因为它有一些有趣的链接。