原型对象系统的最佳持久性映射实现

时间:2017-07-21 07:32:08

标签: dictionary data-structures functional-programming prototype

TLDR:目前可用的最佳持久性无序地图实现具有快速查找和低内存占用量?

我正在考虑如何最好地在函数式语言中实现原型对象系统(例如Javascript或Self)(因此没有哈希表)。这样的用例意味着将创建大量对象,因此它们的内存占用应该很小。查找应该很快(真的是最重要的问题)。许多结构可能是共享的。

总之,

  • 查找是最重要的操作
  • 典型尺寸是有限的(即大约10 ^ 1)
  • 空间复杂性和内存开销很重要(即最小内存开销,大小为10 ^ 1的空间复杂度最小)。

对于字符串键,我知道Tries和变体。它们是满足这些要求的最佳选择吗? 对于整数索引,我知道Haskell的IntMap(基于PATRICIA树),但它似乎针对合并进行了优化。是否有更好的查找,并给出其他约束? 此外,对于可有效识别的通用密钥(例如内部符号),传统的平衡二叉搜索树是最好的吗?

我忘了这样一个项目是否存在任何相关的性能问题?

另外,假设我在lisp语言之上实现了这一点,例如Common Lisp,它具有支持有效比较的符号。使用字符串键和字符串映射,符号键和符号映射,或者从符号到整数(可能是有效的)并使用int索引映射会更好吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我发现了hash array mapped trie。 对于具有快速查找的持久性映射(几乎不变,更差的对数),它似乎是最好的。我认为内存占用率也很低,因为它只是一个数组树,它们只包含指向其他数组和实际数据的指针。 不过,相对于其他解决方案,不确定小地图有多好。