散列(Hash):
书中的定义:通过一些计算,把关键码值映射到数组中的位置来访问记录,这个过程称为散列。
我的理解:输入(关键码)------函数(处理)------>输出(地址,位置)。根据关键码,经由一种函数处理,存储到特定的位置或进行访问的过程。
该函数为散列函数,存放记录的数组成为散列表。
散列表的构建方法:
- 直接寻址法:直接将关键字作为索引
- 数据分析法:在已知数据的前提下,对数个各个位进行分析,将数值能够均匀出现的位作为地址。(不均匀:比如某一位只是出现1,9,或者其他某几位;均匀:则该位大部分数都会出现,而且出现次数差不多)
- 除留取余法:将取余的结果作为地址(注意:一般取余的数是不大于表长的素数,或者是不小于20二等素数。)
- 折叠法:将关键字分成多个长度相同的部分,最后一部分可以长度不同,将求出各个部分的叠加和作为地址(一般是针对较长的关键字,划分的长度以表长为基准)。而折叠又分为移位叠加和边界叠加。
- 移位叠加:最低位对齐
- 来回叠加:比如第一部分正序,第二部分倒序…来回叠加
- 平方取中法:算出关键字的平方,将其中的某几位作为地址
- 随机数法:将关键字的随机数作为地址