当前位置 博文首页 > 是Dream呀的博客:数据结构中散列表的简介

    是Dream呀的博客:数据结构中散列表的简介

    作者:[db:作者] 时间:2021-08-19 15:57

    散列表:

    ? 散列表是一种数据集,其中的数据项的存储方式尤其有利于将来快速的查找定位。
    ? 散列表中的每一个存储位置,成为槽(slot),可以用来保存数据项,每个槽有唯一一个的名称。
    ?例如:一个包含11个槽的散列表,槽的名称分别为0~10,在插入数据项之前,每个槽的值都是None,表示为空槽。
    ?实现从数据项到存储槽名称转化的,称为散列函数
    有一种常用的散列方法是:求余数,将数据项除以散列表的大小,得到的余数称为槽号。实际上求余数方法会以不同形式出现在所有散列函数里,因为散列函数返回的槽号必须在散列表大小范围之内,所以一般会对散列表大小求余。
    ?槽被数据项占据的比例称为散列表的**“负载因子”。**
    要查找某个数据项是否存在于表中,我们只需要使用同一个散列函数,对查找项进行计算,测试下返回的槽号所对应的槽中是否有数据项即可!实现O(1)时间复杂度的查找算法。
    缺陷:冲突,数据存在同一个槽里。

    解决冲突

    完美散列函数:给定一组数据项,如果一个散列函数能把每个数据项映射到不同的槽中,那么这个散列函数就可以称为:完美散列函数。对于一组固定的数据,总能想办法设计出完美散列函数。
    但如果数据项经常性的变动,很难有一个系统性的方法来设计对应的完美散列函数,当然冲突也不是致命性的错误,我们会有办法处理的。
    获得完美散列函数的一种方法是扩大散列表的容量,大到所有可能出现的数据项都能够占据不同的槽。
    但是这种方法对于可能数据项范围过大的情况并不实用,比如我们要保存手机号(11位),完美散列函数得要求散列表具备百亿个槽!会浪费太多的存储空间。
    退而求其次,好的散列函数需要具备的特性:
    1.冲突最少(近似完美)
    2.计算难度低(额外开销小)
    3.充分分散数据项(节约空间)
    **

    cs