• 散列表(hash表)


    (20200813修改) 

    1. 散列表(哈希表)

        基本概念:

          散列函数:可由关键字得到散列地址的函数;

          散列地址:数据存储的地址

          散列表:一个有限连续的地址空间,通常是一维数组,数组的下标是散列地址,存储的是数据

      (1) 构造散列函数的方法

        ① 数字分析法:将关键字列出进行比较,舍去无变化或变化很小的几位,留下随机变化的几位作散列地址;比如同一书店的ISBN的前几位都一样,那就将前几位舍去,只保留后几位。

        ② 平方取中法:key值平方后取中间几个数,因为中间几个数与数的每一位都相关。

        ③ 折叠法:

          概念:将关键字分割成长度相同的几部分,允许最后一部分长度不够,将各部分叠加,舍去进位,得到散列地址。

          1) 移位叠加:每一次取数是按顺序取数。比如:75315948623(按3位分割),分割的各部分为:753,159,486,23

          2) 边界叠加:取数是按顺序和逆序交替取数。比如:75315948623(按3位分割),分割的各部分为:753,951,486,32

        ④ 除留取余法(最简单,最常用)

          概念:选一个不大于散列表表长的数m,将key是对m取余(key%m)得到散列地址

      注:实际应用可以是前三种方法和第四种的组合

      (2) 处理冲突的方法

        ① 开放地址法

          1) 线性探测法:1,2,3,4,5,6

          2) 二次探测法:1^2,-1^2,2^2,-2^2,3^2,-3^2

          3) 伪随机法:产生一个伪随机数进行相加

        ② 链地址法:相同散列地址的记录放在同一个单链表中,数组存放链表的头指针

      (3) 散列表的查找

        ① 开放地址法的线性探测法会有二次聚集现象发生,例如当i,i+1,i+2位置都存了记录时,当这三个地址发生冲突时都会竞争i+3这个位置

        ② 装填因子(α)=表中填入的记录数/散列表的长度

  • 相关阅读:
    Spring 学习——Spring IOC概念
    Oracle使用——Oracle表空间处理
    Spring 学习——Spring框架结构、概念
    Java错误——The hierarchy of the type is inconsistent错误
    Git教程
    git 常用操作
    "use strict"; 的正确使用
    react学习笔记(二)React表单详解
    chrome 添加有用扩展程序
    react学习笔记(一)
  • 原文地址:https://www.cnblogs.com/yu-xia-zheng-ye/p/13480430.html
Copyright © 2020-2023  润新知