zoukankan      html  css  js  c++  java
  • 数据结构:哈希表(六)

    一、哈希表

    1、表查找

    哈希表(HashTable,又称为散列表),是一种线性表的存储结构。通过把每个对象的关键字k作为自变量,通过一个哈希函数h(k),将k映射到下标h(k)处,并将该对象存储在这个位置。

    例如:数据集合{1,6,7,9},假设存在哈希函数h(x)使得h(1) = 0, h(6) = 2, h(7) = 4, h(9) = 5,那么这个哈希表被存储为[1,None, 6, None, 7, 9]。
    当我们查找元素6所在的位置时,通过哈希函数h(x)获得该元素所在的下标(h(6) = 2),因此在2位置即可找到该元素

     2、哈希函数

    哈希函数种类有很多,这里不做深入研究。
    哈希冲突:由于哈希表的下标范围是有限的,而元素关键字的值是接近无限的,因此可能会出现h(102) = 56, h(2003) = 56这种情况。此时,两个元素映射到同一个下标处,造成哈希冲突。

    二、解决哈希冲突

    哈希冲突:由于哈希表的下标范围是有限的,而元素关键字的值是接近无限的,因此可能会出现h(102) = 56, h(2003) = 56这种情况。此时,两个元素映射到同一个下标处,造成哈希冲突。

    1、开放寻址法

     

    2、拉链法

     

     二、应用场景

    1、哈希表在python中的应用

    a = {'name': 'Alex', 'age': 18, 'gender': 'Man'}
    使用哈希表存储字典,通过哈希函数将字典的键映射为下标。假设h(‘name’) = 3, h(‘age’) = 1, h(‘gender’) = 4,则哈希表存储为[None, 18, None, ’Alex’, ‘Man’]
    在字典键值对数量不多的情况下,几乎不会发生哈希冲突,此时查找一个元素的时间复杂度为O(1)

    2、加密对比MD5

    1. 不可逆:是因为算法回溯时间很长
    2. 32 64 128 指的是你返回MD5的长度
    3. MD5也是一个哈希函数,所以它也会发生冲突
    4. 两个文件不一样,但是MD5值不一样,因为你这个hash函数占用的空间太大了
  • 相关阅读:
    Java中使用Jedis操作Redis
    Predicate与filter
    Joiner的用法
    Immutable集合
    【Excle数据透视】如何在数据透视表字段列表中显示更多的字段
    【Excle数据透视表】如何显示/隐藏数据透视表字段列表
    【Excle数据透视】如何创建多条件汇总的数据透视表
    【Excle数据透视表】如何创建非共享缓存的数据透视表
    【Excle数据透透视表】如何删除数据透视表
    【Excle数据透视表】如何复制数据透视表
  • 原文地址:https://www.cnblogs.com/luoahong/p/9703276.html
Copyright © 2011-2022 走看看