lje*_*osn 1 performance functional-programming vector clojure time-complexity
在Java中,让我们说我有一个整数数组:int[] a = {1, 2, 3, 4, 5};。如果我想更改数组中的某个元素,可以通过更改内存中某个地址处的数据来实现:a[2] = 9;=> {1, 2, 9, 4, 5}。
在Clojure中,我能有一个向量:(def a [1 2 3 4 5])。如何在保证最坏情况时间复杂度为 O(1) 的情况下更改向量中某个位置的元素?我读过该assoc关键字的平均时间复杂度为 O(1),但这不是我要找的。另外,我查看了瞬态向量,但我还没有找到一个很好的简单示例来更新 O(1) 中的向量。
在当前的实现中,Clojure 向量的复杂度为 O(log_32(n))(以 32 为底的对数)。在数学上,O(log_32(n)) 与 O(log(n)) 是一回事。差异不是理论上的,而是实际的: