首页 > 其他分享 >20230410 11.2. 散列函数的构造方法

20230410 11.2. 散列函数的构造方法

时间:2023-06-20 11:36:31浏览次数:39  
标签:函数 构造方法 关键词 20230410 hashCode key 散列 mod

一个“好”的散列函数一般应考虑下列两个因素:

  1. 计算简单,以便提高转换速度;
  2. 关键词对应的地址空间分布均匀,以尽量减少冲突。

数字关键词的散列函数构造

  1. 直接定址法

    取关键词的某个线性函数值为散列地址,即 \(h(key) = a * key + b (a、b为常数)\)

  2. 除留余数法

    散列函数为:\(h(key) = key \mod p\)

  3. 数字分析法

    分析数字关键字在各位上的变化情况,取比较随机的位作为散列地址

  4. 折叠法

    把关键词分割成位数相同的几个部分,然后叠加

  5. 平方取中法

字符关键词的散列函数构造

  1. 一个简单的散列函数——ASCII码加和法

    对字符型关键词key定义散列函数如下:$ h(key) = (Σkey[i]) \mod TableSize$

  2. 简单的改进——前3个字符移位法

    \(h(key)=(key[0]*27^2 + key[1]*27 + key[2])\mod TableSize\)

  3. 好的散列函数——移位法

    涉及关键词所有n个字符,并且分布得很好:

    \(h(key)=(\sum_{i=0}^{n-1}key[n-i-1]*32^i) \mod TableSize\)

Java 关联

  • Object#hashCode
  • Integer#hashCode
  • String#hashCode

标签:函数,构造方法,关键词,20230410,hashCode,key,散列,mod
From: https://www.cnblogs.com/huangwenjie/p/17490521.html

相关文章

  • 20230410 11.3. 冲突处理方法
    处理冲突的方法开放地址法:换个位置链地址法:同一位置的冲突对象组织在一起散列表查找性能分析成功平均查找长度(ASLs)不成功平均查找长度(ASLu)开放定址法(OpenAddressing)一旦产生了冲突(该地址已有其它元素),就按某种规则去寻找另一空地址若发生了第i次冲突,试探的下一......
  • 20230410 11.4. 散列表的性能分析
    平均查找长度(ASL)用来度量散列表查找效率:成功、不成功关键词的比较次数,取决于产生冲突的多少影响产生冲突多少有以下三个因素:散列函数是否均匀;处理冲突的方法;散列表的装填因子α开放地址法:散列表是一个数组,存储效率高,随机查找。散列表有“聚集”现象分离链法:散列......
  • 85 构造方法 空参和带参
    对象packagecom.fqs.demo061302;publicclassGirl{//属性//成员变量privateStringname;privateintage;/*publicvoidsetAge(intage){//【局部变量】名称可以和上面的【成员变量】一样//赋值if(age<50&&age>18){......
  • 构造方法的使用
    一、什么是构造方法    在一个类中存在着一个特殊的成员方法,名字与类名相同,没有返回值类型,通常用public修饰,这个特殊的成员方法就是构造方法。创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次。 构造方法可以进行重载。 当没有定义构造方法时,系统会默......
  • 5.8 构造方法与匿名对象
    classPerson{privateStringname;//private对外不可修改,对类内部是可见的;settergetter设置或获得属性;privateintage;//98%都需要封装的;//构造方法的重载;publicPerson(){name="无名氏";age=-2;}publicPer......
  • 渐变色Panel构造方法的重写
    #此类用于设置渐变色panelclassMyPanel(wx.Panel):def__init__(self,parent):wx.Panel.__init__(self,parent,wx.ID_ANY)self.SetBackgroundStyle(wx.BG_STYLE_PAINT)self.Bind(wx.EVT_PAINT,self.OnPaint)self.Bind(wx.EVT_SIZ......
  • 继承中构造方法案例
    /***创建一个教师类,有姓名和年龄两个参数*打印出比如“姓名为张三年龄30岁的老师正在讲课”*创建一个学生类,有姓名,年龄,成绩三个参数*打印出比如“姓名为李四年龄20岁成绩100分的学生正在上课”*///测试类publicclasstest1{publicstaticvoidmain(String[......
  • Java面向对象之构造方法
    方法重载Overload  1.概念:一个类中的一组方法 相同的方法名字 不同的参数列表 构成了方法重载参数的不同体现在 参数的个数 参数的类型 参数的顺序三个方面  2.作用:为了便于记忆和调用使得方法调用时更加的灵活  3.自己也可以设计方法重载   ......
  • Java的构造方法和标准JavaBean
    构造方法一、构造方法概述:构造方法也叫做构造器,构造函数,平时叫做构造方法二、构造方法的作用:创建对象的时候,由虚拟机自动调用,给成员变量进行初始化(赋值)三、构造方法的格式:publicclassstudent{修饰符类名(参数){​ 方法体;​ }}四、特点:方法名与类名相同,大小......
  • 为啥this和super关键字在构造方法中只能写在第一行
    首先对于super:super关键字会在子类的构造方法中使用,用来对父类属性进行初始化,而super必须放在第一行,因为子类有可能使用父类属性,就必须在使用之前先对父类属性完成初始化。对于this关键字: 如上代码:this关键字必须写在构造方法的第一行,因为如果在this关键字之前的代码用到了C0......