美文网首页
数据结构笔记(散列查找->散列表)

数据结构笔记(散列查找->散列表)

作者: 岸边露伴一动不动 | 来源:发表于2020-07-17 15:13 被阅读0次

为了解决动态查找的问题
散列查找法的两项基本工作:

  • 计算位置:构造散列函数确定关键词存储位置
  • 解决冲突:应用某种策略,解决多个关键词位置相同的问题
    时间复杂度几乎为O(1)

散列表(哈希表)

  • 类型名称:符号表(SymbolTable)
  • 数据对象集:符号表是”名字(Name)-属性(Attribute)“对的集合
  • 装填因子:散列表大小/填入散列表元素的个数

散列函数

数字关键词的散列函数构造

  • 直接定址法
    h(key) = a * key + b
  • 除留余数法
    h(key) = key % p(p = Tablesize,一般取素数)
  • 数字分析法
    取比较随机的几位数字组成散列地址
  • 折叠法
    把关键词分成位数相同的几个部分,然后叠加
  • 平方取中法
    大数平方,取中间几位作为地址

字符关键词的散列函数构造

  • ASCII码加和法
    h(key) = 每个字符ASCII码加和 mode Tablesize
  • 前三个字符移位法
    h(key) = (key[0] * 27 ^ 2 + key[1] * 27 ^ 1 + key[2] * 27 ^ 0)mod Tablesize
  • 移位法

散列表查找性能分析

  • 成功平均查找长度(ASLs)
  • 不成功平均查找长度(ASLu)

影响散列表性能因素

  • 散列函数是否均匀
  • 处理冲突的方法
  • 散列表的装填因子α

再散列

  • 当装填因子过大,查找效率下降,装填因子最好在0.5-0.85之间
  • 解决的方法是加倍扩大散列表,即再散列(Rehashing)

处理冲突的方法

开放地址法(Open Addressing)

hi(key) = (h(key) + di) mod Tablesize

  • 线性探测 di = i
  • 平方探测 di = ±i^2(如果表的大小设计为4k+3形式的素数,平方探测法可以探测到整个散列表空间)
  • 双散列 di = i*h2(key)

分离链接法

  • 冲突的关键词存放在同一个单链表中

相关文章

  • 数据结构笔记(散列查找->散列表)

    为了解决动态查找的问题散列查找法的两项基本工作: 计算位置:构造散列函数确定关键词存储位置 解决冲突:应用某种策略...

  • 基础概念

    散列表 散列表是一种将键(Key)映射为值(Value)从而快速查找的数据结构 散列表包含一个底层数组和一个散列函...

  • 数据结构与算法JavaScript描述(6) —— 散列(Has

    散列 散列是一种常用的数据存储技术,散列后的数据可以快速地插入或取用。散列使用的数据结构叫做散列表。在散列表上插入...

  • 哈希表查找概述

    0.前言 本节内容如下:1.散列表查找定义2.散列函数的构造方法3.处理散列冲突的方法4.散列表查找算法实现5.S...

  • 散列表

    什么是散列表 散列表也叫哈希表,输入某一关键字输出其对应的数值的数据结构 散列表的生成依赖于散列函数,散列函数的要...

  • HashMap底层原理分析

    HashMap又称之为散列表,这是一种使查找,插入和删除都具备良好性能的数据结构,其查找的时间复杂度为O()。散列...

  • 数据结构——散列

    散列也叫作散列表,是一种非线性的数据结构,可以用来快速的查找和插入数据。在 JavaScript 中,通常使用数组...

  • 散列表面面观

    引子 散列的概念应用很广泛,比如加密,散列表,几何散列等。而散列表更是日常工作中常见的数据结构,同时也是面试中最常...

  • 散列表

    概念 散列表的实现常常叫做散列(hashing)。散列是一种用于以常数平均时间执行插入、删除和查找的技术。散列函数...

  • 算法图解-散列表

    1. 散列表 散列表由键和值组成,散列表将键映射到值。 在复杂数据结构中,散列表可能是最有用的,也被称为散列映射、...

网友评论

      本文标题:数据结构笔记(散列查找->散列表)

      本文链接:https://www.haomeiwen.com/subject/nhmghktx.html