• 哈希表


    散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
    给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。
    一、直接寻址法
    当关键字的全域比较小时,直接寻址是一种简单而有效的方法。通过键直接找到值。

    直接寻址技术缺点:
    当域U很大时,需要消耗大量内存,很不实际
    如果域U很大而实际出现的key很少,则大量空间被浪费
    无法处理关键字不是数字的情况。

    二、哈希

    改进直接寻址表:哈希(Hashing)
    构建大小为m的寻址表T,
    key为k的元素放到h(k)位置上,
    h(k)是一个函数,其将域U映射到表T[0,1,...,m-1]。

    三、哈希表

    哈希表(Hash Table,又称为散列表),是一种线性表的存储结构。哈希表由一个直接寻址表和一个哈希函数组成。

    哈希函数h(k)将元素关键字k作为自变量,返回元素的存储下标。
    简单哈希函数:
    除法哈希:h(k) = k mod m
    乘法哈希:h(k) = floor(m(kA mod 1)) 0<A<1
    假设有一个长度为7的数组,哈希函数h(k)=k mod 7。元素集合{14,22,3,5}的存储方式如下图。

    四、哈希冲突

    由于哈希表的大小是有限的,而要存储的值的总数量是无限的,因此对于任何哈希函数,都会出现两个不同元素映射到同一个位置上的情况,这种情况叫做哈希冲突。
    比如:h(k)=k mod 7, h(0)=h(7)=h(14)=...

    五、解决哈希冲突的方法——开放寻址法

    开放寻址法:如果哈希函数返回的位置已经有值,则可以向后探查新的位置来存储这个值。
    线性探查:如果位置i被占用,则探查i+1, i+2,……
    二次探查:如果位置i被占用,则探查i+12,i-12,i+22,i-22,……
    二度哈希:有n个哈希函数,当使用第1个哈希函数h1发生冲突时,则尝试使用h2,h3,……

    六、解决哈希冲突的方法——拉链法

    拉链法:哈希表每个位置都连接一个链表,当冲突发生时,冲突的元素将被加到该位置链表的最后。

    结束!

  • 相关阅读:
    深度学习学习总结
    线性回归学习总结
    机器学习常用算法总结
    2020年,给自己立个flag
    与博客添网易云外钟墯之坑
    给博客添加网易云外链时掉的坑
    BEGINNING
    【华为云技术分享】程序员真香定律:源码即设计
    【华为云技术分享】【DevCloud · 敏捷智库】如何利用核心概念解决估算常见问题
    差点被祭天!狂欢618,且看研发人如何绝地求生
  • 原文地址:https://www.cnblogs.com/aaronthon/p/13655139.html
Copyright © 2020-2023  润新知