Hash(哈希/散列)
来源:互联网 发布:网页数据统计 编辑:程序博客网 时间:2024/05/14 10:28
Hash:一种用于查找的数据结构
散列查找的前提是已经一定的规则方法建好了哈希表。基本思想是:”关键字-地址转换法“->以数据对象的关键字为自变量,通过一个确定的函数关系h,计算出对应的函数值h(key),把这个值解释为数据对象的存储地址,并按此存放,即存储位置=h(key)
关键:
1.构造好的散列函数
2.制定解决冲突(经过散列变换,可能将不同的关键字映射到同一散列地址上)的方案
散列函数构造方法:
1.直接定址法
h(key)=a*key+b (a,b为常数)
2.除留余数法(重点)
假设散列表的表长为TableSize,选择一个正整数p,p<=TableSize,构造散列函数:h(key) = key mod p。一般选p为小于等于散列表表长TableSize的某个最大素数为好。用素数求余数作为散列地址,比较均匀的分布在整个地址空间的可能性比较大。(如果p<TableSize,则地址p~TableSize-1是不能通过散列函数直接映射到的,不过不用担心浪费,处理冲突时可能会用到
处理冲突的方法:
常用开放地址法:发生冲突后,寻找空的散列地址,基本公式:一般来说,发生了第i次冲突,试探的下一个地址将增加di,hi(key)=(h(key)+di) mod TableSize
1.线性探测法(重点):
di选为i,就为线性探测。即线性探测法以增量序列1,2,3,......,TableSize-1循环试探下一个存储地址,做插入操作时,要找到一个空位置,或者知道散列表已满为止。做查找操作的时候,探测一个比较一次关键词,直到找到特定的数据对象或者探测到一个空位置表示查找失败为止。
成功查找的平均查找长度:成功查找序列每个数据的次数和/序列数的个数
查找失败的平均查找长度:把查找失败的数据分为TableSize类,即0~TableSize-1(就像人再多,可分为男人女人),每类数据查找失败的次数和/TableSize
2.平方探测法:
di=i^2和-i^2,即增量序列为1^2,-1^2,2^2,-2^2,......,q^2,-q^2
有一个定理:如果散列表长度TableSize是某个4*k+3(k是正整数)形式的素数时,平方探测法就可以探查到整个散列表空间
- Hash(哈希/散列)
- hash(哈希,散列)
- Hash-哈希/散列 基础知识梳理
- 散列hash小结
- 散列(hash)
- 散列hash
- Hash散列存储
- 散列(hash)
- 散列(hash table)
- 散列(Hash)
- 散列(hash)
- 单向散列函数(Hash)
- 数据结构 - 散列 Hash 摘要
- 散列查找 哈希表 Hash
- 单向散列函数(Hash)
- Hash查找,散列查找
- 散列(Hash)目录
- 整数Hash散列总结
- NSDate和NSString相互转换
- 如何让你的.vue在sublime text 3 中变成彩色?
- Java语言基础变量的概述及格式
- 打造Ubuntu16.10桌面及Vim的C++版 IDE
- TypeScript入门-8.析构表达式
- Hash(哈希/散列)
- 简洁明了的UI交互手册
- Android 基于Message的进程间通信 Messenger完全解析【转】
- compileSdkVersion,minSdkVersion,targetSdkVersion 的区别和比较
- python中in在list和dict中查找效率比较
- Struts2
- 流处理基本介绍
- CentOS安装RabbitMQ
- IO流面试题