如题,每次看到这个都感觉解释非常的抽象
看着看着把自己都看懵了,这到底是是个啥???
1
fengxuejuan 2021-01-05 10:17:39 +08:00
我最早用这玩意是在 perl 里,所以我天然的把这玩意当单射的字典。
|
2
marcong95 2021-01-05 10:27:37 +08:00
set = (key, value) => table[hash(key)] = value
就是这么一个东西 |
4
raaaaaar 2021-01-05 10:49:36 +08:00 via Android
通过计算代替比较的查找方式,典型的空间换时间,查表法的电信应用,借鉴了数组的随机存取特性。
|
5
blackshow 2021-01-05 11:23:34 +08:00
哈希不就是散列吗?
|
6
hoyixi 2021-01-05 11:29:07 +08:00
很晕吧,一个重要原因是翻译,专有名词翻译很多花样,而且有些根本不该翻译。
不如看英文原版。 |
7
luckyrayyy 2021-01-05 11:30:37 +08:00
哈希和散列是同一个意思吧
|
8
jimmyismagic 2021-01-05 11:32:19 +08:00
因为 key 值不确定,比如有些整数非常大,如果按位置存储,则要开辟很大的空间,用 hash 的好处是把 key 值压缩到一个小的存储空间,这样虽然会出现碰撞,但查找的效率并不会下降多少。
|
9
ztxcccc 2021-01-05 11:32:21 +08:00 1
表->键值关系映射
哈希 /散列->压缩摘要 哈希表->用值的压缩摘要作为键的键值关系映射 |
10
Pastsong 2021-01-05 11:38:35 +08:00
Hash, 就是取一个对象的部分特征,通过某个 Hash 函数生成一个更简单的更易操作的值(字符串,整型等)。
把生成的 Hash 和原对象存在一个映射表里,这就是 Hash Table 。 |
11
neochen13 OP @hoyixi 是的,翻译的味道怎么感觉都不对,哈希和散列是一个东西我知道,但是解释哈希是什么,就讲不出个真正的含义出来,总感觉很别扭
|
12
caiji11 2021-01-05 14:07:46 +08:00
有点忘了 数据结构书上有 随便找一本看看
|
13
angryfish 2021-01-05 15:06:24 +08:00 via iPhone
哈希是 hash 的音译。本质是通过一个函数,将其转换成另外一个适合使用的值
|
14
NotFoundEgg 2021-01-05 15:45:10 +08:00
我认为 hash 可以理解为 通过特定规则得到的一个特征值
不同的对象有一定概率具有相同的特征值( hash 碰撞) 所以需要设计这个规则( hash 算法)来减少碰撞 |
15
NotFoundEgg 2021-01-05 15:46:35 +08:00
@NotFoundEgg 这应该是相对容易理解的说法了吧
|
16
NotFoundEgg 2021-01-05 15:50:51 +08:00
|
17
BiteTheDust 2021-01-05 16:07:01 +08:00
举一个比较简单的例子
你有若干对(k,v) key 的范围在[-2^32,2^32] 现在你要把它们存起来 快速通过 key 查询 value 你可以设计一个 hash 函数 比如 hash(x)=abs(x mod 1e5) 然后直接把它们存到一个 1e5 大小的数组 a 中 a[hash(k)]=v 然后再深入一点会涉及到 hash 函数的设计 和碰撞的处理 这些就是效率方面的问题了 |
18
ysc3839 2021-01-05 17:19:07 +08:00 via Android
我自己理解 hash function 是一个接受任意输入,输出固定长度数据的函数。
|
19
lidage 2021-01-05 23:53:18 +08:00 via iPhone
我理解哈希表就是一个字典一样的东西,怎么快速查找,通过 key 来来找到 value,然后为了保证一个 key 对应一个 value,必须构造一个 hash 函数,但是 key 和 hash 函数算出来可能会出现有多个 value,然后又要解决 hash 冲突,又把 value 那个指向一个地址链表。前几天看了 redis 的设计与实现,貌似 redis 就是这么解决 hash 冲突的。而且我所了解到短链接的设计貌似也是通过 hash 的方式实现的。反正我理解每一种数据结构应该放到实际的例子中去理解。
|