#数据结构#哈希理解
1、什么是哈希?
数据结构的本质目的就是为了快速寻找到想要的数据,下面举个例子。假如有一堆数据,记录着整个班级的姓名和身份信息,加入你想查询张三的身份信息,你总不能从头到尾查询张三的信息把,如果张三在末尾,是不是以前的检索就不正确了,假如根据姓名首字母排序,你是不是能忽略前面,直接定位到Z去寻找张三的信息。
对这个直接定位到Z去寻找张三的信息就是你快速寻找的方法,也就是哈希方法。
如上图所示,这个能让你找到关键位置的数据(张三)就是你的关键key,因为他很关键。
现在是不是能看懂百度百科的解释了:
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。
其实哈希的本质就是数组:
数组+链表、数组+树(数据村多了)
2、哈希冲突
哈希冲突很简单,上述例子如果有两个姓张的,那就会位置了,那就冲突了。
冲突解决有两个办法:
方案一:冲突了继续往后存一格,循环往复
方案二:冲突了就存链表,上个数字多存一个next,下个的位置信息,依次下去。
3、哈希函数
上述可见不好的哈希函数会有很多冲突,常见的哈希函数可采用:
,比如有直接定址法,数字分析法,折叠法,随机数法和除留余数法等等