哈希算法及其拓展
本篇是iOS逆向开发的递进篇-关于哈希算法、数字签名及对称加密等,下面我们着重讲解此内容,希望对大家有所帮助!!! 一、哈希 1.1 基本内容 哈希表也称为散列表(Hash table),是根据关键码值(key,value),直接进行访问的数据结构。通过把关键码映射到表中的一个位置来进行访问记录,用来加快查找速度。映射函数也称之为散列函数,存放记录数组称为散列表。 假设没有内存限制,直接可以将键作为数组的索引,那么所有的查找仅仅需要一次即可完成。但是这种理想的情况也不会一直出现,因为牵扯到内存问题。从另一个角度来说,如果没有时间来限制,我们也可以使用无序数组并进行顺序查找,这样也会使用较少的内存。 使用哈希查找算法分为两个步骤: 使用Hash函数将被要查找的键转化为数组中的一个索引。理想情况下,不同的键都可以转为不同的索引值。但这仅仅是理想情况下,在实际的开发运算中,我们还是要处理两个或者多个键值散列到同个索引值的情况。 要处理碰撞冲突的过程。 目前本人博客关于讲述哈希思想查找元素的博客有: https://www.cnblogs.com/guohai-stronger/p/11506990.html ,还会持续更新此类算法思想有关的题目。 1.2 哈希函数的两种解决碰撞的方式 1.2.1 拉链法(separate chaining) 拉链法简单说就是链表+数组