【问题标题】:What's the purpose in hashing information?散列信息的目的是什么?
【发布时间】:2018-12-22 04:17:26
【问题描述】:

在课堂上被教导如何创建哈希表后,我不明白哈希数据何时有用。在我看来,所有散列方法都是将信息存储在数组中的半随机位置。我想知道任何数据在存储后如何变得有用。

我的问题是:有哪些散列信息有益的例子?如何以任何有组织的方式检索数据?它似乎被放置在难以检索的任意位置。

【问题讨论】:

    标签: hash


    【解决方案1】:

    散列可用于多种用途:

    1. 可用于比较大量数据。您为数据创建哈希值,存储哈希值,然后如果您想比较数据,只需比较哈希值。

    2. 哈希可用于索引数据。它们可以在哈希表中用于指向正确的行。如果你想快速找到一条记录,你计算数据的hash,直接去对应hash记录所指向的记录。 (这假设您有一个指向实际记录的哈希排序列表)

    3. 它们可用于数字签名等加密应用。

    4. 散列可用于生成看似随机的字符串。

    以下是维基百科列出的哈希函数的应用:

    1. Finding duplicate records
    2. Finding similar records
    3. Finding similar substrings
    4. Geometric hashing

    现在关于哈希表,这里有几点需要注意:

    如果您使用的是散列表,表中的散列应该是有序的。如果没有,您将不得不在哈希列上创建一个索引。一些实现以排序的方式单独存储哈希并指向原始记录。

    如果有人以半随机顺序存储哈希,那一定是由于上述原因,或者因为他们只想存储信息的消息摘要以进行比较、查找重复等,而不是作为索引数据。

    【讨论】:

    • #1) 如果您查看 SQL Server 中的一些查询计划,您会发现哈希对于没有足够索引来覆盖列的查询非常非常重要。
    • 戴夫,感谢您添加。
    • 您可能会添加作为数据意外损坏的保护措施作为散列的另一个目的。
    【解决方案2】:

    您在课堂上创建的哈希表的主要用途之一是当您需要快速 O(1) 查找时间时。您将有两个组件,键和值。

    散列函数将键转换为散列。该哈希是一个数字,具体来说,它是数组中数据的索引。

    因此,当您需要在哈希表中查找 Agscala 的声誉并且您已使用您的用户名作为键时,几乎不需要任何时间来定位和找到相关值。它只是重新散列您的用户名和中提琴,这是您要查找的数据的索引。您不必遍历整个数组来查找该特定值。

    对于一些参考,Hash tables 上的维基百科页面非常好。

    【讨论】:

      【解决方案3】:

      哈希数据有几个典型的原因。在您引用的示例中,您将散列数据并将其用作键来提取散列项的实际值。散列后的数据通常被称为键,它引用一个可以找到实际非散列值的存储桶。

      另一个典型的原因是创建散列值的签名,以便您可以检查该值是否已被其他人更改。由于根据所使用的算法,将两个项目哈希到相同的值通常很少见,您可以重新哈希一个值并将其与保存的哈希值进行比较,以检查该项目是否仍然相同。

      【讨论】:

        【解决方案4】:

        散列是一种用于快速键查找的技术。它允许人们更有效地找到一个值,而不是从头到尾扫描一个列表。

        【讨论】:

          【解决方案5】:

          你用过字典或集合吗?它们通常以哈希表的形式实现,因为可以快速找到与键关联的值。

          {
          'WA': 'Washington',
          'WV': 'West Virginia',
          'WY': 'Wyoming'
          }
          

          【讨论】:

            猜你喜欢
            • 2010-12-25
            • 1970-01-01
            • 2012-01-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-07-22
            • 2011-11-13
            • 1970-01-01
            相关资源
            最近更新 更多