散列存储(整理于百度百科)

(一)散列存储方式:

       散列存储,又称为hash存储,是一种力图将数据元素的存储位置与关键码之间建立确定关系的查找技术。

      (1.1)hash的基本概念:

          1)若结构中存在和关键字 K 相等的记录,则必定在 f(k) 的存储位置上。由此,不需要比较便可直接取得所查记录。    

               称这个对应关系 f 为散列函数(hash function),按这个事先建立的表为散列表。

          2)对不同的关键字可能得到同一散列地址,即k1 != k2,而 f(k1) = f(k2),这种现象就称为碰撞。

(二)散列存储的基本思想:

      由节点的关键码值决定节点的存储地址。

    (2.1)关键码:

            在数据结构中,指的是数据元素中能起标识作用的数据项。在数据库中体现为:主键,外键,超键,候选键。

(三)散列存储的特点:

       散列是数组存储方式的一种发展,相比数组散列的数据访问速度要高于数组,因为可以依据存储数据的部分内容找到数    据在数组中的存储位置,进而能够实现快速的访问,理想的散列访问速度是非常迅速的,而不像在数组中的遍历过程,采用存储数组中内容的部分元素作为映射函数的输入,映射函数的输出就是存储数据的位置。这样就省去了遍历数组的过程所用的时间。

(四)散列存储存在的问题:

       散列是一种快速实现访问的存储方式。通常作为检索部分的数据项是整型或者字符串,当时字符串时,字符串的数量要远大于数组的长度,这时候就会有多个字符串映射到一个存储位置的情况,这就是所谓的冲突问题。

(五)解决冲突的方式:

      (1)采用链表的形式,将所有冲突的数据项采用链表的形式链接起来,这样搜索数据的复杂度就包含了链表的遍历问题,特别是当所有项都链接到一个链表下时,这时候实际上就是遍历链表,复杂度不一定有很大的进步,但是这种链表链接的方式有很高的填充性。

      (2)充分利用没有实现的存储空间,利用探测法探测空闲的空间,进而实现数据的存储,目前有三种探测方式:线性探测法,平方探测法,以及双散列法,其中平方探测法运用比较多。

  


你可能感兴趣的:(散列存储(整理于百度百科))