[C++]数据结构:散列表(哈希表)、散列函数构造、处理散列冲突

本文介绍了哈希表(Hash Table)的概念,强调了散列函数的重要性及其构造原则,包括直接定址法。并详细探讨了处理散列冲突的策略,如开放定址法(二次探测法、随机探测法)、链地址法和公共溢出区法,以提高数据存储和查找效率。
摘要由CSDN通过智能技术生成

一、散列表(Hash Table, 哈希表)?

维基百科定义:根据关键字(key value)直接访问在内存存储位置的数据结构。

通俗的讲,为了加快查找速度,我们通过同一个映射函数F,建立关键字和记录的存储位置的关系,相应地,记录的连续存储空间称为散列表或哈希表。关键字对应的记录存储位置

称为散列地址

存储位置 = F (关键字)  (函数法则F可自定义)


二、散列函数构造方法

构造原则:a. 计算简单,散列函数计算时间应该尽量少。

        b. 散列地址分布均匀,不仅保证存储空间的有效利用,并减少处理冲突而耗费的时间。

1. 直接定址法

直接取关键字的某个线性函数值为散列地址,即  F( key ) = a * key + b (a, b为常数). 适合:需事前知道关键字分布情况,并且查找表较小且连续的情况。此法不常用。

        举个例子,比如,要对0~100岁的人口数字进行统计,我们选用“年龄”这个关键字,直接用年龄的数字作为地址,F(KEY) = KEY.

        

地址 年龄 人数
00 0
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值