发布时间:2025-01-28 15:17:04 点击量:
HASH GAME - Online Skill Game GET 300
2. 处理冲突的方法; 3. Hash 表的装填因子。 Hash 表 的 装 填 因 子 定 义 为 :α = 填 入 表 中 的 元 素 个 数 / Hash 表的长度 α 是 Hash 表装满程度的标志因子。 在表长一定的情况下,α 与填 入 表 中 的 元 素 个 数成 正 比 ,所 以 ,α 越 大 ,表 示 填 入 表 中 的元素越多 ,产 生 冲 突 的 可 能 性 就 越 大 ;α 越 小 ,填 入 表 中 的 元 素较少,产生冲突的可能性就越小。 在实际应用中,可以根据要 填入表中的元素数量来调整 Hash 表的长度, 以使整个 Hash 表 获得合理的装填因子 α。 因此,Hash 表的平均比较次 数 是 装 填 因 子 α 的 函 数 ,只 是 在使用不同的冲突处理方法时有不同的函数。 2. Hash 表在快速检索中的应用 Hash 表能够实现 O(1)性能的快速检索,在需要频繁进行检 索定位的情况下, 利用 Hash 表能够极大地提升算法的性能,在 理想情况下达到 O(1)的性能。 下面以一个校园网环境下的流量 计费系统来举例说明。 2.1 需求: 某 校 园 网 需 要 在 出 口 处 部 署 流 量 计 费 系 统 , 统 计 每 个 IP
在理想情况下,不同的关键字 K 根据对应关系 f 进行运算 后 能 够 得 到 唯 一 且 不 同 的 地 址 f(k),这 种 情 况 ,称 为 完 美 Hash。 而对不同的关键字 K 经过对应关系 f 运算后可能得到同一散列 地址,即 K1≠K2,而 f(K1)=f(K2),这种现象称为 冲 突 。 要 实 现 完 美 Hash,往往需要付出巨大的空间代价,因此 在 实 际 应 用 中 ,设 计 Hash 函数时需要考虑冲突与存储空间消耗之间的平衡。
每秒通过计费系统的数据包个数为 100000 个, 校园网 IP 地址数 10000 个,如果使用传统的线性表来存储每个 IP 的 流 量 数 ,在 对 线 性 表 根 据 IP 信 息 进 行 过 排 序 之 后 ,最 佳 情 况 是 使 用 折半查找,其时间复杂度为 O(log2n),n=10000 时平均每个数据包 需 要 花 费 13 次 比 较 。 在 实 际 应 用 中 每 秒 钟 平 均 需 要 进 行 1300000 次的比较操作才能够将流量信息记录到各个 IP 对应的 数据结构中。 且每次新增加 IP 地址后,还需要进行重新排序,其 运算量更为巨大。 因此,我们需要对此进行改进和优化。 2.3 优化处理:
return h%65536; } 2.4 优化结果: 根据上述分析及 Hash 算法、 表空间、 冲突处理方式的设 计 ,能 够 使 得 校 园 网 IP 流 量 统 计 表 实 现 O(1)性 能 的 查 询 、统 计 能力,相对于使用线性表存储的方式,即节约了排序时间,又使 每秒需要进行 1300000 次比对查找才能够完成的计费统计过程 提升到只进行 100000 比对查找就能够完成,实现了系统性能的 大幅度提升。 3. 结束语 Hash 算 法 是 一 种 解 决 大 容 量 数 据 表 快 速 检 索 的 一 种 简 单 高效的方法,在需要进行大量检索操作的领域,有其非常重要的 作用和地位。
检索的理想情况是能够根据关键字直接找到需要的记录, 即每一个记录的关键字都与存储结构中的某一位置唯一对应, 且 存 在 对 应 关 系 f,使 关 键 字 K 的 存 储 位 置 为 f(K),则 在 进 行 检 索时,只需要根据关键字 K 和对应关系 f,既可以查找到需要的 记录。 这个对应关系 f 称之为 Hash 函数,根据这 一 思 想 建 立 的 表 称 为 Hash 表 (也 称 散 列 表 、哈 希 表 )。 在 理 想 情 况 下 (无 冲 突 时),Hash 表的检索性能为 O(1)。 1.2 冲突与冲突处理
优化的目标: · 新增 IP 不需要进行排序。 · 达到 O(1)的检索性能。 根据优化目标, 我们采用 Hash 表来进行存储, 根据上文 HASH 查找的性能分析中可知,为了提升查找性能,可以 适 当 增 加表空间,降低散列表的装填因子,合理设计散列函数,使散列 函数尽可能均匀,并选用合适的冲突处理方法。 1. 确 定 Hash 地 址 空 间 :IP 地 址 的 显 示 格 式 为 XXX.XXX. XXX.XXX,而在网络数据包中,IP 地址是以一 个 32 位 无 符 号 整 形 数 存 储 的 ,其 共 有 4294967296 种 可 能 ,考 虑 到 校 园 网 内 的 IP 数 量 不 超 过 10000 个 ,为 了 快 速 地 进 行 Hash 运 算 ,并 通 过 适 当 提高散列值地址范围来减少上列表的装填因子,可以将 Hash 后 的散列值定为 16 位,即将 IP 地址进行 Hash 运算后的散列值分 布在 0~65535 之间。 2.确 定 表 空 间 :由 于 校 园 网 内 IP 数 在 10000 以 内 ,IP 地 址 散列值为 16 位,则表空间大小为 65536 项。 3.确 定 冲 突 处 理 方 式 :使 用 链 地 址 法 进 行 冲 突 处 理 ,即 每 个