【发布时间】:2012-10-27 02:43:45
【问题描述】:
我对 Hashing 概念有一些理解问题,如下所示:
假设,我已经实现了将键作为数字的哈希表(一维数组,比如 A[100])。我有一个简单的散列函数 H(Key) % Table_Size,它将目标索引返回到散列表中(同时访问与此特定键关联的值)。
假设,我想将 0(key) 存储到表中。当我将此键传递给 H(散列函数)时,它会返回随机索引,例如 25。
数组 A(索引为 25)中的此位置有 2 种可能性:
- A[25] 包含 0 以外的一些键,因为已经存储(以前)
- A[25] 包含 0
第一种可能有冲突,很容易识别(因为当前key:0和已经存储的key:k不同),所以第一种没问题。
但是,第二个,我怎么知道天气有没有碰撞?
据我所知,哈希表或数组将是主内存的一部分。假设 A[25] 存储在内存位置 500 中。
我怎么知道这个位置(500)实际上是空还是已经被其他键填充?
内存单元的什么状态或值代表EMPTY或NULL或UNUSED位置?
而且,如果我想将 0 作为密钥存储到此位置进行碰撞检查,该怎么办?
我目前假设如果任何内存位置是 EMPTY 或 NULL 或 UNUSED,那么它将处于 RESET 状态(所有单元格是 0)。这是真的吗?
这可能是个愚蠢的问题,但我想知道在这种情况下如何检查碰撞。
--
提前致谢!! (海得拉巴海泰因)
【问题讨论】:
标签: c memory data-structures hash-collision integer-hashing