map

82 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第25天,点击查看活动详情

散列表(Hash Table) 散列表(Hash table,也叫哈希表)是一种查找算法,与链表、树等算法不同的是,散列表算法 在查找时不需要进行一系列和关键字(关键字是数据元素中某个数据项的值,用以标识一个数据 元素)的比较操作。 散列表算法希望能尽量做到不经过任何比较,通过一次存取就能得到所查找的数据元素,因而必 须要在数据元素的存储位置和它的关键字(可用 key 表示)之间建立一个确定的对应关系,使每个 关键字和散列表中一个唯一的存储位置相对应。因此在查找时,只要根据这个对应关系找到给定 关键字在散列表中的位置即可。这种对应关系被称为散列函数(可用 h(key)表示)。 用的构造散列函数的方法有: (1)直接定址法: 取关键字或关键字的某个线性函数值为散列地址。 即:h(key) = key 或 h(key) = a * key + b,其中 a 和 b 为常数。

(2)数字分析法

(3)平方取值法: 取关键字平方后的中间几位为散列地址。

(4)折叠法:将关键字分割成位数相同的几部分,然后取这几部分的叠加和作为散列地址。

5)除留余数法:取关键字被某个不大于散列表表长 m 的数 p 除后所得的余数为散列地址, 即:h(key) = key MOD p p ≤ m

(6)随机数法:选择一个随机函数,取关键字的随机函数值为它的散列地址, 即:h(key) = random(key) 22.1.5. 排序二叉树 首先如果普通二叉树每个节点满足:左子树所有节点值小于它的根节点值,且右子树所有节点值 大于它的根节点值,则这样的二叉树就是排序二叉树。 22.1.5.1. 插入操作 首先要从根节点开始往下找到自己要插入的位置(即新节点的父节点);具体流程是:新节点与 当前节点比较,如果相同则表示已经存在且不能再重复插入;如果小于当前节点,则到左子树中 13/04/2018 Page 247 of 283 寻找,如果左子树为空则当前节点为要找的父节点,新节点插入到当前节点的左子树即可;如果 大于当前节点,则到右子树中寻找,如果右子树为空则当前节点为要找的父节点,新节点插入到 当前节点的右子树即可