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