算法打基础——HashⅡ: 全域哈希与完美哈希

算法打基础——HashⅡ:全域哈希与完美哈希的完整攻略

本文将为您提供关于全域哈希和完美哈希的完整攻略,包括算法原理、步骤和示例。

全域哈希

全域哈希是一种哈希函数族,它可以在不知道输入数据分布的情况下,将输入数据映射到哈希表中的不同位置。全域哈希的特点是,对于任意两个不同的输入数据,它们被映射到同一个哈希表位置的概率非常小。

算法原理

全域哈希的原理是,将输入数据与随机生成的哈希函数进行组合,得到一个哈希值。由于哈希函数是随机生成的,因此对于不同的输入数据,它们被映射到同一个哈希表位置的概率非常小。

算法步骤

全域哈希的步骤如下:

  1. 随机生成一组哈希函数。

  2. 将输入数据与哈希函数进行组合,得到一个哈希值。

  3. 将哈希值映射到哈希表中的一个位置。

  4. 重复步骤2-3,直到所有输入数据都被映射到哈希表中的不同位置。

示例

以下是一个示例,演示了如何使用全域哈希将输入数据映射到哈希表中的不同位置。

假设有以下输入数据:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

我们可以使用全域哈希将这些数据映射到哈希表中的不同位置。以下是步骤:

  1. 随机生成一组哈希函数。

h1(x) = (3x + 7) % 11
h2(x) = (5x + 11) % 13
h3(x) = (7x + 13) % 17

  1. 将输入数据与哈希函数进行组合,得到一个哈希值。

h1(1) = 10
h2(1) = 1
h3(1) = 14
h1(2) = 0
h2(2) = 8
h3(2) = 4
h1(3) = 9
h2(3) = 3
h3(3) = 15
h1(4) = 7
h2(4) = 6
h3(4) = 16
h1(5) = 6
h2(5) = 9
h3(5) = 0
h1(6) = 4
h2(6) = 12
h3(6) = 3
h1(7) = 2
h2(7) = 2
h3(7) = 10
h1(8) = 1
h2(8) = 5
h3(8) = 13
h1(9) = 11
h2(9) = 11
h3(9) = 1
h1(10) = 8
h2(10) = 1
h3(10) = 14

  1. 将哈希值映射到哈希表中的一个位置。

[10, 1, 14, 0, 8, 4, 9, 6, 16, 3, 15, 2, 11, 5, 13, 7, 12]

  1. 所有输入数据都被映射到哈希表中的不同位置。

完美哈希

完美哈希是一种哈希函数,它可以将输入数据映射到哈希表中的不同位置,且不会出现哈希冲突。完美哈希的特点是,对于已知的输入数据集合,它可以生成一个哈希函数,使得所有输入数据都被映射到哈希表中的不同位置。

算法原理

完美哈希的原理是,先使用全域哈希将输入数据映射到哈希表中的不同位置,然后再使用一个二次哈希函数对哈希表中的每个位置进行哈希,得到一个哈希值。由于二次哈希函数是根据已知的输入数据集合生成的,因此不会出现哈希冲突。

算法步骤

完美哈希的步骤如下:

  1. 使用全域哈希将输入数据映射到哈希表中的不同位置。

  2. 对哈希表中的每个位置使用一个二次哈希函数进行哈希,得到一个哈希值。

  3. 将哈希值映射到哈希表中的一个位置。

  4. 重复步骤2-3,直到所有输入数据都被映射到哈希表中的不同位置。

示例

以下是一个示例,演示了如何使用完美哈希将输入数据映射到哈希表中的不同位置。

假设有以下输入数据:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

我们可以使用完美哈希将这些数据映射到哈希表中的不同位置。以下是步骤:

  1. 使用全域哈希将输入数据映射到哈希表中的不同位置。

[10, 1, 14, 0, 8, 4, 9, 6, 16, 3, 15, 2, 11, 5, 13, 7, 12]

  1. 对哈希表中的每个位置使用一个二次哈希函数进行哈希,得到一个哈希值。

h(x) = (3x^2 + 5x + 7) % 17
h(10) = 2
h(1) = 0
h(14) = 0
h(0) = 7
h(8) = 4
h(4) = 0
h(9) = 4
h(6) = 7
h(16) = 2
h(3) = 2
h(15) = 4
h(2) = 2
h(11) = 4
h(5) = 7
h(13) = 0
h(7) = 7
h(12) = 0

  1. 将哈希值映射到哈希表中的一个位置。

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

  1. 所有输入数据都被映射到哈希表中的不同位置。

结论

全域哈希和完美哈希是两种常用的哈希函数,它们可以将输入数据映射到哈希表中的不同位置。全域哈希适用于不知道输入数据分布的情况下,而完美哈希适用于已知输入数据集合的情况下。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:算法打基础——HashⅡ: 全域哈希与完美哈希 - Python技术站

(0)
上一篇 2023年5月6日
下一篇 2023年5月6日

相关文章

  • 如何修改自己的电脑子网掩码、网关、IP/DNS地址?

    如何修改电脑的子网掩码、网关、IP/DNS地址 在修改电脑的子网掩码、网关、IP/DNS地址之前,请确保您具有管理员权限。以下是修改这些设置的步骤: 1. 打开网络设置 首先,打开控制面板或系统设置,然后选择“网络和互联网”选项。 2. 进入网络适配器设置 在“网络和互联网”选项中,找到并点击“网络和共享中心”链接。在新窗口中,您将看到当前连接的网络名称,旁…

    other 2023年7月30日
    00
  • SQL Server查询某个字段在哪些表中存在

    如果我们想要查询一个字段在哪些表中存在,可以使用下面的SQL语句: SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = ‘your_column_name’; 其中,INFORMATION_SCHEMA.COLUMNS 存储了所有数据库中表的列信息。通过…

    other 2023年6月25日
    00
  • 基于Jquery插件Uploadify实现实时显示进度条上传图片

    下面是基于jQuery插件Uploadify实现实时显示进度条上传图片的完整攻略: 1. 准备工作 先从官网下载并解压Uploadify插件。接着在项目中引入依赖文件,主要包括jquery、uploadify.js和uploadify.css。这里以CDN方式引入jQuery和Uploadify依赖文件: <!– 引入jQuery –> &l…

    other 2023年6月27日
    00
  • Spring使用注解和配置文件配置事务

    一、Spring使用注解配置事务 在使用Spring进行事务管理时,可以使用注解来标识事务管理的方法。具体步骤如下: 1.引入依赖 在pom.xml文件中,引入Spring事务的依赖: <dependency> <groupId>org.springframework</groupId> <artifactId&gt…

    other 2023年6月25日
    00
  • Android 对话框(Dialog)大全详解及示例代码

    Android 对话框(Dialog)大全详解及示例代码 什么是 Android 对话框(Dialog)? Android 对话框(Dialog)是一种常用的用户界面元素,用于向用户显示重要信息、接收用户输入或进行用户确认。对话框通常以弹出窗口的形式出现,覆盖在当前活动或片段之上。 常见的 Android 对话框类型 1. 提示对话框(AlertDialog…

    other 2023年8月23日
    00
  • jQuery简单实现禁用右键菜单

    当我们需要禁用网页上的右键菜单时,可以使用jQuery来实现这一功能。下面是使用jQuery简单实现禁用右键菜单的完整攻略: 1. 在HTML文件中引入jQuery库文件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit…

    other 2023年6月27日
    00
  • Win10 19H1慢速预览版18362.1怎么手动更新升级?

    下面是详细的攻略: 1. 手动下载19H1慢速预览版18362.1更新包 首先,需要下载Win10 19H1慢速预览版18362.1的更新包。你可以从微软的官方网站或者其他可靠的下载站点上下载该更新包。例如,假设你从官方网站上下载了该更新包,该文件的名称为“Windows10.0-KB4495667-x64.cab”,那么你可以按照以下步骤来手动更新: 点击…

    other 2023年6月27日
    00
  • 好用的新浪短链接生成器推荐(附t.cn短网址接口)

    以下是关于“好用的新浪短链接生成器推荐(附t.cn短网址接口)”的完整攻略,包括基本概念、解决方法、示例说明和注意事项。 基本概念 短链接是一种将长链接转换为短链接的技术,可以将长链接转换为短链接,方便用户在社交媒体、微博、微信等平台上分享链接。新浪短链接生成器是一种可以将长链接转换为新浪短链接的工具,可以帮助用户生成短链接,提高链接的分享效果。 解决方法 …

    other 2023年5月7日
    00
合作推广
合作推广
分享本页
返回顶部