【发布时间】:2011-05-14 20:19:47
【问题描述】:
我有 x(百万)个正整数,它们的值可以尽可能大(+2,147,483,647)。假设它们是独一无二的,那么为查找密集型程序存储它们的最佳方式是什么。
到目前为止,我一直在考虑使用二叉 AVL 树或哈希表,其中整数是映射数据的键(名称)。但是我不确定我是否可以使用哈希表实现如此大的键和如此大的数量(除了容易发生冲突之外,这不会创建 >0.8 的负载因子吗?)
我可以就哪种数据结构可能适合我的情况获得一些建议
【问题讨论】:
-
您是否要将整个结构保存在内存中?数据库通常使用 B-tree 进行这种搜索。该结构存储在磁盘上,即使索引中有大量键,也只需少量访问即可找到所需键。
-
@JOTN:CPU 缓存行填充对性能的影响与数据库页面读取的效果相同,尽管是微秒而不是毫秒。
-
如果你打算使用自平衡树,那么我强烈建议你阅读这篇论文:web.stanford.edu/~blp/papers/libavl.pdf
标签: performance data-structures hashtable lookup avl-tree