📜  哈希的应用

📅  最后修改于: 2021-10-28 01:35:24             🧑  作者: Mango

在本文中,我们将讨论散列的应用。

散列平均提供恒定时间搜索、插入和删除操作。这就是为什么散列是最常用的数据结构之一,示例问题是不同的元素、项目的计数频率、查找重复项等。

散列还有许多其他应用,包括现代密码学散列函数。下面列出了其中一些应用程序:

  • 信息摘要
  • 密码验证
  • 数据结构(编程语言)
  • 编译操作
  • Rabin-Karp 算法
  • 将文件名和路径链接在一起

信息摘要:
这是加密哈希函数的一个应用。加密散列函数是产生输出的函数,从该输出到达输入几乎是不可能的。散列函数的这种特性称为不可逆性

让我们举个例子
假设您必须将文件存储在任何可用的云服务上。您必须确保您存储的文件没有被任何第三方篡改。您可以通过使用加密哈希算法计算该文件的“哈希”来实现。一种常见的加密哈希算法是SHA 256 。如此计算的散列的最大大小为 32 字节。所以一个计算
大量文件的散列不会有问题。您将这些哈希值保存在本地机器上。

现在,当您下载文件时,您将再次计算哈希值。然后将其与先前计算的哈希匹配。因此,您知道您的文件是否被篡改。如果有人篡改文件,文件的哈希值肯定会发生变化。在不更改哈希的情况下篡改文件几乎是不可能的。

密码验证
密码哈希函数在密码验证中非常常用。让我们用一个例子来理解这一点:
当您使用任何需要用户登录的在线网站时,您输入您的电子邮件和密码以验证您尝试使用的帐户属于您。当输入密码时,会计算密码的哈希值,然后将其发送到服务器以验证密码。存储在服务器上的密码实际上是原始密码的计算哈希值。这样做是为了确保当密码从客户端发送到服务器时,没有嗅探。

数据结构(编程语言):
各种编程语言都有基于哈希表的数据结构。基本思想是创建一个键值对,其中键应该是唯一值,而不同键的值可以相同。这个实现可以在 C++ 中的 unordered_set & unordered_map、 Java的HashSet & HashMap、 Python的dict 等中看到。

编译器操作:
编程语言的关键字与其他标识符的处理方式不同。为了区分编程语言的关键字(if、else、for、return 等)和其他标识符并成功编译程序,编译器将所有这些关键字存储在使用哈希表实现的集合中。

Rabin-Karp 算法:
散列最著名的应用之一是 Rabin-Karp 算法。这基本上是一种字符串搜索算法,它使用散列来查找字符串的任何一组模式。该算法的一个实际应用是检测抄袭。要了解有关 Rabin-Karp 算法的更多信息,请访问搜索模式 |第 3 组(Rabin-Karp 算法)。

将文件名和路径链接在一起:
在本地系统上移动文件时,我们观察到文件的两个非常重要的组成部分,即 file_name 和 file_path。为了存储 file_name 和 file_path 之间的对应关系,系统使用了一个 map(file_name, file_path),它是使用哈希表实现的。

相关文章:哈希与 BST
哈希与 Trie

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程