哈希如何在编程中起作用?我如何看待哈希是一种允许我使用一些唯一值来检索某些数据的能力。就像我们有一个数组并且我开始将数据放入数组中一样,如果我有另一个变量来跟踪插槽0,1,2中的项目,那么我就有了查找项目的即时功能。那是哈希吗?
哈希的目的是什么?
什么时候应该实现哈希?在数据结构方面类似的哈希是什么?
我认为我对哈希的了解是,它允许我们在O(1)中检索项目。这是对的吗?
答案 0 :(得分:11)
哈希就像一个人的名字 - 这是一个记住一个人的简短方法,即使它不必是唯一的。如果您需要查找某人的某些信息,您可以通过他们的名字查找,如果两个或更多人具有相同的名称,您只需要执行其他检查。
这就是散列的力量,正如记住人们的名字要比社会安全号码容易得多,通过散列码查找对象比将对象与集合中已有的所有内容进行比较要容易得多。
现在,在这个例子中,如果你是按名字在电话簿中查找某人,你可能会在O(log n)时间内找到它们,因为名字按字母顺序排序,因为你需要做二进制搜索。但是,如果您在出生年份“淘汰”出生于20世纪的100个人,那么您只需要在哈希表/电话簿(每个数字一个)中最多进行4次比较,以便通过哈希查找任何一年,是恒定的时间。然后,如果两个人在同一年出生,您可以使用其他信息找到您需要的人,平均而言,如果您的餐桌不是太满(例如,如果您的餐桌最多不超过100人,那么出生时),你的查找将是恒定时间。
(如果您的表格超过,比如50%已满,您可以将其大小加倍,以保持较低的冲突次数,从而保持您的查找速度快。)
更多信息:
如果你听说过文件的 MD5或SHA-1 SHA-2哈希值,它们就像是文件的“指纹”。虽然可能有两个具有相同散列的文件,但实际上这是不可能的,这是不可能的;因此,如果您有两个文件的哈希值,您可以通过指纹而不是数据来比较文件,这非常快。
答案 1 :(得分:8)
哈希映射/字典是一种键/值数据结构,它根据哈希函数的值将对象存储在存储桶中。这些键必须是唯一的,但哈希函数值(有时称为哈希码)不一定是唯一的。
就像我们有一个数组并且我开始将htings放入数组中一样,如果我有另一个变量来跟踪插槽0,1,2中的项目...那么我有即时查找的能力项目。那是哈希吗?
没有。哈希函数是一个确定性函数,它总是为对象提供相同的值。哈希码不会根据对象的存储位置而改变。
我认为我对哈希的了解是,它允许我们在O(1)中检索项目。这是对的吗?
近。字典具有O(1)查找复杂度如果没有太多的哈希码冲突。但是,如果散列函数较差且每个对象具有相同的散列值,则字典可能具有O(n)性能。
答案 2 :(得分:1)
hash
使查找速度快,而不是迭代数组或树。它可以在很少使用内存的情况下搜索O(1)
时间。