回答
你对散列函数有什么了解?
你提到了可扩展哈希。
通过可扩展散列,您可以将散列看作位串,并且通常通过一个trie实现存储桶查找。虽然我假设你将它转换为数组中的索引,但不是基于特里查找。
你提到你最多只有100个元素。如果你想要所有不同的哈希值,你会有128个可能性,因为这是7位最接近的位组合。
如果您的哈希函数可以散列每个元素以拥有7个(或更多)不同的位中的7个,那么您将拥有最优解决方案,并且存储桶大小为1个。请留下128个叶节点或128个数组。
如果散列函数可以散列每个元件具有6 7(或更多)不同的位,那么你有为2的桶大小你将不得不64叶节点/组合/数组大小。
如果散列函数可以散列每个元件具有的7(或更多)不同的位5,则你必须为4的桶大小你将不得不32叶节点/组合/数组大小。
既然你说你想要一个桶大小为4我认为你的答案是32,你有一个很好的要求,你有一个很好的散列函数,可以给你至少5个不同的第一位。
即使它是唯一键,那么在除以100之后就会得到余数。并且它可能不会总是唯一的。所以,我认为很难确定哈希算法会给你相对于数组的唯一索引:) – vodkhang 2010-05-23 02:21:47
@vodkhang:完全有可能具有1:1和跨越映射。 – 2010-05-23 02:24:46
我错过了这一点:完全改变答案的可扩展哈希。我重新写了我的答案。 – 2010-05-23 02:38:17
我认为这取决于你是否需要很高的性能或节省存储。你可以将元素保存为100个数组。我对扩展哈希不太了解,但是我对哈希的一般理解是它会有某种碰撞,如果你使用一个更大的数组来存储它,碰撞次数可以减少,增加/删除和查询的性能也会更快。我想你应该至少使用128(正好是2^K,我不是在哈希专家):)
- 1. Android可伸缩文本大小?
- 2. Perl:散列中数组的大小,在另一个散列
- 3. SharePoint列表可伸缩性
- 4. 可调整大小和可伸缩的gridColumn与gridSplitter
- 5. 阵列大小为600且散列最少的散列码
- 6. 如何将struts2中的数组散列为未指定大小的javascript数组?
- 7. 在CouchDB中对散列数组进行映射/缩小
- 8. 数组列表的remove()方法导致数组列表的大小缩小
- 9. 调整可伸缩图像的大小以匹配UILabel sizeToFit
- 10. 可伸缩异步图像调整大小
- 11. 如何将散列数组转换为散列值数组?
- 12. 为可变大小的布尔数组
- 13. 在Perl中查找散列数组的大小
- 14. 数组散列给出不正确的大小结果 - Ruby
- 15. IIS可伸缩性
- 16. BigInteger:计算可伸缩方法中的小数位数
- 17. HTML“伸展”组件的实际大小
- 18. 需要双向缩小散列算法
- 19. 拉伸/缩小画布
- 20. 蔚蓝云队列的可伸缩性
- 21. 缓存和调整图像大小而不缩小或拉伸?
- 22. ffmpeg修改音频长度/大小(伸展或缩小)
- 23. 可变大小的数组
- 24. 如何按数组大小对数组的散列进行排序
- 25. 数组列表大小小于实数
- 26. C++数组可变大小的数组
- 27. 按大小逐列缩放数字[python]
- 28. 如何为可伸缩的UIImage着色
- 29. 为什么JTextField在传递大列数时缩小为0?
- 30. 将二维数组的大小调整为不同的大小(例如缩小或压缩)
我忘了补充一点,桶大小为4,这很重要。 – neuromancer 2010-05-23 02:22:39
你认为如何使用小于100的数组来存储100条不同的记录? – Stephen 2010-05-23 02:26:07
每个数组入口指向一个存储桶。桶大小为4,意味着最多4个记录可以放入桶中。所以一个数组入口可以指向4条记录。 – neuromancer 2010-05-23 02:29:25