Haskell 库中是否有类似数组的数据结构,即插入 O(log n) 和检索 O(log n)?我可以用拉链推导出一个吗?
Is there an array-like data structure in the Haskell libraries that is O(log n) to insert and O(log n) to retrieve? Can I derive one using zippers?
我很惊讶地发现 Array
,例如,每当发生变化时重建整个数据结构,花费 O(n)。
我希望有人已经实现了一个 Zipper Array(或 zipper vector),它是纯的并且具有 O(log n) 查询和 O(log n) 插入。
这样的实现是否已经存在?我的搜索(对于 Zipper Array 和 Zipper Vector)没有找到这样的库。
如果没有,有没有办法从已经存在的数组和/或向量中自动导出拉链?
最坏的情况,我可能会尝试自己构建一个,但我必须复习一下红黑树(看看 zippers 是否适用于它们!)
编辑:确实 O(1) 不适用于树,如评论中所述
Finger trees 有 O(log n) 插入和查询。
我很惊讶地发现 Array
,例如,每当发生变化时重建整个数据结构,花费 O(n)。
我希望有人已经实现了一个 Zipper Array(或 zipper vector),它是纯的并且具有 O(log n) 查询和 O(log n) 插入。
这样的实现是否已经存在?我的搜索(对于 Zipper Array 和 Zipper Vector)没有找到这样的库。
如果没有,有没有办法从已经存在的数组和/或向量中自动导出拉链?
最坏的情况,我可能会尝试自己构建一个,但我必须复习一下红黑树(看看 zippers 是否适用于它们!)
编辑:确实 O(1) 不适用于树,如评论中所述
Finger trees 有 O(log n) 插入和查询。