zoukankan      html  css  js  c++  java
  • 算法与数据结构之哈希表

    哈希表:是一种key-value存储数据的结构

    使用哈希表的两个步骤:

      1.无序数组:将键值key转化为对应的索引(f(key)),根据索引来寻找对应的值(value)

      2.解决哈希冲突:当key值不同,但f(key)相同

    哈希函数:将key映射到对应的索引的映射函数f(x)即为哈希函数。

      1.键为整数时,哈希函数一般为除留余数法。即对于大小为素数M的数组,对于任意正整数k,计算k除以M的余数。M一般取素数。

      2.键为字符串时,

        1>.将组成字符串的每一个字符取值然后进行哈希

            h = s[0] · 31L–1 + … + s[L – 3] · 312 + s[L – 2] · 311 + s[L – 1] · 310

    比如要获取”call”的哈希值,字符串c对应的unicode为99,a对应的unicode为97,L对应的unicode为108,所以字符串”call”的哈希值为 3045982 = 99·313+ 97·312 + 108·311 + 108·31= 108 + 31· (108 + 31 · (97 + 31 · (99)))

         2>.间隔N个字符来取字符的哈希值,然而可能有哈希冲突。

    e.g.不同的字符串会产生相同的哈希值,按照每8个字符取哈希的话,就会得到一样的哈希值

    避免哈希冲突:

        <1>拉链法(hashmap的冲突处理方式):数组+链表

              使用链表将key值不同,但f(key)相同的数据存储起来

      

        <2>开放寻址法:     

    基本思想:当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi ,将相应元素存入其中。

     

    更为详细的哈希表映射方法见博客

     

     

  • 相关阅读:
    Spring缓存注解@Cacheable、@CacheEvict、@CachePut使用
    分布式架构2:Nginx下Session存储
    分布式架构3:MySQL集群(Mysql Cluster7.5.5)
    分布式架构1:Nginx实现负载均衡
    Oracle 触发器记录
    [Deprecation Notice] 本博客弃用, 迁移至新博客
    KM算法 O(n^3)最大权完美匹配
    Python 学习笔记(附 Pytorch)
    你一定看的懂的:vlan与交换机端口的三种模式access,trunk和hybrid
    Git代码回滚
  • 原文地址:https://www.cnblogs.com/lemon333333/p/10288333.html
Copyright © 2011-2022 走看看