Functional programming 不可变集合是否天生效率较低

Functional programming 不可变集合是否天生效率较低,functional-programming,immutability,Functional Programming,Immutability,不可变对象是无法更改状态的对象。它们更易于测试和调试,在并发编程中非常有用。然而,当前不可变集合的实现与它们的可变亲属相比性能较差。例如,将关联数组实现为一个不可变的红黑树平均具有O(log(n))个插入/删除,而哈希表平均具有O(1)个插入/删除 总的来说,不可变集合的效率是否比它们的可变近亲低,或者有一天我们会发现不可变的实现速度一样快?证明了开发不可变的数据结构通常是可能的,“具有同等的渐近性能”,就像它们的命令对应物一样。然而,不可变结构可能具有更差的常数。但是,你可能在性能上付出的代价

不可变对象是无法更改状态的对象。它们更易于测试和调试,在并发编程中非常有用。然而,当前不可变集合的实现与它们的可变亲属相比性能较差。例如,将关联数组实现为一个不可变的红黑树平均具有O(log(n))个插入/删除,而哈希表平均具有O(1)个插入/删除


总的来说,不可变集合的效率是否比它们的可变近亲低,或者有一天我们会发现不可变的实现速度一样快?

证明了开发不可变的数据结构通常是可能的,“具有同等的渐近性能”,就像它们的命令对应物一样。然而,不可变结构可能具有更差的常数。但是,你可能在性能上付出的代价,你确实会在程序员的时间里得到回报;正如您所说,使用和理解不可变集合要容易得多。在这种情况下,这个问题有点类似于一个反复出现的问题,即为什么我们在C速度如此之快的情况下使用其他语言。因为这更简单,我们重视程序员的时间。

@JoachimPileborg指出并固定为平均效率;DR对于严格的纯函数语言(在某种计算模型中,可能适用,也可能不适用),存在一个O(logn)减速因子,对于懒惰的纯函数语言,没有渐近减速的证明或反证。