大家好,我的数据结构有25个不同的键(整数)和一个值。我有一个这些对象的列表(比如50000),我打算使用哈希表来存储/检索它们。我打算采取其中一种方法。
从这25个整数键创建一个整数哈希并将其存储在哈希表中。 (是的!我有办法处理碰撞)
在各个键上进行字符串连接,并将其用作哈希表的哈希键。例如,如果键值是1,2,4,6,7,则散列键将是“12467”。
假设我总共有50000条记录,每条记录有25个不同的密钥和一个值,那么当涉及到检索和插入记录时需要做的字符串比较的成本时,我的第二种方法是否会过度?< / p>
更多信息!
答案 0 :(得分:1)
绝对使用第一种方法,因为如果使用第二种方法,则需要一个可用1x10^(25m), where x is the maximum length of a key
个插槽的哈希表。
例如,如果密钥的最大数量为9999,则m
为4,您的表中需要1x10 ^ 100个插槽。
<强>解释强>
哈希表背后的想法是你可以随机访问效率为O(1)的任何元素(抛开一些冲突),因为任何元素的哈希实际上都是它在哈希表中的位置。因此,例如,如果我散列对象X并返回24的散列(或一些字符串散列转换为数字,结果是24),我只需转到我的表的第24位(通常实现为array),并且可以检索Object X。
但是如果你使用你的第二种方法(连接25个数字 - 我们会说数字来简化这里的事情 - 一起制作哈希),最大的哈希值是9999999999999999999999999。因此,要从哈希表中检索该对象,你必须从位置9999999999999999999999999检索它 - 这意味着你的桌子必须至少有这么多的位置。
请记住,对于第一个 - 因为你使用的是二叉树,所以碰撞并不会真是太大了。最糟糕的情况是O(log(n))的检索/插入效率,无论如何都不是那么糟糕。