知识大全 查找 - 散列技术 - 散列函数的构造方法
Posted 函数
篇首语:人还是要乐观,心碎了就对自己说,碎碎平安。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 查找 - 散列技术 - 散列函数的构造方法相关的知识,希望对你有一定的参考价值。
散列函数的构造方法
散列函数的选择有两条标准 简单和均匀
简单指散列函数的计算简单快速;
均匀指对于关键字集合中的任一关键字 散列函数能以等概率将其映射到表空间的任何一个位置上 也就是说 散列函数能将子
集K随机均匀地分布在表的地址集 … m 上 以使冲突最小化
常用散列函数
为简单起见 假定关键字是定义在自然数集合上
( )平方取中法
具体方法 先通过求关键字的平方值扩大相近数的差别 然后根据表长度取中间的几位数作为散列函数值 又因为一个乘积的中
间几位数和乘数的每一位都相关 所以由此产生的散列地址较为均匀
【例】将一组关键字( )平方后得
( )
若取表长为 则可取中间的三位数作为散列地址集
( )
相应的散列函数用C实现很简单
int Hash(int key) //假设key是 位整数
key*=key; key/= ; //先求平方值 后去掉末尾的两位数
return key% ; //取中间三位数作为散列地址返回
( )除余法
该方法是最为简单常用的一种方法 它是以表长m来除关键字 取其余数作为散列地址 即 h(key)=key%m
该方法的关键是选取m 选取的m应使得散列函数值尽可能与关键字的各位相关 m最好为素数
【例】若选m是关键字的基数的幂次 则就等于是选择关键字的最后若干位数字作为地址 而与高位无关 于是高位不同而低位相
同的关键字均互为同义词
【例】若关键字是十进制整数 其基为 则当m= 时 … 等均互为同义词
( )相乘取整法
该方法包括两个步骤 首先用关键字key乘上某个常数A(
>
该函数的C代码为:
int Hash(int key)
double d=key *A; //不妨设A和m已有定义
return (int)(m*(d-(int)d));//(int)表示强制转换后面的表达式为整数
(4)随机数法
选择一个随机函数,取关键字的随机函数值为它的散列地址,即
h(key)=random(key)
其中random为伪随机函数,但要保证函数值是在0到m-1之间。WINgwIt.CoM
cha138/Article/program/sjjg/201311/23686相关参考
设给定关键字输入序列为()用散列法散列的地址区间要求设计一合理的散列函数;冲突时用链表法解决写出散列算法并构造出散列表在等概率查找情况下查找成功的平均查找长度是多少?【东北大学 四(分)
散列方法不同于顺序查找二分查找二叉排序树及B树上的查找它不以关键字的比较为基本操作采用直接寻址技术在理想情况下无须任何比较就可以找到待查关键字查找的期望时间为O() 散列表的概念 散列表 设
散列表上的运算 散列表上的运算有查找插入和删除其中主要是查找这是因为散列表的目的主要是用于快速查找且插入和删除均要用到查 找操作 散列表类型说明 #defineNIL//空结点标记依赖于关
处理冲突的方法 通常有两类方法处理冲突开放定址(OpenAddressing)法和拉链(Chaining)法前者是将所有结点均存放在散列表T[m ]中;后者通常是将互为同义词的结点链成一个单链
设散列表长度为散列函数h(x)=x%给定的关键字序列为试画出分别用拉链法和线性探查法解决冲突时所构造的散列表并求出在等概率情况下这两种方法查找成功和失败时的平均查找长度请问装填因子的值是什么?&nbs
设散列表长度为散列函数h(x)=x%给定的关键字序列为试画出分别用拉链法和线性探查法解决冲突时所构造的散列表并求出在等概率情况下这两种方法查找成功和失败时的平均查找长度请问装填因子的值是什么?&nbs
(五)散列(Hash)表 定义 哈希函数类似于数学中定义的函数每个值都能通过哈希函数算出对应值的 哈希表根据设定的哈希函数和处理冲突的方法将一组关键字
散列技术将结点按其关键字的散列地址存储到散列表的过程称为散列 散列函数的选择有两条标准简单和均匀 常见的散列函数构的造方法 ·平方取中法hash=int((x^)%) ·除余法表长为mha
散列文件的组织方式 散列文件是利用散列存储方式组织的文件亦称直接存取文件即根据文件中关键字的特点设计一个散列函数和处理冲突的方 法将记录散列到存储设备上 散列表与散列文件比较 > 基桶和
第十一章 文件 一选择题 散列文件使用散列函数将记录的关键字值计算转化为记录的存放地址因为散列函数是一对一的关系则选择好的( )方法是散列文件的关键