在教会如何在课堂上创建哈希表之后,我不明白哈希数据何时有用。在我看来,所有散列都是将信息存储在数组中的半随机位置。我想知道在存储之后如何使任何数据变得有用。
我的问题是:散列信息有益的一些例子是什么?如何以任何有组织的方式检索数据?它似乎被放置在难以检索的任意位置。
答案 0 :(得分:21)
哈希可用于多种目的:
它可用于比较大量数据。您可以为数据创建哈希值,存储哈希值以及稍后如果要比较数据,只需比较哈希值。
哈希可用于索引数据。它们可以在哈希表中用于指向正确的行。如果要快速查找记录,则计算数据的哈希值并直接转到相应哈希记录所指向的记录。 (这假设您有一个指向实际记录的哈希的排序列表)
它们可用于数字签名等加密应用程序。
哈希可用于生成看似随机的字符串。
以下是维基百科列出的哈希函数的应用程序:
现在关于哈希表,请注意以下几点:
如果您使用的是哈希表,则表中的哈希值应采用排序方式。如果没有,则必须在哈希列上创建索引。某些实现以排序的方式单独存储哈希并指向原始记录。
如果某人以半随机顺序存储哈希值,则必须是因为上述原因,或者因为他们只想存储信息的消息摘要以进行比较,查找重复项等而不是作为索引数据。
答案 1 :(得分:11)
您在课堂上创建的哈希表的主要用途之一是您需要快速O(1)查找时间。你将拥有两个组件,键和值。
哈希函数将密钥转换为哈希。该哈希是一个数字,具体而言,它是数组中数据的索引。
因此,当您需要在哈希表中查找Agscala的声誉并且您已使用您的用户名作为密钥时,几乎没有时间找到并找到相关值。它只是重新哈希您的用户名和中提琴,有您正在寻找的数据的索引。您不必遍历整个数组来查找该特定值。
对于某些参考,Hash tables上的维基百科页面非常好。
答案 2 :(得分:0)
哈希数据有几个典型的原因。在您引用的示例中,您将散列数据并将其用作提取散列项的实际值的键。散列数据通常被称为密钥,它引用了一个存储桶,可以找到实际的非散列值。
另一个典型的原因是创建散列值的签名,以便您可以检查该值是否已被其他人更改。由于根据所使用的算法,通常很少有两个项目散列到相同的值,您可以重新散列一个值并将其与保存的散列值进行比较,以检查该项目是否仍然相同。
答案 3 :(得分:0)
哈希是一种对快速键查找有用的技术。它允许人们更有效地找到值而不是从头到尾扫描列表。
答案 4 :(得分:0)
你曾经使用过字典或集吗?它们通常以哈希表的形式实现,因为可以快速找到与键相关联的值。
{
'WA': 'Washington',
'WV': 'West Virginia',
'WY': 'Wyoming'
}