element/bucket 大小由什么决定? - 哈希索引

What determines element/bucket size? - Hash Index

Promise 我已经搜索过了,人们也问过类似的问题,但答案似乎总是在技术上不可能,但没有说明原因。我也进行了 Google 搜索并获得了相同的信息。

我是从与语言无关的方面提出这个问题的。我知道哈希索引的工作原理是创建一个数组,然后通过哈希函数放置一个键,然后映射到数组中的索引。文献总是说每个键只能有一个值,我认为这取决于数据 type/cpu 意味着内存中每个 element/index 4.8 字节。我知道如果您使用指向另一个数组或列表的指针,每个键可以有多个值,但是技术上是什么阻止了您声明例如 key = car value = Audi, Blue, estate, 19 inch wheels 并在该元素中放置更多字节?

是否因为对索引的调用需要在一次内存读取中进行,并且桶的最大大小与数据总线宽度相同?还是因为这就是编译器的设计方式,理论上他们可以使编译器使用声明每个键需要多个值的代码?或者最后它可能与哈希函数有关,因为它事先知道数组的大小并且为了在连续内存中容纳所有 key/value 对,它需要每个元素只存储一个值?

如果我遗漏了一些非常明显的东西,我深表歉意,但我只是不明白为什么这在技术上是不可能的。谢谢你听我继续说下去 lol

欢迎来到 SO,Rob!

任何事物都不能有多个值。例如,数学中的一个变量不能有多个值。 X 不能既是 1 又是 0,除非我们在谈论 quantum computing。同样,每个键不能有多个值。

另一种看待它的方法是使用 functional dependency,它表示如果键 X 具有值 Y 和 Z,那么您可以两次使用键 X,一次指向 Y,一次指向到 Z。这意味着您将需要重复的键,这是我们在哈希映射中做不到的。

希望对您有所帮助。