用于可扩展散列的数组大小

时间:2010-05-23 02:13:30

标签: c++ arrays g++ hash

如果我想使用可扩展散列来存储最多100条记录,那么我需要的最小数组大小是多少?

我猜测100的数组就足够了,但我可能错了。我还怀疑我可以使用更小的阵列。

2 个答案:

答案 0 :(得分:1)

您对哈希函数了解多少?

你提到了可扩展的散列 使用可扩展散列,您可以将散列视为位串,并通常通过trie实现桶查找。虽然我假设您将其转换为数组的索引,但不是基于trie的查找。

你提到你最多有100个元素。如果你想要所有不同的哈希值,你就有128种可能性,因为这是7位最接近的位组合。

如果您的散列函数可以散列每个元素以具有7个(或更多)不同位中的7个,那么您可以获得最佳解决方案,其中桶大小为1.留下128个叶子节点或128个大小的数组。 / p>

如果您的散列函数可以散列每个元素以具有7个(或更多)不同位中的6个,那么您的存储桶大小为2.您将拥有64个叶节点/组合/数组大小。

如果您的散列函数可以散列每个元素以具有7个(或更多)不同位中的5个,那么您的存储桶大小为4.您将拥有32个叶节点/组合/数组大小。

因为你说你想要一个4的桶大小,我认为你的答案是32,你有一个很难要求你有一个很好的散列函数可以给你至少5个前面的位作为不同的。

答案 1 :(得分:0)

我认为这取决于您是需要高性能还是节省存储空间。你可以将元素保存到100个数组中。我不太了解可扩展散列,但我对散列的一般理解是它会有一些碰撞,如果你使用一个更大的数组来存储它,冲突次数可以减少,添加/删除和查询的性能也会更快。我认为你应该使用至少128(只是2 ^ k,我不是哈希专家):)