【问题标题】:Structure sharing Vector in HaskellHaskell 中的结构共享向量
【发布时间】:2014-08-15 01:28:41
【问题描述】:

Haskell 结构中的Vector 是共享的吗?在 Clojure 中,修改(不可变的)vector 只需要 O(log n) 时间,因为它实际上是一个类似 trie 的结构。 (http://hypirion.com/musings/understanding-persistent-vector-pt-1)

Haskell 中是否有等效的实现?

【问题讨论】:

  • vector 库是用数组实现的,具有优化组合向量操作的巧妙规则,并提供了类似列表的 API。正如您对函数式语言所期望的那样,许多 haskell 数据结构都建立在不同种类的树上,但我不知道具体的结构。
  • 看看Data.Sequencehttp://hackage.haskell.org/package/containers-0.2.0.1/docs/Data-Sequence.html

标签: haskell clojure


【解决方案1】:

Data.Vector 是经过 O(n) 修改的普通数组。

当时还没有与 Clojure 的向量等效的东西。

Data.Sequence 实现为手指树,它支持比 Clojure 的向量更广泛的渐近高效操作(O(log(n)) 连接和拆分,O(1) 两端读/写),但它也是一种更重量级的数据结构,具有更多的 RAM 使用率和一些恒定的开销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-14
    • 2012-04-14
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多