哈希表的C++实现
2016-03-19 22:22
281 查看
哈希表的几个概念:
映像:由哈希函数得到的哈希表是一个映像。
冲突:如果两个关键字的哈希函数值相等,这种现象称为冲突。
处理冲突的几个方法:
1、开放地址法:用开放地址处理冲突就是当冲突发生时,形成一个地址序列,沿着这个序列逐个深测,直到找到一个“空”的开放地址,将发生冲突的关键字值存放到该地址中去。
例如:hash(i)=(hash(key)+d(i)) MOD m (i=1,2,3,......,k(k<m-1)) d为增量函数,d(i)=d1,d2,d3,...,dn-1
根据增量序列的取法不同,可以得到不同的开放地址处理冲突探测方法。
有线性探测法、二次方探测法、伪随机探测法。
2、链地址法:把所有关键字为同义词的记录存储在一个线性链表中,这个链表成为同义词链表,即把具有相同哈希地址的关键字值存放在同义链表中。
3、再哈希表:费时间的一种方法
映像:由哈希函数得到的哈希表是一个映像。
冲突:如果两个关键字的哈希函数值相等,这种现象称为冲突。
处理冲突的几个方法:
1、开放地址法:用开放地址处理冲突就是当冲突发生时,形成一个地址序列,沿着这个序列逐个深测,直到找到一个“空”的开放地址,将发生冲突的关键字值存放到该地址中去。
例如:hash(i)=(hash(key)+d(i)) MOD m (i=1,2,3,......,k(k<m-1)) d为增量函数,d(i)=d1,d2,d3,...,dn-1
根据增量序列的取法不同,可以得到不同的开放地址处理冲突探测方法。
有线性探测法、二次方探测法、伪随机探测法。
2、链地址法:把所有关键字为同义词的记录存储在一个线性链表中,这个链表成为同义词链表,即把具有相同哈希地址的关键字值存放在同义链表中。
3、再哈希表:费时间的一种方法
相关文章推荐
- C++第二次实验1-标准体重
- 自己用C语言写PIC32单片机的serial bootloader
- 一起talk C栗子吧(第一百二十五回:C语言实例--显示文件名和行号)
- C语言的输入与输出
- c++第二次实验项目四
- 哈夫曼树的创建和编码
- C++中关于一维、二维、三维动态数组的定义
- C++——虚函数
- C++并行开发Pthread之线程(一)
- c++杂记
- C++ 编写WebService服务
- C/C++中基本数据类型学习
- ros与下位机通信常用的c++ boost串口应用--22
- 百练2972:确定进制
- <<Effective C++>>读书笔记(三)
- c++第2次上机-3
- 将c语言输出结果输出到txt
- DP骑士游历
- (蓝桥杯) 历届试题 兰顿蚂蚁 (模拟题)
- mingw 编译c++ 最简单的程序出现Program received signal SIGSEGV, Segmentation fault.