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

    哈希表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过把关键码映射的位置去寻找存放值的地方。键可以对应多个值(即哈希冲突),值根据相应的hash公式存入对应的键中。

     哈希函数的构造要求:

    1. 运算过程要尽量简单高效,以提高哈希表的插入和检索效率;
    2. 哈希函数应该具有较好的散列型,以降低哈希冲突的概率,即尽量使关键字对应的记录均匀分配在哈希表里面
    3. 哈希函数应具有较大的压缩性,以节省内存
    4. 关键字极小的变化可以引起哈希值极大的变化。

    哈希冲突解决方法:1.链地址法

    链地址法的原理时如果遇到冲突,他就会在原地址新建一个空间,然后以链表结点的形式插入到该空间。

    下面从百度上截取来一张图片,可以很清晰明了反应下面的结构。比如说我有一堆数据{1,12,26,337,353...},而我的哈希算法是H(key)=key mod 16,第一个数据1的哈希值f(1)=1,插入到1结点的后面,第二个数据12的哈希值f(12)=12,插入到12结点,第三个数据26的哈希值f(26)=10,插入到10结点后面,第4个数据337,计算得到哈希值是1,遇到冲突,但是依然只需要找到该1结点的最后链结点插入即可,同理353。

     2. 开放地址法

    参考文章:

    https://www.cnblogs.com/s-b-b/p/6208565.html

    https://www.cnblogs.com/jijiji/p/4856805.html

  • 相关阅读:
    noi 2011 noi嘉年华 动态规划
    最小乘积生成树
    noi 2009 二叉查找树 动态规划
    noi 2010 超级钢琴 划分树
    noi 2011 阿狸的打字机 AC自动机
    noi 2009 变换序列 贪心
    poj 3659 Cell Phone Network 动态规划
    noi 2010 航空管制 贪心
    IDEA14下配置SVN
    在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  • 原文地址:https://www.cnblogs.com/xiaoxue126/p/8985115.html
Copyright © 2011-2022 走看看