c - C 中的哈希算法将 16 个字节值映射到 2 个字节值

标签 c algorithm hashmap

我正在使用一个用 C 语言编程的微 Controller 进行电子项目。

我需要将一些 ID 及其相关信息存储在闪存 (SD) 中。这些 ID 的长度为 16 个字节,因此有 2^128 个可能的值。尽管它们是 16 个字节,但只会使用 50000 个(唯一)值。在 SD 中存储所有可能的 (2^128) 个 ID 在物理上是不可能的。

我只能存储 50000 个使用过的值,但我必须遍历所有(最坏情况下)它们才能找到我需要的值。此外,它必须为它们中的每一个计算一个 16 字节的值比较,这使得它非常慢。

所以我认为我需要某种(哈希?)函数将 2^128 值映射到 50000(将 16 字节映射到 2 字节)。很明显,一些原始值将映射到相同的值/索引。这个想法是,当我得到一个 ID 时,我应用一个哈希函数,它给我一个介于 0 和 ~50000 (0-65535) 之间的索引。使用该索引,我可以直接访问存储 ID 及其相关信息的 SD 扇区。正如我所指出的,该索引将引用内存中的一个位置,由于一些不同的 ID 映射到相同的索引值,因此各种 ID 将共存。我将不得不找到正确的 ID,但它只需要几次比较而不是 50000 个原始 ID。

任何想法/意见将不胜感激。

提前致谢。

最佳答案

只需使用实际 ID 的 16 MSB。这很愚蠢,但有了您的详细信息,它就会起作用。

关于c - C 中的哈希算法将 16 个字节值映射到 2 个字节值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14852361/

相关文章:

java - 如何检查HashMap是否包含ArrayList的所有元素?

java - 当 String 作为键时,什么会导致 HashMap containsKey() 失败?

Java:修改更改哈希码的id

c - 如何从c中的字符串中获取多个字符

c - 同时扫描 char 和 float 时出现问题

c++ - std::vector 插入的摊销分析

algorithm - Scala 代码 - 不可变集问题

C - 带有结构数组的 printf 字符串

c - 如何使用平方根优化c中的循环(完美、丰富、不足)

c - 链表在打印时仅显示第一个节点元素