• 哈希(1) hash的基本知识回顾


    好久没看数据结构了,现在也打不起精神来,翻了一下书,严蔚敏那本书。,以下是书的第9章,发现自己很多时候对知识的认识无法结构化和系统化,都是零散的,模糊的混乱的记忆,以后要有体系,

    第9章 查找    
    9.1 静态查找表
    9.1.1 顺序表的查找
    9.1.2 有序表的查找
    9.1.3 静态树表的查找
    9.1.4 索引顺序表的查找
    9.2 动态查找表
    9.2.1 二叉排序树和平衡二叉树
    9.2.2 b-树和b 树
    9.2.3 键树
    9.3 哈希表
    9.3.1 什么是哈希表
    9.3.2 哈希函数的构造方法
    9.3.3 处理冲突的方法
    9.3.4 哈希表的查找及其分析

     

    我们可以看到。哈希表 是查找这章的。

    哈希表用来快速查找的,我们知道快速查找,在数据库中就是索引,在数据库中确实有hash索引,在hashmap中可以根据key快速查找,同时java中的hashcode是干什么用的?好了,什么事哈希表呢?

    1.从数据扯起

    数组中可以根据下表快速定位地址

    假设 int  a[]={1,2,3,4};

    我们立马可以通过a[0]获得1,根据下标快速的找到了第0个元素的位置。

    2.哈希表的引入

    1.哈希表就是一个数组。              数组要多大呢?如果当前数据增多了,当前数组不够用了咋办?如何扩张

    2.根据key快速定位到数组的位置,如何定位(hash函数);在数组中key 就是 0,1,2。但是遗憾的是key并不是那么简单,比如 key是String类型呢?如何根据key快速找到它的位置呢?               如何定义一个hash函数。

    总之将key转化为数组下标,这是最重要的。

    3hash函数的设计方法

    http://www.cnblogs.com/sooner/archive/2013/04/19/3031087.html

    目的:要根据key尽可能的均匀的映射到数组中。

          1:平方取中法(知道就行)

      取关键字平方后的中间几位为哈希地址。

           2.除留余数法(==最常用的方法)

               通常来说,最后一步都用这个方法,index=key%p; 对数组长度取余数

            3、随机数法(知道就行)

                  随机确定地址

      其他的自己查吧。

    4.冲突解决(开放地址法和拉链法)

     (a)拉链法: 就是数组加链表 hashmap就是这样实现的

      (b)开放地址法:线性探测,和二次探测

    http://www.cnblogs.com/dolphin0520/archive/2012/09/28/2700000.html

    这是一个粗略的知识架构,后面细一点学习

      


      

     

     

     

  • 相关阅读:
    面试小结
    Everything工具使用
    记 · 工作一周年
    贝叶斯算法原理分析
    MySQL与Oracle主键Query性能测试结果
    K-meams文本聚类算法C++实现
    OPTICS光学算法
    页面添加内容后弹出框与跳转页面
    Webgrid参数格式
    页面2级分类
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3828502.html
Copyright © 2020-2023  润新知