数据结构----散列

查找的本质: 已知对象求位置
K1: 有序安排对象:全序,半序
K2: 直接算出对象位置:散列
散列查找法的两项基本工作
计算位置:构造散列函数确定关键词存储位置
解决冲突:应用某种策略解决多个关键词位置问题
时间复杂度几乎是常量;O(1) ,即查找时间与问题规模无关。
散列表(哈希表):
**类型名称:**符号表(Symbol Table)
数据对象集:符号表是“名字(Name)----属性(Attribute)"对的集合。
操作集:
1.创建一个长度为TableSize的符号表
2.查找特定的名字Name是否符号Table中;
3.获取table中的指定名字Name对应的属性
4.将table中指定名字Name的属性修改为Attr
5.向Table中插入一个新名字Name及其属性attr
6.从Table中删除一个名字Name及其属性
装填因子(lpading Factor):设置散列表的空间大小为m,则称α=n/m为散列表的装填因子;
好的散列函数:
1.计算简单,以便提高转换速度;
2.关键词对应的地址空间分布均匀,以尽量减少冲突。
常见的函数构建方法:
数字关键词
1.直接定址法:取关键词的某个线性函数值为散列地址
2.除留余数法:h(key)=key mod p
3.数字分析法:分析数字关键字在各位上的变化情况,取比较随机的位作为散列地址。
4.折叠法:将关键词分割成位数相同的几个部分,然后叠加。
5.平方取中法:将数字关键词进行平方,然后取中间数。
字符关键词:
1.ASCll码加和法:
2.对1的改进,前三个字符移位法
3.移位法:

Index Hash(const char *Key,int TableSize)
{
    unsigned int h = 0;
    while(*Key!='\0')
        h = (h << 5) + *Key++;
    return h % TableSize;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不停---

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值