hash查找与计算查找成功时和失败时的 平均查找长度

    科技2022-07-13  139

    Hash的构造方法

    1.直接定址法

    2.数字分析法:适用于关键字位数比较多且表中可能的关键字都是已知的情况,如一些连续的电话号码,分析数字的特点

    3.平方取中法:123的平方为15129,取其中的三位512

    4.除留余数法:H(key)=key mod p (p<=len)

    冲突处理

    开放定址,线性探测(特点:可以探测到表中的任何位置;容易产生堆积问题)

    红 色 位 为 冲 突 位 置 , 根 据 彩 虹 的 颜 色 分 布 , 为 依 次 扫 描 的 六 个 位 置 , 如 果 碰 到 没 有 关 键 字 的 位 置 , 则 填 充 红色位为冲突位置,根据彩虹的颜色分布,为依次扫描的六个位置,如果碰到没有关键字的位置,则填充

    开放定址,平方探测d+i^2 , d-i^2(特点:不可以探测到表中的任何位置;不容易产生堆积问题(一错再错))

    链地址法

    ◆ 用关键字序列{19121125351729}创建一个Hash 表,装填因子a为1/2,试确定表长len,采用除留余数法构造 Hash函数,采用链地址法来处理冲突。 n/length 装填因子就是表的装填的个数比例,所以表长为16H(key)=key mod p,p可以为13

    计算查找成功时和失败时的,平均查找长度

    查找失败,就是查找一个不存在的数的“比较”次数,所以要“遍历”(对于数组就是n,散列表的就是散列表的长))

    查 找 成 功 的 平 均 查 找 长 度 A S L 成 功 查找成功的平均查找长度ASL_{成功} ASL

    查 找 失 败 的 平 均 查 找 长 度 A S L 失 败 查找失败的平均查找长度ASL_{失败} ASL

    顺序查找

    A S L 成 功 ( 顺 序 查 找 ) = n + 1 2 A S L 失 败 ( 顺 序 查 找 ) = n ASL_{成功}(顺序查找)=\frac{n+1}{2}\\ ASL_{失败}(顺序查找)=n\\ ASL()=2n+1ASL()=n

    hash线性探测

    A S L 成 功 ( 线 性 探 测 ) = 1 + 1 + 3 ( 依 次 比 较 次 数 ) 3 ( 关 键 字 个 数 ) A S L 失 败 ( 线 性 探 测 ) = 3 + 2 + 1 3 ( 探 测 可 能 的 入 口 的 个 数 ) = 2 ASL_{成功}(线性探测)=\frac{1+1+3(依次比较次数)}{3(关键字个数)}\\ ASL_{失败}(线性探测)=\frac{3+2+1}{3(探测可能的入口的个数)}=2\\ ASL(线)=3()1+1+3()ASL(线)=3()3+2+1=2

    hash连地址法

    以上图为例: A S L 成 功 ( 连 地 址 法 ) = 3 ∗ 1 + 1 ∗ 2 ( 依 次 比 较 次 数 ) 4 ( 关 键 字 个 数 ) A S L 失 败 ( 连 地 址 法 ) = 4 ( 关 键 字 个 数 ( 依 次 比 较 ) ) 7 ( 探 测 可 能 的 入 口 的 个 数 , 散 列 表 的 长 ) ASL_{成功}(连地址法)=\frac{3*1+1*2(依次比较次数)}{4(关键字个数)}\\ ASL_{失败}(连地址法)=\frac{4(关键字个数(依次比较))}{7(探测可能的入口的个数,散列表的长)}\\ ASL()=4()31+12()ASL()=7()4()

    二叉排序树

    树 的 计 算 方 法 一 样 树的计算方法一样

    A S L 成 功 ( 二 叉 排 序 树 ) = 1 ∗ 1 + 2 ∗ 2 + 3 ∗ 3 ( 依 次 比 较 次 数 ) 6 ( 关 键 字 个 数 ) A S L 失 败 ( 二 叉 排 序 树 ) = 2 ∗ 1 + 6 ∗ 3 ( 查 找 底 部 不 存 在 的 数 字 ) 7 空 指 针 个 数 ASL_{成功}(二叉排序树)=\frac{1*1+2*2+3*3(依次比较次数)}{6(关键字个数)}\\ ASL_{失败}(二叉排序树)=\frac{2*1+6*3(查找底部不存在的数字)}{7空指针个数}\\ ASL()=6()11+22+33()ASL()=721+63()

    折半查找及判定树

    A S L 成 功 ( 折 半 查 找 ) = 1 ∗ 1 + 2 ∗ 2 + 3 ∗ 2 5 A S L 失 败 ( 折 半 查 找 ) = 2 ∗ 2 + 2 ∗ 3 4 ASL_{成功}(折半查找)=\frac{1*1+2*2+3*2}{5}\\ ASL_{失败}(折半查找)=\frac{2*2+2*3}{4}\\ ASL()=511+22+32ASL()=422+23 树的平均查找长度为树的深度

    Processed: 0.020, SQL: 8