目录

  • 1 课程资料
    • 1.1 课程标准
    • 1.2 教学日历
    • 1.3 说课课件
  • 2 第一章绪论
    • 2.1 本章教学目标
    • 2.2 数据结构简介
    • 2.3 数据结构类型
    • 2.4 算法分析
    • 2.5 本章讲义
    • 2.6 本章测验题
    • 2.7 测验
  • 3 线性结构
    • 3.1 本章教学目标
    • 3.2 线性表
    • 3.3 线性表的顺序存储及运算实现
      • 3.3.1 本节讲义
    • 3.4 线性表的链式存储和 运算实现
      • 3.4.1 本节讲义
    • 3.5 应用
    • 3.6 数组
      • 3.6.1 讲义
    • 3.7 本章测验题
    • 3.8 测验
    • 3.9 作业
  • 4 第三章栈和队列
    • 4.1 本章教学目标
    • 4.2 第一课时栈
      • 4.2.1 讲义
    • 4.3 第二课时队列
      • 4.3.1 讲义
    • 4.4 应用
      • 4.4.1 讲义
    • 4.5 本章测验题
  • 5 第四章串
    • 5.1 第一课时概念
    • 5.2 本章学习目标
    • 5.3 本章测验题
  • 6 第五章树和二叉树
    • 6.1 本章学习目标
    • 6.2 第一课时树的定义及基本术语
    • 6.3 第二课时二叉树定义性质存储
    • 6.4 第三课时二叉树遍历
    • 6.5 第四二叉排序与平衡二叉树
    • 6.6 第五树森林二叉树之间转换
    • 6.7 第六课时哈夫曼树
    • 6.8 本章测验题
    • 6.9 测验
    • 6.10 作业
  • 7 第六章图
    • 7.1 本章学习目标
    • 7.2 第一课时图的基本概念
    • 7.3 第二课时图的存储
    • 7.4 第三课时图的遍历
    • 7.5 第四课时最小生成树
    • 7.6 第五课时最短路径
    • 7.7 第六课时拓扑排序
    • 7.8 第七课时关键路程
    • 7.9 本章测验题
    • 7.10 测验
    • 7.11 作业
  • 8 第七章查找
    • 8.1 本章学习目标
    • 8.2 第一课时顺序查找二分查找
    • 8.3 第二课时哈希表
    • 8.4 本章测验题
    • 8.5 测验
    • 8.6 作业
  • 9 第八章排序
    • 9.1 本章学习目标
    • 9.2 第一课时基本概念
    • 9.3 第二课时插入选择排序
    • 9.4 第三课时交换排序
    • 9.5 第四课时归并 基排序及比较
    • 9.6 本章测验题
    • 9.7 测验
    • 9.8 作业
第二课时哈希表

哈希表的建立和解决冲突

9.3.1哈希函数

一般情况,需建立一个函数关系,以f(key)作为关键字为key的记录在表中的位置,通常称这个函数f(key)为哈希函数。

9.3.2哈希函数的构造方法

 除留余数法

     H(key) = key MOD p     pm (表长)

假设哈希表长度m=13,采用除留余数法哈希函数建立如下关键字集合的哈希表:

{16,74,60,43,54,90,46,31,29,88,77}

 解:n=11,m=13,除留余数法的哈希函数为f(k)=k mod p,p应为小于等于m的素数,假设p取值13。则有:

    f(16)=3,f(74)=9,f(60)=8,f(43)=4,

    f(54)=2,f(90)=12,f(46)=7,f(31)=5,

    f(29)=3, f(88)=10,f(77)=12

9.3.3处理冲突的方法

1. 开放定址法

    为产生冲突的地址H(key)求得一个地址序列:

        H0, H1, H2, …, Hs     1sm-1

其中:H0 = H(key)

      Hi = ( H(key) + di ) MOD m  i=1, 2, …,s

增量 di 有三种取法:

(1) 线性探测再散列:di = c´i。最简单的情况  c=1

(2) 平方探测再散列:di = 12, -12, 22, -22, …,

(3) 随机探测再散列:di 是一组伪随机数列

2. 再哈希法

出现冲突时,采用多个哈希函数计算散列地址,直到找到空单元为止。或者用另一个哈希函数作为步长进行探测,找到下一个空单元。

如:H1(key) = key MOD 11

         H2(key) = ( key+ MOD 9)1

示例:给出一组表项关键字{ 22, 41, 53, 46, 30, 13, 01, 67 }。散列函数为:H(x)(3x) % 11。散列表为 HT[0..10]m = 11。因此,再散列函数为 RH(x) = (7x) % 10 +1

       Hi = ( Hi-1 + (7x) % 10 +1 ) % 11,  i = 1, 2, ¼

3. 链地址法

将所有哈希地址相同的记录都链接在同一链表中。链地址肯定不会产生二次聚集