background info

  • requirement

    1.编译处理中对变量管理:
    实际是动态查找问题
    hash search
    2.是否可以把字符串转化为数字处理?
    hash searchhash search
    2.例二
    hash search半序 : 某些item中存在某种顺序
    eg 查找树,节点比其左子树大,但小于其右子树,但并非(二分查找)完全有序(全序)
    hash search
    (1)设计一个函数–>将对象映射成为较小数(即对象存储的位置)
    (2)解决冲突

  • ADT
    hash search
    hash search
    hash search
    hash search


散列函数构造方法

数字关键字
hash search
hash search
hash search
hash search
hash search

字符关键字
hash search

1.如果直接计算’a’*324+‘b’*323+‘c’*32^2+‘d’*32+'e’所需要的乘法总次数是4+3+2+1=10次。
2.采用 (((‘a’*32+‘b’)*32+‘c’)*32+‘d’)*32+'e’的计算方法,乘法总次数是4次
3.xx32 : X<<5 (x左移5位即乘32)
(两者时间效率的差别?)
hash search
p取素数可以使数据集中的数等概率映射到哈希表中,降低冲突概率。

Q : 在除留余数法中,为什么p要取素数?
A : 观察一组有规律的数据集key = {0, k, 2k, 3k, 4k, 5k, 6k…}用除留取余法进行散列映射(这里认为k是一个素数)
(1) 若取模p为一个素数(p当然不为k,不然取素数就没有意义了),那么h(key)将在(0, 1, 2, … , p-1)上等概率映射
(2) 而p不为素数时,最糟糕的情况莫过于p为k的整数倍,不妨设p = nk,那么h(0) = h(nk) = h(2nk) = … = 0, h(k) = h((n+1)k) = h((2n+1)k) = … = k…
即:所有数据被等概率映射到了(0, k, 2k, … , (n-1)k)的位置,其它位置(1, 2, … , k-1)等都是空缺,这就造成了大规模的冲突

相关文章:

  • 2021-12-05
  • 2021-07-15
  • 2021-07-23
  • 2022-02-19
  • 2021-09-06
  • 2021-09-22
  • 2021-08-20
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-01
  • 2022-12-23
  • 2021-06-01
  • 2021-07-06
相关资源
相似解决方案