TLDR:目前可用的最佳持久性无序地图实现具有快速查找和低内存占用量?
我正在考虑如何最好地在函数式语言中实现原型对象系统(例如Javascript或Self)(因此没有哈希表)。这样的用例意味着将创建大量对象,因此它们的内存占用应该很小。查找应该很快(真的是最重要的问题)。许多结构可能是共享的。
总之,
对于字符串键,我知道Tries和变体。它们是满足这些要求的最佳选择吗? 对于整数索引,我知道Haskell的IntMap(基于PATRICIA树),但它似乎针对合并进行了优化。是否有更好的查找,并给出其他约束? 此外,对于可有效识别的通用密钥(例如内部符号),传统的平衡二叉搜索树是最好的吗?
我忘了这样一个项目是否存在任何相关的性能问题?
另外,假设我在lisp语言之上实现了这一点,例如Common Lisp,它具有支持有效比较的符号。使用字符串键和字符串映射,符号键和符号映射,或者从符号到整数(可能是有效的)并使用int索引映射会更好吗?
谢谢!
答案 0 :(得分:0)
我发现了hash array mapped trie。 对于具有快速查找的持久性映射(几乎不变,更差的对数),它似乎是最好的。我认为内存占用率也很低,因为它只是一个数组树,它们只包含指向其他数组和实际数据的指针。 不过,相对于其他解决方案,不确定小地图有多好。