哈希表
哈希表有三个重要的方面
1.装填因子a,即已存入表中的元素个数和表大小之比。a越小,发生冲突的概率越小,但是a过小,会造成空间的浪费。
2.哈希函数,即通过key第一次找到的地址,多个不同的key可能找到同一个地址,这就是冲突。
3.解决冲突的方法。
哈希函数的构造方法:
1.直接定址法:取关键字的线性函数值为散列地址,addr = a*key + b 。由于是线性,因此一个key对应一个地址,不会发生冲突,但是由于地址是线性的,因此会占用连续地址空间,空间效率低。
2.数字分析法:其实就是取key中的几位当地址,当然这几位要分布得比较均匀例如:
key:
347
390
354
383
就可以用后两位作为地址了。
3.随机数法:选取一个随机函数random, addr = random(key),这种方法适用于key的长度不等。
其余方法见文章 哈希表(一)
解决冲突的方法
1.开放地址法:即当插入的新记录的地址已经被占用时,在表里找一个没有被占用的,插进去。详情见哈希表(一)
2.链地址法:把同义词(key通过哈希函数取得相同地址的)存入链表,
其余方法见哈希表(一)
哈希表的主要作用是快速查找,插入和查找时所用的哈希函数和解决冲突的方法是一样的。