算法初步-散列-《算法笔记》同步笔记总结与补充

专题要点:

散列最重要的运用就是方便查找,提高效率。个人认为本专题是对提高代码效率的最基础最常用最有效的方法,必须掌握。常见的数组散列表有,字母表,ASCII码,数字表等。

几点注意:

  1. 当数据量小时,可将数据值作为数组下标
  2. 当数据量大时,取余
  3. 二维坐标散列:H(Point) = x * Range + y (x >= 0, y <= Range)
  4. 字母散列:个人常用int H = c - ‘a’ 来转化为整型,或者直接用ASCII码表即,bool asc[130]。另外,将字符做数组下标时hashTable[str[i] ],会被强制转化为ASCII码的int型
  5. 含数字和大小写字母时,除了ASCII码表散列之外,可使用
    ‘9’ (数字 str[i])- ‘0’
    ‘Z’ (大写字母 str[i])- ‘A’ + 10
    ‘z’ (小写字母str[i])- ‘a’ + 36
    来转化(其中’9’, ‘Z’, 'z’可用任意字母代替)
  6. 进制散列:参考进制转换,从头开始遍历,从R的0次方到R的n-1次方(n位数),如三个字母的散列:26 * 2 + str[0] + 26 * 1 + str[1] + 26 * 0 + str[2]
  7. 图中边的散列:边的两个顶点u,v,数据范围为10000,其hash函数可写作hash(u,v) = u * 10000 + v(v * 10000 + u),其中u,v一定不同,因此hash不会冲突
  8. 其他散列方法:构造字典(位置要 一 一 对应)
    dict[6] = {, , , , , }
    cnt[6] = { , , , , ,}
    可构造出字母和次数之间的映射关系,类似map(此处两数组数据位置相同)
  9. 其他散列方法:当数组数据位置无法保证相同时,且数据量比较合理时,可用一个数组的值,当作另一个数组的索引进行查找
  10. 注意数组或字符串的范围如,PAT.A1050,A1041

多用多熟悉!本专题题目不难!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值