哈希竞猜游戏系统搭建原理
概念
哈希表是一个键值存储数据的结构。我们可以通过输入要查找的值来查找相应的值,即key
哈希的思想非常简单。如果所有键都是整数,则可以使用一个直观的无序数组来实现它:将键作为索引,值是其对应的值。通过这种方式,您可以快速访问任何键的值。直观按键的情况就是这样,我们将其扩展以处理更复杂类型的键
使用哈希查找有两个步骤:
1使用哈希函数将找到的键转换为数组的索引。完美情况之下,有所不同的键将被转换为有所不同的索引值,但在某些情况之下,我们需要处理多个键被散列为相同索引值的情况。因此,哈希查找的第二步是处理冲突
2处理哈希冲突。有许多方法可以处理哈希冲突。
哈希表是时间和空间间权衡的经典示例。如果没有内存限制,可以直接使用键作为数组的索引。那么所有的搜索时间复杂度都是o,如果没有时间限制,我们可以使用无序数组并执行顺序查找,这需要很少的内存。哈希表使用适当的时间和空间在这两个极端间找到均衡。只要调整哈希函数算法,在时间和空间之上做出选择即可。
在哈希表之中,记录在表中的位置与其关键性字间存在一定的关系。这样,我们可以提前知道关键性字在表中的位置,然后通过下标间接找到记录。使ASL接近0。
1哈希函数是一个映像,即将一组关键性字映射到一个地址集。它的设置非常灵活,只要地址集的大小不超过允许的范围
2由于哈希函数是压缩映像,通常很容易产生“冲突”现象,即:key1=Key2,而 f (key1)= f(key2)。
3冲突只能最小化,但不能完全避免。这是因为关键性字集通常很大,它的元素包括所有可能的关键性字,而地址集合的元素仅为哈希表中的地址值在构造这种特殊的“查找表”时,除了需要选择一个“好”(尽可能少产生冲突)的哈希函数之外;还需要找到一种“处理冲突”的方法
之中的地址值;尽量减少冲突;在的哈希函数以外;您还需要找到“处理冲突”的方法
哈希算法种类很多,但是它们都具有如下四大性质:
哈希算法性质一:等长性
不管输入的数据是长是短,算法得出的哈希值都具有相同的长度。哈希值往往很短,通常只有一两百个字节,占用的存储空间很小。
哈希算法性质二:单向性
由数据得出哈希值非常容易,但是从哈希值推导出原始数据是不可能的,即使在知道哈希算法细节的情况下也不可能。这一特性对于确保区块链的安全性至关重要。
哈希算法性质三:无序性
就算原始数据仅仅改变一个字节,它的哈希值也会变得面目全非,完全没规律。当然,现实中的哈希值不会是任何有含义的文字,往往是一串随机字符。
哈希算法性质四:一一对应性
同一个原始数据用同样的哈希算法,永远得到同样的哈希值,一个哈希值只能有唯一的数据值与其相对应。