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

标签 algorithm optimization data-structures compiler-construction immutability

某些数组操作,例如 setequalsconcat 如果需要完整的结构,它们将相当慢(主要是 O(n))复制到内存中。我知道 Clojure 等不可变语言使用一些技巧来避免这些操作的复杂性。这些技巧是什么?

最佳答案

由于持久数据结构的保证,Clojure 中使用了“结构共享”。这意味着,例如,如果您使用 cons/conj 添加到列表/向量,则旧数据结构将在新旧数据结构之间共享。

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

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

关于algorithm - 不可变语言如何高效地实现 set、concat、equals 等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19161267/

相关文章:

java - java中数据结构的内部实现?

c++ - 范围最小值/最大值查询

c - -Ofast 以外的任何内容都会导致 "undefined reference"错误

delphi - Delphi 什么时候尊重 `inline`,什么时候不尊重?

java - 设计 super 英雄游戏

arrays - 在数组中的给定位置之后查找元素第一次出现的有效方法是什么?

Java 按距离排序

c++ - 使用 MS VS2003 计算前纪元日期/时间的秒数

MySQL:优化连接