• 数据结构-哈希表-哈希函数-哈希冲突


    一.哈希冲突

    线性表(24,13,31,6,15,18,8)采用散列(Hash)法进行存储和查找,设散列函数为H(Key)=Key mod 11,则构造散列表时发生冲突的元素为()

    先看一个例题,可以明白什么是哈希冲突,线性表中的值通过哈希函数取得了相同的值,就是哈希冲突。

    散列表中有 m 个存储单元,散列函数 H(key)= key % p ,则 p 最好选择? 

    这题p最好大于等于m,当然散列表有相同元素依然能冲突,如果不满足,p最好选择小于等于m的最大素数。

    1 哈希表的平均查找长度

    哈希表的平均查找长度与哈希函数、冲突处理方法和装填因子有关,但与哈希表长无关。

    一般情况下哈希函数是均匀的,可不考虑它对平均查找长度的影响.

    2.线性探测再散列法

    散列表{1,2,3,4,5},而哈希函数hash(key)=key%3,则平均查找长度?

    1%3=1,查找1次

    2%3=2,查找1次

    3%3=0,查找1次

    4%3=1,产生冲突,将4之加1再通过散列函数为2,再冲突,再加1为3,查找3次。

    5%3=2,发生冲突,经过两次加1,为4,查找为3次 

    所以平均查找长度为(1+1+1+3+3)/5=9/5。

    3.装填因子a

    定义为存储的元素总个数除以哈希键值个数。装填因子越大,冲突的可能性越大

    装填因子是哈希表可装填的元素个数和表长度的比值,反映哈希表空间的装满程度及表空间的利用效率。装填因子可以在设计哈希表的时候可以设置其值大小,一般来说小于等于1(链地址法可以装填元素数量可以超过哈希表表长,所以链地址法装填因子可大于1

    4.开链法

    拉链法适用于造表前无法确定表长的情况。

    一个线性序列(30,14,40,63,22,5),假定采用散列函数Hash(key)=key%7来计算散列地址,将其散列存储在A[0~6]中,采用链地址法解决冲突。若查找每个元素的概率相同,则查找成功的平均查找长度

    存储取余

    0         14->63

    1        22

    2        30

    3        

    4        

    5        40->5

    平均查找长度为(4+2+2)/6=4/3.

  • 相关阅读:
    基于JAVA后台的微信垃圾分类小程序系统 开题报告
    美国市场三星手机超苹果 中国第一属华为
    排查log4j不输出日志到文件的问题
    python基础知识整理 04-文件、函数
    Typora打造最适合编程笔记的精美主题(浅色版和修改后的深色版),可自行修改喜欢的样式。
    条件构造器
    Android6.0+修改通知栏与页面样式保持一致
    Linux权限:权限的概念及管理、粘滞位
    前端js面试题 (一)
    Making a Difference to Differential Evolution
  • 原文地址:https://blog.csdn.net/xianzhetime/article/details/133377069