【问题标题】:What determines element/bucket size? - Hash Index什么决定了元素/桶的大小? - 哈希索引
【发布时间】:2020-02-20 19:58:49
【问题描述】:

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

我是从独立于语言的方面提出这个问题的。我知道哈希索引的工作原理是创建一个数组,然后将一个键放入一个哈希函数,然后映射到数组中的一个索引。文献总是说每个键只能有一个值,我假设这取决于数据类型/cpu 意味着内存中每个元素/索引 4,8 个字节。我知道,如果您使用指向另一个数组或列表的指针,每个键可以有多个值,但技术上阻止您声明例如键 = 汽车值 = 奥迪、蓝色、房地产、19 英寸车轮并在该元素中放置更多字节?

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

抱歉,如果我遗漏了一些非常明显的东西,但我就是不明白为什么它在技术上是不可能的。谢谢你听我继续大声笑

【问题讨论】:

    标签: indexing hash associative-array


    【解决方案1】:

    欢迎来到 SO,Rob!

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

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

    我希望这会有所帮助。

    【讨论】:

    • 感谢您的回复,但我仍然不明白您的意思,因为哈希映射到数组中的索引而不是特定值。价值可以是你喜欢的任何东西,对吧?那么是什么决定了元素/桶的大小(以字节为单位)?
    • 对不起,我想我不明白你的问题。请修改它,因为“为什么每个键不能有多个值?”与哈希映射中的“决定元素/桶大小(以字节为单位)的因素”不同。
    • 刚刚更新 :) 但仍然很困惑哈哈。如果可以改变桶的大小,为什么我们不能说键映射到索引 0 + 偏移 20 个字节,然后在那个桶中声明一些值?
    • 您可以使用数组列表来做到这一点。你说你“知道如果你使用指向另一个数组或列表的指针,每个键可以有多个值”。这就是你的答案。正如我之前提到的,根据功能依赖性,每个键有多个值(未分组在一个数组中)会违反键的唯一性。
    • 谢谢你,我得到指向另一个数组或列表。我可以问一下是什么决定了数组的桶大小(以字节为单位)。假设 5 个值的哈希函数映射到 0-4 个桶。我们不能说在函数运行之后,将第一个桶的基地址增加到 x 字节数,以此类推,以获取桶哈希的其余键。然后我们将能够为每个键拟合更多的值。基本上为什么我们不能将表行的信息放入哈希表中?
    猜你喜欢
    • 2014-05-17
    • 1970-01-01
    • 2013-02-08
    • 2023-03-11
    • 2020-03-06
    • 2016-11-02
    • 2023-03-04
    • 2011-10-26
    • 2017-06-06
    相关资源
    最近更新 更多