【问题标题】:How to handle data structures with indices larger than 32 bits?如何处理索引大于 32 位的数据结构?
【发布时间】:2013-07-25 12:35:22
【问题描述】:

我有一个大小为 80 位的大型索引及其对应的数据,要存储在我需要搜索的数据结构中。我们可以在哈希表中使用 80 位索引吗?或者有没有更好的替代数据结构,它会花费恒定的时间进行查找(搜索)?

编辑:

我认为我的问题并不清楚......这是设置 --- 我有数百万个文件,我将为这些文件生成一个大小为 80 位(以安全地表示文件)的加密哈希陷门,每个 80 -bit陷门将与其数据一起存储在像哈希表这样的数据结构中。现在由于 80 位陷门的域大于哈希表的范围,肯定会发生冲突。但我需要将唯一的 对存储在数据结构中。如何使用哈希表实现这一点?或者如果有任何其他替代DS?

编辑 2:

假设我创建了一个哈希表,并且在添加键时发生了冲突(例如 xy 按顺序),因为哈希函数为这些键生成了相同的索引 (i)。但是通过使用冲突解决技术(例如双重哈希),y 被插入到不同的位置j,而不是i。我明白到这一步。现在,如果我想根据键 y 进行搜索,哈希表会返回位置 i 还是 j?如果不是i,它将如何返回j(所需的确切记录)?它是否存储碰撞次数的计数器(探针)?

【问题讨论】:

    标签: c search indexing data-structures hashtable


    【解决方案1】:

    如果您提供哈希函数,您可以使用任何您想要的作为哈希表中的索引。如果您想要恒定的时间访问,我认为没有更好的选择。

    【讨论】:

      【解决方案2】:

      您可能应该查看how hash tables work

      您要用作索引的对象通过哈希函数传递,结果值用于查找您应该放置/查找与该索引值关联的数据的内存位置。

      如果您需要恒定时间查找,请使用哈希表。请务必使用适当的哈希函数。

      【讨论】:

      • 感谢您的回复.....我认为我的问题并不清楚......这是设置 --- 我有数百万个文件,我将为这些文件生成一个加密哈希陷门大小为 80 位(以安全地表示文件),并且每个 80 位陷门将与其数据一起存储在像哈希表这样的数据结构中。现在由于 80 位陷门的域大于哈希表的范围,肯定会发生冲突。但我需要将唯一的 对存储在数据结构中。如何使用哈希表来实现这一点?或者是否有任何其他替代 DS?
      • 可能我还是听不懂你在问什么。哈希表可以handle collisions,但我不确定这是您要求的。
      • 假设我创建了一个哈希表,并且在添加键时发生了冲突(按顺序说 x 和 y),因为哈希函数为这些键生成了相同的索引 (i)。但是通过使用冲突解决技术(例如双散列),y 被插入到不同的位置 j 中,而不是 i。我明白到这一步。现在,如果我想根据键 y 进行搜索,哈希表会返回位置 i 还是 j?如果不是 i,它将如何返回 j(所需的确切记录)?它是否存储碰撞次数的计数器(探针)?
      • 冲突解决分两步进行。给定一个键K,它首先计算它的哈希h(K) 并获取相应的位置。此时,它检查存储在该位置的元素的键是否等于K。如果是,则返回相应的值,否则继续计算下一个位置,直到找到所需的键。请注意,如果选择了适当的散列函数,则值应在所有存储桶中均匀分布,因此它仍应具有O(1) 复杂度。
      • 所以关键是也应该存储在记录中,也就是说记录是由 对组成的,对吧?如果我错了,请纠正我。
      猜你喜欢
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      相关资源
      最近更新 更多