【问题标题】:Persistent data structures: a persistent index? [closed]持久数据结构:持久索引? [关闭]
【发布时间】:2013-04-17 09:04:16
【问题描述】:

函数式编程使用不可变数据。当您修改某些内容时,您会重新实例化“世界”,尽可能多地在您的增强世界中重用以前的化身。

我正在探索 JavaScript 中的 FP。我在 Lisp 中创建了一个类似于 List 的 List 对象。你cons 一个新的头部到一个现有的尾部。在将项目添加到持久列表时,我想创建一个与列表一致的持久索引。因此,如果我在联系人列表中cons 一个新联系人,我可能想要索引姓氏和电话号码,这样我就可以快速定位项目,而无需有效地启动全表扫描。

问:在 JavaScript 中,可以构建什么样的持久数据结构来提供快速键控访问?

也就是说,我认为这个想法是在构建增强索引时重用以前的索引数据。没有将前一个索引上的所有键克隆到增强索引中,我发现这个问题令人麻木。通过克隆,这将在以编程方式加载数据时浪费大量内存。索引应该是内存高效的,并提供按值快速访问。

【问题讨论】:

标签: javascript data-structures functional-programming lisp


【解决方案1】:

您可能会使用某种自平衡二叉搜索树,就像使用任何其他语言一样(尽管在许多语言中,已经提供了这样的数据结构)。每个插入平均花费 O(log n),包括将创建 O(log n) 新搜索节点的重新平衡。

一个相当简单的数据结构是splay tree。在 Chris Okasaki 的 Purely Functional Datastructures 中有一个可爱的伸展树功能实现。事实上,那本书中有很多非常酷的数据结构。强烈推荐。 (如果你搜索,你可能会在网上找到冈崎的论文,其中也有展开树的实现。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多